使用Eclipse完成WordCount案例(Windows本地运行)

网友投稿 823 2022-11-12

使用Eclipse完成WordCount案例(Windows本地运行)

使用Eclipse完成WordCount案例(Windows本地运行)

大家好,我是邵奈一,一个不务正业的程序猿、正儿八经的斜杠青年。 1、世人称我为:被代码耽误的诗人、没天赋的书法家、五音不全的歌手、专业跑龙套演员、不合格的运动员… 2、这几年,我整理了很多IT技术相关的教程给大家,爱生活、爱分享。

教程目录

​​0x00 教程内容​​​​0x01 完成MapReduce项目开发​​

​​1. 新建MapReduce项目​​​​2. 代码编写​​

​​0x02 本地运行MapReduce作业​​

​​1. 设置运行参数​​​​2. 准备统计文件​​​​3. 重新执行MapReduce作业​​

​​0x03 统计HDFS上的数据​​

​​1. 设置HDFS运行参数​​​​2. 将word.txt文件上传到HDFS上​​​​3. 执行并查看统计结果​​

​​0xFF 总结​​

0x00 教程内容

本教程非常简单,是学习大数据的入门案例。

实操前提: 1、安装好了Eclipse Java EE版本; 2、配置好了Eclipse中的Hadoop插件:将​​​hadoop-eclipse-plugin-2.5.2.jar​​拷贝到dropins文件夹,重新打开Eclipse即可;

0x01 完成MapReduce项目开发

1. 新建MapReduce项目

步骤:File=>New=>Other…=>Map/Reduce Project,如下图所示:

2. 代码编写

代码可以直接找到Hadoop安装包里提供的WordCount源码,路径为%HADOOP_HOME%\share\hadoop\mapreduce\sources\hadoop-mapreduce-examples-2.7.5-sources\org\apache\hadoop\examples的WordCount.java。 直接拷贝到新建的项目里即可,如果找不到,可以使用下面这个:

package com.shaonaiyi.mapreduce;import java.io.IOException;import java.util.StringTokenizer;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.IntWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Job;import org.apache.hadoop.mapreduce.Mapper;import org.apache.hadoop.mapreduce.Reducer;import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import org.apache.hadoop.util.GenericOptionsParser;public class WordCount { public static class TokenizerMapper extends Mapper{ private final static IntWritable one = new IntWritable(1); private Text word = new Text(); public void map(Object key, Text value, Context context ) throws IOException, InterruptedException { StringTokenizer itr = new StringTokenizer(value.toString()); while (itr.hasMoreTokens()) { word.set(itr.nextToken()); context.write(word, one); } } } public static class IntSumReducer extends Reducer { private IntWritable result = new IntWritable(); public void reduce(Text key, Iterable values, Context context ) throws IOException, InterruptedException { int sum = 0; for (IntWritable val : values) { sum += val.get(); } result.set(sum); context.write(key, result); } } public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs(); if (otherArgs.length < 2) { System.err.println("Usage: wordcount [...] "); System.exit(2); } Job job = Job.getInstance(conf, "word count"); job.setJarByClass(WordCount.class); job.setMapperClass(TokenizerMapper.class); job.setCombinerClass(IntSumReducer.class); job.setReducerClass(IntSumReducer.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); for (int i = 0; i < otherArgs.length - 1; ++i) { FileInputFormat.addInputPath(job, new Path(otherArgs[i])); } FileOutputFormat.setOutputPath(job, new Path(otherArgs[otherArgs.length - 1])); System.exit(job.waitForCompletion(true) ? 0 : 1); }}

注意修改包名,如果不同。其他地方不需要做任何改动。

0x02 本地运行MapReduce作业

1. 设置运行参数

因为还没有设置参数,所以,这样是肯定会报错的。此时,可以继续设置一下运行配置,当然,你在未运行之前执行也是可以的:

添加上两个参数,一个是文件的输入路径,一个是统计结果的路径:

​​datas/word.txt datas/output​​

2. 准备统计文件

因为需要统计文件,而且路径设置是在datas/word.txt,所以需要准备文件(路径为项目名下面的datas文件夹):

内容为:

hello hello hivespark hadoop hadoophi hi

3. 重新执行MapReduce作业

因为文件很少,所以一运行,马上就计算好了,目测不到3秒,此时刷新datas文件夹,可以看到统计结果了:

至此,第一个MapReduce作业就完成了,由于借助了Hadoop插件,所以这一整个流程非常地顺利。

0x03 统计HDFS上的数据

1. 设置HDFS运行参数

在前面其实也发现,我们实际上使用的是Windows本地的路径,所以统计的文件以及统计结果都是在本地的。其实我们可以直接将参数换成HDFS的,这样我们就可以统计HDFS上的数据并且将结果存放在HDFS上了。

说明:需要先启动HDFS,这里演示我是直接使用Windows本地搭建的HDFS环境,如果不清楚,请参考教程:​​Windows本地安装Hadoop​​

如果所示,将参数做相应的修改即可:

​​hdfs://localhost:8020/datas/word.txt hdfs://localhost:8020/datas/output​​

2. 将word.txt文件上传到HDFS上

注意:上传的路径为/datas文件夹

3. 执行并查看统计结果

(1)在Eclipse上运行WordCount程序

(2)查看HDFS上的统计数据

如图所示:

可以看到结果已经统计好了,此结果跟在本地运行是一样的。

0xFF 总结

本教程非常简单,主要是将MapReduce程序给跑起来,至于代码是什么意思,为什么要这么写,其实我们这里并不关心。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:1313_pyserial的安装以及文档的生成
下一篇:定时任务的时间设置-Cron表达式
相关文章

 发表评论

暂时没有评论,来抢沙发吧~