`
chenhua_1984
  • 浏览: 1253860 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

hadoop学习笔记之五:hadoop MapReduce wordcount

阅读更多

      搭建好了Eclipse的开发环境,接下来就是Helloword,hadoop 的HelloWord是一个Wordcount的例子,就是统计单词在不同的文档里出现的次数。

 

     我这边准备了三个文档:(存入hdfs 的文件系统中)

 

[root@bigdata2 hadoop-1.0.1]# ./bin/hadoop fs -cat /user/root/in/helloword.txt
Warning: $HADOOP_HOME is deprecated.

Hello,Word!
[root@bigdata2 hadoop-1.0.1]# ./bin/hadoop fs -cat /user/root/in/input1.txt
Warning: $HADOOP_HOME is deprecated.

hello,word !
what's your name ?
haow are you ?
are you ok ?
are  you ok ?

[root@bigdata2 hadoop-1.0.1]# ./bin/hadoop fs -cat /user/root/in/input2.txt
Warning: $HADOOP_HOME is deprecated.

hello,mobile.
hello,word !
what's your name ?
haow are you ?
are you ok ?
are  you ok ?

    WordCount.java

  

package wordcount;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.StringTokenizer;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapred.FileInputFormat;
import org.apache.hadoop.mapred.FileOutputFormat;
import org.apache.hadoop.mapred.JobClient;
import org.apache.hadoop.mapred.JobConf;
import org.apache.hadoop.mapred.MapReduceBase;
import org.apache.hadoop.mapred.Mapper;
import org.apache.hadoop.mapred.OutputCollector;
import org.apache.hadoop.mapred.Reducer;
import org.apache.hadoop.mapred.Reporter;
import org.apache.hadoop.mapred.TextInputFormat;
import org.apache.hadoop.mapred.TextOutputFormat;

public class WordCount {

        public static class MapClass extends MapReduceBase implements
                        Mapper<LongWritable, Text, Text, IntWritable> {

                private final static IntWritable one = new IntWritable(1);
                private Text word = new Text();

                public void map(LongWritable key, Text value,
                                OutputCollector<Text, IntWritable> output, Reporter reporter)
                                throws IOException {
                        String line = value.toString();
                        StringTokenizer itr = new StringTokenizer(line);
                        while (itr.hasMoreTokens()) {
                                word.set(itr.nextToken());
                                output.collect(word, one);
                        }
                }
        }

        /**
         * A reducer class that just emits the sum of the input values.
         */
        public static class Reduce extends MapReduceBase implements
                        Reducer<Text, IntWritable, Text, IntWritable> {

                public void reduce(Text key, Iterator<IntWritable> values,
                                OutputCollector<Text, IntWritable> output, Reporter reporter)
                                throws IOException {
                        int sum = 0;
                        while (values.hasNext()) {
                                sum += values.next().get();
                        }
                        output.collect(key, new IntWritable(sum));
                }
        }

        public static void main(String[] args) throws Exception {
                JobConf conf = new JobConf(WordCount.class);
                conf.setJobName("wordcount");

                conf.setOutputKeyClass(Text.class);
                conf.setOutputValueClass(IntWritable.class);

                conf.setMapperClass(MapClass.class);
                conf.setCombinerClass(Reduce.class);
                conf.setReducerClass(Reduce.class);

                conf.setInputFormat(TextInputFormat.class);
                conf.setOutputFormat(TextOutputFormat.class);
            String outFileExt = "_" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
                FileInputFormat.setInputPaths(conf,new Path("hdfs://192.168.1.2:9000/user/root/in/"));
                FileOutputFormat.setOutputPath(conf, new Path("hdfs://192.168.1.2:9000/user/root/out/"+outFileExt));
                JobClient.runJob(conf);
        }

}

   直接运行

  

结果 写道
! 2
? 8
Hello,Word! 1
are 6
haow 2
hello,mobile. 1
hello,word 2
name 2
ok 4
what's 2
you 6
your 2

    代码解释:

  

  JobConf conf = new JobConf(WordCount.class);
                conf.setJobName("wordcount");

                conf.setOutputKeyClass(Text.class);
                conf.setOutputValueClass(IntWritable.class);

                conf.setMapperClass(MapClass.class);
                conf.setCombinerClass(Reduce.class);
                conf.setReducerClass(Reduce.class);

                conf.setInputFormat(TextInputFormat.class);
                conf.setOutputFormat(TextOutputFormat.class);

 

JobConf 负责读取配置文件(主要包括:core-site.xml,hdfs-site.xml,mapred-site.xml等)
 conf.setJobName("wordcount");主要用来设置JOB名称,便于页面监控

   InputFormat 主要负责调用getRecodeReader()方法生成RecordReader对象,RecordReader对象则调用CreatKey和CreatValue方法生产可以供Map处理的<Key,Value>键值对

 

   InputFormat方法有很多重写版本,支持不同的数据源,例如FileInputFormat,DbInputFormat等

  OutputFormat这负责输出的格式应为Key和value 是Object类型,那么内部会转为String来输出。

 

public void map(LongWritable key, Text value,
                                OutputCollector<Text, IntWritable> output, Reporter reporter

  

   Map函数产生<Key,ValueList>类型的键值对,交由Reduce函数进行处理

  

  int sum = 0;
                        while (values.hasNext()) {
                                sum += values.next().get();
                        }
                        output.collect(key, new IntWritable(sum));

  Reduce函数则负责将Value的值做Count,计算出次数,然后将结果输出。

 

  

 

 

 

 

 

分享到:
评论

相关推荐

    Hadoop mapreduce实现wordcount

    【标题】Hadoop MapReduce 实现 WordCount ...通过理解和实践 Hadoop MapReduce 的 WordCount 示例,开发者可以快速掌握 MapReduce 的基本工作原理,为进一步学习和应用大数据处理技术打下坚实基础。

    hadoop 框架下 mapreduce源码例子 wordcount

    在这个例子中,我们将深入理解Hadoop MapReduce的工作原理以及如何在Eclipse环境下实现WordCount源码。 1. **Hadoop MapReduce概述**: Hadoop MapReduce是由两个主要部分组成的:Map阶段和Reduce阶段。Map阶段将...

    使用hadoop实现WordCount实验报告.docx

    3. **运行WordCount程序**:调用Hadoop自带的Java程序`hadoop-mapreduce-examples-2.7.7.jar`,指定输入和输出参数。 ### 四、实验结果 成功运行WordCount后,可以在指定的输出文件夹(例如/output)中看到统计...

    hadoop mapreduce 例子项目,运行了单机wordcount

    WordCount程序是Hadoop MapReduce的入门示例,它由两个阶段组成:Map阶段和Reduce阶段。在Map阶段,输入的文本文件被分割成多个块,然后在不同的节点上并行处理。每个节点上的Mapper将读取数据,分割出单词(通常是...

    hadoop mapreduce wordcount

    &lt;groupId&gt;com.hadoop.mapreduce&lt;/groupId&gt; &lt;artifactId&gt;wordcount &lt;version&gt;0.0.1-SNAPSHOT &lt;packaging&gt;jar &lt;name&gt;wordcount &lt;url&gt;http://maven.apache.org&lt;/url&gt; &lt;project.build.sourceEncoding&gt;UTF-8 ...

    Hadoop原理与技术MapReduce实验

    (1)熟悉Hadoop开发包 (2)编写MepReduce程序 (3)调试和运行MepReduce程序 (4)完成上课老师演示的内容 二、实验环境 Windows 10 VMware Workstation Pro虚拟机 Hadoop环境 Jdk1.8 二、实验内容 1.单词计数实验...

    hadoop运行wordcount实例

    通过 WordCount 的学习和实践,可以帮助我们更好地理解 Hadoop 的基本工作原理以及 MapReduce 框架的使用。 #### 二、配置Hadoop过程中遇到的问题及解决方案 在配置Hadoop的过程中,可能会遇到以下常见问题及其...

    WordCount2_hadoopwordcount_

    在Hadoop生态系统中,`WordCount`程序是...`WordCount2.java`文件包含了该程序的源代码,展示了如何利用Hadoop的MapReduce模型进行分布式计算。理解并分析这个程序的源代码,有助于深入学习Hadoop和分布式计算的基础。

    Hadoop之MapReduce编程实例完整源码

    一个自己写的Hadoop MapReduce实例源码,网上看到不少网友在学习MapReduce编程,但是除了wordcount范例外实例比较少,故上传自己的一个。包含完整实例源码,编译配置文件,测试数据,可执行jar文件,执行脚本及操作...

    【大数据入门笔记系列】第五节 SpringBoot集成hadoop开发环境(复杂版的WordCount)

    【大数据入门笔记系列】第五节 SpringBoot集成hadoop开发环境(复杂版的WordCount)前言环境清单创建SpringBoot项目创建包创建yml添加集群主机名映射hadoop配置文件环境变量HADOOP_HOME编写代码添加hadoop依赖jar包...

    Ubuntu安装Hadoop实现MapReduce里的WordCount

    ### Ubuntu安装Hadoop实现MapReduce里的WordCount #### 核心知识点概述 1. **Ubuntu环境下的基础配置**:包括VMware Tools的安装、JDK的安装与配置。 2. **Hadoop的安装与配置**:包括下载与解压、环境变量配置、...

    hadoop wordcount 打包部署

    Hadoop WordCount 是一个经典的示例程序,用于演示如何利用Hadoop MapReduce框架进行大规模数据处理。WordCount 的基本任务是计算文本文件中每个单词出现的次数。通过这个简单的例子,可以了解Hadoop的基本操作流程...

    hadoop之wordcount例程代码

    WordCount是Hadoop入门学习中的一个经典示例,用于统计文本中各个单词出现的次数。这个程序简单直观,很好地展示了MapReduce的工作原理。接下来,我们将深入探讨Hadoop的WordCount实例及其背后的原理。 首先,我们...

    hadoop 运行成功代码(wordcount)

    在实际应用中,Hadoop WordCount的示例不仅可以帮助理解MapReduce的工作原理,还常用于性能基准测试和调试Hadoop集群。掌握这一基础,可以进一步学习更复杂的Hadoop应用,如数据分析、图计算等。 总之,通过这个...

    MapReduce wordcount demo

    用java的MapReduce写了个demo,用于计算文档单词出现个数

    实验2-在Hadoop平台上部署WordCount程序-孙淼1

    6. **Hadoop框架**:深入学习Hadoop 2.5.2版本的架构和配置,包括HDFS的管理和MapReduce的编程模型。 7. **WordCount程序**:这是Hadoop的入门示例,用于统计文本文件中单词的出现次数。程序包括Mapper和Reducer两...

    hadoop demo wordcount

    学习Hadoop WordCount实例,你可以深入了解以下知识点: 1. Hadoop环境搭建:包括安装Hadoop,配置Hadoop集群(单机或伪分布式),以及设置Hadoop环境变量。 2. MapReduce编程模型:理解Map和Reduce函数的工作原理...

    hadoop学习之wordCount以及文件上传demo,经测试通过

    总结起来,"hadoop学习之wordCount以及文件上传demo"涵盖了Hadoop的基本操作,包括数据处理的核心——MapReduce模型,以及文件系统的使用。通过WordCount实例,我们可以了解Hadoop的分布式计算原理;通过文件上传,...

    hadoop1.2.1修改WordCount并编译

    在编译 WordCount 程序时,我们需要使用 Hadoop 1.2.1 版本下的编译工具,例如 hadoop-1.2.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-1.2.1.jar。我们可以使用以下命令来编译 WordCount 程序: ``` ...

Global site tag (gtag.js) - Google Analytics