使用Eclipse开发工具运行MapReduce统计单词出现次数
使用开发工具运行统计单词出现次数
1.##我在这里将原先准备好的10000个单词的英语文章通过U盘移动到了系统中,也可以通过其它的方式,比如FTP传输或者将功能增强,直接拖拽进去也可。
2.##将刚才导入的英语文章文档上传到/home/目录下。
:cp ljzEnglish10000.txt /home/hadoop //将准备好的文档导入/home/hadoop目录下
:cd /usr/local/hadoop //进入这个目录下才能启动hadoop
:./sbin/start-dfs.sh //启动Hadoop
3.##启动完后,现在/user/路径下创建input文件夹,然后将刚才复制过去的.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.##启动开发工具,导入包以及设置环境,再创建.java文件
: cd /usr/local/eclipse
:./eclipse
可以直接采用默认的设置“/home//”,点击“OK”按钮。可以看出,由于当前是采用用户登录了Linux系统,因此,默认的工作空间目录位于用户目录“/home/”下。
选择“File–>New–>Java ”菜单,开始创建一个Java工程,弹出如下图所示界面。
在“ name”后面输入工程名称“”,选中“Use ”,让这个Java工程的所有文件都保存到“/home///”目录下。在“JRE”这个选项卡中,可以选择当前的Linux系统中已经安装好的JDK,比如jdk1.8.0_162。然后,点击界面底部的“Next>”按钮,进入下一步的设置。
进入下一步的设置以后,会弹出如下图所示界面。
需要在这个界面中加载该Java工程所需要用到的JAR包,这些JAR包中包含了与相关的Java API。这些JAR包都位于Linux系统的安装目录下,对于本教程而言,就是在“/usr/local//share/”目录下。点击界面中的“”选项卡,然后,点击界面右侧的“Add JARs…”按钮,弹出如下图所示界面。
在该界面中,上面有一排目录按钮(即“usr”、“local”、“”、“share”、“”、“”和“lib”),当点击某个目录按钮时,就会在下面列出该目录的内容。
为了编写一个程序,一般需要向Java工程中添加以下JAR包:
(1)“/usr/local//share//”目录下的--3.1.3.jar和haoop-nfs-3.1.3.jar;
(2)“/usr/local//share///lib”目录下的所有JAR包;
(3)“/usr/local//share//”目录下的所有JAR包,但是,不包括jdiff、lib、lib-和目录,具体如下图所示。
(4)“/usr/local//share///lib”目录下的所有JAR包。
比如,如果要把“/usr/local//share//”目录下的--3.1.3.jar和haoop-nfs-3.1.3.jar添加到当前的Java工程中,可以在界面中点击相应的目录按钮,进入到目录,然后,界面会显示出目录下的所有内容(如下图所示)。
请在界面中用鼠标点击选中--3.1.3.jar和haoop-nfs-3.1.3.jar,然后点击界面右下角的“确定”按钮,就可以把这两个JAR包增加到当前Java工程中,出现的界面如下图所示。
从这个界面中可以看出,--3.1.3.jar和haoop-nfs-3.1.3.jar已经被添加到当前Java工程中。然后,按照类似的操作方法,可以再次点击“Add JARs…”按钮,把剩余的其他JAR包都添加进来。需要注意的是,当需要选中某个目录下的所有JAR包时,可以使用“Ctrl+A”组合键进行全选操作。全部添加完毕以后,就可以点击界面右下角的“”按钮,完成Java工程的创建,如下图所示:
6.##环境创建好后,在文件下创建一个.class的文件
如图所示:
##在刚创建好的.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 [...] ");
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 {
44.private IntWritable result = new IntWritable();
45.
46.public IntSumReducer() {
47.}
48.
49.public void reduce(Text key, Iterable values, Reducer.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
代码运行后会弹出一个界面,直接点击OK即可,如下图所示:
代码如果运行成功,会出现一串红色代码,如下图所示:
将执行成功形成的一个运行程序,存放到下边这个路径下,如下图所示:
7.##再打开终端,输入命令,利用刚才的运行程序来执行10000字的英语文章
:./bin/hadoop jar ./myapp/WordCount.jar input output //前提是在/usr/local/hadoop路径
查询运行程序统计出来的每个单词出现的次数,如下图所示:
将统计好的单词次数导出成文件,命令如下图所示:
:./binhdfs dfs -get output ./output //前提是在/usr/local/hadoop路径
以上就是使用开发工具运行统计单词出现次数的过程。