1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 使用Eclipse开发工具运行MapReduce统计单词出现次数

使用Eclipse开发工具运行MapReduce统计单词出现次数

时间:2023-03-21 23:48:57

相关推荐

使用Eclipse开发工具运行MapReduce统计单词出现次数

使用Eclipse开发工具运行MapRuce统计单词出现次数

1.##我在这里将原先准备好的10000个单词的英语文章通过U盘移动到了Ubuntu系统中,也可以通过其它的方式,比如FTP传输或者将Ubuntu功能增强,直接拖拽进去也可。

2.##将刚才导入的英语文章文档上传到/home/hadoop目录下。

:cp ljzEnglish10000.txt /home/hadoop //将准备好的文档导入/home/hadoop目录下

:cd /usr/local/hadoop //进入这个目录下才能启动hadoop:./sbin/start-dfs.sh//启动Hadoop

3.##启动完Hadoop后,现在/user/hadoop路径下创建input文件夹,然后将刚才复制过去的ljzEnglish10000.txt文件上传到HDFS

:./bin/hdfs dfs -mkdir -p /user/hadoop:./bin/hdfs dfs -ls:./bin/hdfs dfs -mkdir input//相对路径:./bin/hdfs dfs -mkdir /input //绝对路径:./bin/hdfs dfs -put /home/hadoop/ljzEnglish10000.txt input

##4.查看HDFS上传的文件,看一下刚才上传的文件文档是否存在

:./bin/hdfs dfs -ls input

5.##启动Eclipse开发工具,导入包以及设置环境,再创建WordCount.java文件

: cd /usr/local/eclipse:./eclipse

可以直接采用默认的设置“/home/hadoop/workspace”,点击“OK”按钮。可以看出,由于当前是采用hadoop用户登录了Linux系统,因此,默认的工作空间目录位于hadoop用户目录“/home/hadoop”下。

Eclipse启动以后,呈现的界面如下图所示。

选择“File–>New–>Java Project”菜单,开始创建一个Java工程,弹出如下图所示界面。

在“Project name”后面输入工程名称“WordCount”,选中“Use default location”,让这个Java工程的所有文件都保存到“/home/hadoop/workspace/WordCount”目录下。在“JRE”这个选项卡中,可以选择当前的Linux系统中已经安装好的JDK,比如jdk1.8.0_162。然后,点击界面底部的“Next>”按钮,进入下一步的设置。

进入下一步的设置以后,会弹出如下图所示界面。

需要在这个界面中加载该Java工程所需要用到的JAR包,这些JAR包中包含了与Hadoop相关的Java API。这些JAR包都位于Linux系统的Hadoop安装目录下,对于本教程而言,就是在“/usr/local/hadoop/share/hadoop”目录下。点击界面中的“Libraries”选项卡,然后,点击界面右侧的“Add External JARs…”按钮,弹出如下图所示界面。

在该界面中,上面有一排目录按钮(即“usr”、“local”、“hadoop”、“share”、“hadoop”、“mapreduce”和“lib”),当点击某个目录按钮时,就会在下面列出该目录的内容。

为了编写一个MapReduce程序,一般需要向Java工程中添加以下JAR包:

(1)“/usr/local/hadoop/share/hadoop/common”目录下的hadoop-common-3.1.3.jar和haoop-nfs-3.1.3.jar;

(2)“/usr/local/hadoop/share/hadoop/common/lib”目录下的所有JAR包;

(3)“/usr/local/hadoop/share/hadoop/mapreduce”目录下的所有JAR包,但是,不包括jdiff、lib、lib-examples和sources目录,具体如下图所示。

(4)“/usr/local/hadoop/share/hadoop/mapreduce/lib”目录下的所有JAR包。

比如,如果要把“/usr/local/hadoop/share/hadoop/common”目录下的hadoop-common-3.1.3.jar和haoop-nfs-3.1.3.jar添加到当前的Java工程中,可以在界面中点击相应的目录按钮,进入到common目录,然后,界面会显示出common目录下的所有内容(如下图所示)。

请在界面中用鼠标点击选中hadoop-common-3.1.3.jar和haoop-nfs-3.1.3.jar,然后点击界面右下角的“确定”按钮,就可以把这两个JAR包增加到当前Java工程中,出现的界面如下图所示。

从这个界面中可以看出,hadoop-common-3.1.3.jar和haoop-nfs-3.1.3.jar已经被添加到当前Java工程中。然后,按照类似的操作方法,可以再次点击“Add External JARs…”按钮,把剩余的其他JAR包都添加进来。需要注意的是,当需要选中某个目录下的所有JAR包时,可以使用“Ctrl+A”组合键进行全选操作。全部添加完毕以后,就可以点击界面右下角的“Finish”按钮,完成Java工程WordCount的创建,如下图所示:

6.##环境创建好后,在WordCount文件下创建一个.class的文件

如图所示:

##在刚创建好的WordCount.class下导入以下代码,并且运行.java文件

1.import java.io.IOException;2.import java.util.Iterator;3.import java.util.StringTokenizer;4.import org.apache.hadoop.conf.Configuration;5.import org.apache.hadoop.fs.Path;6.import org.apache.hadoop.io.IntWritable;7.import org.apache.hadoop.io.Text;8.import org.apache.hadoop.mapreduce.Job;9.import org.apache.hadoop.mapreduce.Mapper;10.import org.apache.hadoop.mapreduce.Reducer;11.import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;12.import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;13.import org.apache.hadoop.util.GenericOptionsParser;14. 15.public class WordCount {16.public WordCount() {17.}18. 19.public static void main(String[] args) throws Exception {20.Configuration conf = new Configuration();21.String[] otherArgs = (new GenericOptionsParser(conf, args)).getRemainingArgs();22.if(otherArgs.length < 2) {23.System.err.println("Usage: wordcount <in> [<in>...] <out>");24.System.exit(2);25.}26. 27.Job job = Job.getInstance(conf, "word count");28.job.setJarByClass(WordCount.class);29.job.setMapperClass(WordCount.TokenizerMapper.class);30.job.setCombinerClass(WordCount.IntSumReducer.class);31.job.setReducerClass(WordCount.IntSumReducer.class);32.job.setOutputKeyClass(Text.class);33.job.setOutputValueClass(IntWritable.class);34. 35.for(int i = 0; i < otherArgs.length - 1; ++i) {36.FileInputFormat.addInputPath(job, new Path(otherArgs[i]));37.}38. 39.FileOutputFormat.setOutputPath(job, new Path(otherArgs[otherArgs.length - 1]));40.System.exit(job.waitForCompletion(true)?0:1);41.}42. 43.public static class IntSumReducer extends Reducer<Text, IntWritable, Text, IntWritable> {44.private IntWritable result = new IntWritable();45. 46.public IntSumReducer() {47.}48. 49.public void reduce(Text key, Iterable<IntWritable> values, Reducer<Text, IntWritable, Text, IntWritable>.Context context) throws IOException, InterruptedException {50.int sum = 0;51. 52.IntWritable val;53.for(Iterator i$ = values.iterator(); i$.hasNext(); sum += val.get()) {54.val = (IntWritable)i$.next();55.}56. 57.this.result.set(sum);58.context.write(key, this.result);59.}60.}61. 62.public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> {63.private static final IntWritable one = new IntWritable(1);64.private Text word = new Text();65. 66.public TokenizerMapper() {67.}68. 69.public void map(Object key, Text value, Mapper<Object, Text, Text, IntWritable>.Context context) throws IOException, InterruptedException {70.StringTokenizer itr = new StringTokenizer(value.toString());71. 72.while(itr.hasMoreTokens()) {73.this.word.set(itr.nextToken());74.context.write(this.word, one);75.}76. 77.}78.}79.}

代码运行后会弹出一个界面,直接点击OK即可,如下图所示:

代码如果运行成功,会出现一串红色代码,如下图所示:

将执行成功形成的一个运行程序,存放到下边这个路径下,如下图所示:

7.##再打开终端,输入命令,利用刚才的运行程序WordCount来执行10000字的英语文章

:./bin/hadoop jar ./myapp/WordCount.jar input output //前提是在/usr/local/hadoop路径

查询WordCount运行程序统计出来的每个单词出现的次数,如下图所示:

将统计好的单词次数导出成文件,命令如下图所示:

:./binhdfs dfs -get output ./output//前提是在/usr/local/hadoop路径

以上就是使用Eclipse开发工具运行MapReduce统计单词出现次数的过程。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。