Eclipes实现Mapreduce的配置(配图解与WordCount案例)
Eclipes实现Mapreduce的配置(虚拟机中)1.插件准备我们需要下载 hadoop-eclipse-plugin-2.7.1.jar插件,插件已经上传到群文件中如果你的文件下载在了windows中,点击下方的链接完成文件的上传windows上传文件到虚拟机的几种方法如果我们的文件在下载目录,我们可以通过下面的命令检查一下是否成功上传ls | grep hadoop-e接...
Eclipes实现Mapreduce的配置(虚拟机中)
1.插件准备
我们需要下载 hadoop-eclipse-plugin-2.7.1.jar
插件,插件已经上传到群文件中
链接: https://pan.baidu.com/s/19Zr6zkvWXK_u8ZIm-F-aBw
提取码: v9xx
如果你的文件下载在了windows中,点击下方的链接完成文件的上传
如果我们的文件在下载目录,我们可以通过下面的命令检查一下是否成功上传
ls | grep hadoop-e
接下来的操作假设我们已经把文件上传到了虚拟机下载目录中
2.Eclipes配置
接下来我们进入虚拟机中进行操作
1)启动hadoop
start-dfs.sh # 启动hadoop
jps # 查看启动状态
2)复制插件到eclipes\plugins 目录下
可以通过whereis eclipse
来查看 eclipes的位置
我的eclipes目录在/usr/local/eclipse
注意:如果有些人 有多个eclipes路径 可以试试 /usr/lib/eclipse
复制插件 cp命令
hadoop@hadoop-VirtualBox:~$ cp ~/下载/hadoop-eclipse-plugin-2.7.1.jar /usr/local/eclipse/plugins/
hadoop@hadoop-VirtualBox:~$ chown hadoop:hadoop /usr/local/eclipse/plugins/hadoop-eclipse-plugin-2.7.1.jar
3)通过命令使插件生效
生效插件,启动eclipes
hadoop@hadoop-VirtualBox:~/下载$ cd /usr/local/eclipse
hadoop@hadoop-VirtualBox:/usr/local/eclipse$ ./eclipse -clean # 重启eclipes
hadoop@hadoop-VirtualBox:/usr/local/eclipse$ eclipse -clean # 或者也可以用这个
注 clean命令只需要用一次即可,为了使插件生效,之后仍然可以和原先一样正常启动
4)eclipes中Map/Reduce配置
eclipes已经启动了,我们可以随便创个项目Test,直接finish
点击Window>Preferences 进入设置
题外话
如果插件没有出现的话可能是因为放的目录不对,对于 whereis eclipse有多种路径的情况下,可以换一个路径的plugins试试 比如 /usr/lib/eclipse/plugins
继续正文
点击设置中的Hadoop Map/Reduce 就是我们刚刚安装的插件
点击后面的Browse按钮,把虚拟机中的Hadoop位置添加进去
usr/local/hadoop
效果如下,接下来 Apply and Close
但是我们发现左边的视图仍没有改变,这是因为我们处于默认的Java default视图下,我们需要切换到Map/reduce
点击 Window>Perspectivr>open Perspectivr>other
选择Map/Reduce视图
就得到了我们想要的结果了
点击下面的蓝蓝的小图标进行创建
默认是这样的
我们只需要为它取名字,修改DFS Master的端口号为9000即可,点击Finish
可以看到HDFS的目录已经出现在了Eclipes中双击可以查看内容,右键点击可以上传、下载、删除 HDFS 中的文件,无需再通过繁琐的 hdfs dfs -ls
等命令进行操作了。
注意,这里的文件是自己事先上传到HDFS中的,并不是打开就有这么多
Tips
HDFS 中的内容变动后,Eclipse 不会同步刷新,需要右键点击 Refresh,才能看到变动后的文件。
5)代码测试
新建一个MapReduce Project ,随便取个名字,直接finish
我们可以看到.eclipes已经自动为我们导入了所需要的包
在刚创建的项目中新建一个Class
代码如下
package org.apache.hadoop.examples;
import java.io.IOException;
import java.util.Iterator;
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 WordCount() {
}
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 <in> [<in>...] <out>");
System.exit(2);
}
Job job = Job.getInstance(conf, "word count");
job.setJarByClass(WordCount.class);
job.setMapperClass(WordCount.TokenizerMapper.class);
job.setCombinerClass(WordCount.IntSumReducer.class);
job.setReducerClass(WordCount.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);
}
public static class IntSumReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
private IntWritable result = new IntWritable();
public IntSumReducer() {
}
public void reduce(Text key, Iterable<IntWritable> values, Reducer<Text, IntWritable, Text, IntWritable>.Context context) throws IOException, InterruptedException {
int sum = 0;
IntWritable val;
for(Iterator i$ = values.iterator(); i$.hasNext(); sum += val.get()) {
val = (IntWritable)i$.next();
}
this.result.set(sum);
context.write(key, this.result);
}
}
public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> {
private static final IntWritable one = new IntWritable(1);
private Text word = new Text();
public TokenizerMapper() {
}
public void map(Object key, Text value, Mapper<Object, Text, Text, IntWritable>.Context context) throws IOException, InterruptedException {
StringTokenizer itr = new StringTokenizer(value.toString());
while(itr.hasMoreTokens()) {
this.word.set(itr.nextToken());
context.write(this.word, one);
}
}
}
}
在这之前,我们要先往hdfs中的input目录上传2个要统计的文件,内容可以自定
接下来我们就可以右键run,当然在这里我们要自己设置一下参数
手动输入参数,点击运行,我们会发现他报错了,并且错误原因是 Path not exist
这是因为我们没有上传我们配置过的文件到项目的src目录下
将我们之前修改过的文件和日志加入eclipes的项目src目录下
cp /usr/local/hadoop/etc/hadoop/core-site.xml ~/workspace/Mytest/src
cp /usr/local/hadoop/etc/hadoop/hdfs-site.xml ~/workspace/Mytest/src
cp /usr/local/hadoop/etc/hadoop/log4j.properties ~/workspace/Mytest/src
右键src Refresh刷新,就可以看到他们了
接下来按刚刚的步骤重新运行,记得输入参数,运行结果如下
刷新之后我们就可以看到output文件夹了
里面就存放了我们要统计的结果
成功!
更多推荐
所有评论(0)