搭建好了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
? 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 示例,开发者可以快速掌握 MapReduce 的基本工作原理,为进一步学习和应用大数据处理技术打下坚实基础。
在这个例子中,我们将深入理解Hadoop MapReduce的工作原理以及如何在Eclipse环境下实现WordCount源码。 1. **Hadoop MapReduce概述**: Hadoop MapReduce是由两个主要部分组成的:Map阶段和Reduce阶段。Map阶段将...
3. **运行WordCount程序**:调用Hadoop自带的Java程序`hadoop-mapreduce-examples-2.7.7.jar`,指定输入和输出参数。 ### 四、实验结果 成功运行WordCount后,可以在指定的输出文件夹(例如/output)中看到统计...
WordCount程序是Hadoop MapReduce的入门示例,它由两个阶段组成:Map阶段和Reduce阶段。在Map阶段,输入的文本文件被分割成多个块,然后在不同的节点上并行处理。每个节点上的Mapper将读取数据,分割出单词(通常是...
<groupId>com.hadoop.mapreduce</groupId> <artifactId>wordcount <version>0.0.1-SNAPSHOT <packaging>jar <name>wordcount <url>http://maven.apache.org</url> <project.build.sourceEncoding>UTF-8 ...
(1)熟悉Hadoop开发包 (2)编写MepReduce程序 (3)调试和运行MepReduce程序 (4)完成上课老师演示的内容 二、实验环境 Windows 10 VMware Workstation Pro虚拟机 Hadoop环境 Jdk1.8 二、实验内容 1.单词计数实验...
通过 WordCount 的学习和实践,可以帮助我们更好地理解 Hadoop 的基本工作原理以及 MapReduce 框架的使用。 #### 二、配置Hadoop过程中遇到的问题及解决方案 在配置Hadoop的过程中,可能会遇到以下常见问题及其...
在Hadoop生态系统中,`WordCount`程序是...`WordCount2.java`文件包含了该程序的源代码,展示了如何利用Hadoop的MapReduce模型进行分布式计算。理解并分析这个程序的源代码,有助于深入学习Hadoop和分布式计算的基础。
一个自己写的Hadoop MapReduce实例源码,网上看到不少网友在学习MapReduce编程,但是除了wordcount范例外实例比较少,故上传自己的一个。包含完整实例源码,编译配置文件,测试数据,可执行jar文件,执行脚本及操作...
【大数据入门笔记系列】第五节 SpringBoot集成hadoop开发环境(复杂版的WordCount)前言环境清单创建SpringBoot项目创建包创建yml添加集群主机名映射hadoop配置文件环境变量HADOOP_HOME编写代码添加hadoop依赖jar包...
### Ubuntu安装Hadoop实现MapReduce里的WordCount #### 核心知识点概述 1. **Ubuntu环境下的基础配置**:包括VMware Tools的安装、JDK的安装与配置。 2. **Hadoop的安装与配置**:包括下载与解压、环境变量配置、...
Hadoop WordCount 是一个经典的示例程序,用于演示如何利用Hadoop MapReduce框架进行大规模数据处理。WordCount 的基本任务是计算文本文件中每个单词出现的次数。通过这个简单的例子,可以了解Hadoop的基本操作流程...
WordCount是Hadoop入门学习中的一个经典示例,用于统计文本中各个单词出现的次数。这个程序简单直观,很好地展示了MapReduce的工作原理。接下来,我们将深入探讨Hadoop的WordCount实例及其背后的原理。 首先,我们...
在实际应用中,Hadoop WordCount的示例不仅可以帮助理解MapReduce的工作原理,还常用于性能基准测试和调试Hadoop集群。掌握这一基础,可以进一步学习更复杂的Hadoop应用,如数据分析、图计算等。 总之,通过这个...
用java的MapReduce写了个demo,用于计算文档单词出现个数
6. **Hadoop框架**:深入学习Hadoop 2.5.2版本的架构和配置,包括HDFS的管理和MapReduce的编程模型。 7. **WordCount程序**:这是Hadoop的入门示例,用于统计文本文件中单词的出现次数。程序包括Mapper和Reducer两...
学习Hadoop WordCount实例,你可以深入了解以下知识点: 1. Hadoop环境搭建:包括安装Hadoop,配置Hadoop集群(单机或伪分布式),以及设置Hadoop环境变量。 2. MapReduce编程模型:理解Map和Reduce函数的工作原理...
总结起来,"hadoop学习之wordCount以及文件上传demo"涵盖了Hadoop的基本操作,包括数据处理的核心——MapReduce模型,以及文件系统的使用。通过WordCount实例,我们可以了解Hadoop的分布式计算原理;通过文件上传,...
在编译 WordCount 程序时,我们需要使用 Hadoop 1.2.1 版本下的编译工具,例如 hadoop-1.2.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-1.2.1.jar。我们可以使用以下命令来编译 WordCount 程序: ``` ...