windows下Eclipse的Hadoop运行调试环境搭建
2016-03-27 09:18
585 查看
环境说明:
windows 7
Eclipse mars
hadoop-eclipse插件
hadoop-core-1.2.1-forwinlocal.jar
hadoop集群
hadoop-1.2.1-bin.tar.gz
3.4的下载地址见http://pan.baidu.com/s/1i4ejXch
首先有两种运行方式:
MR程序以Local模式运行在windows本地,操作hdfs的文件。适用于利用小规模的数据集调试MR程序,之后打包成jar上传到集群进行正式的作业。
MR程序直接运行在hadoop集群上,省去打包上传到集群的步骤,Eclipse的Console会打印相关信息
推荐使用第一种方式,一是由于配置简单,二是由于正式作业时间较长,这样就可以不用直接开着自己电脑上的Eclipse了。调试好的程序直接去运行即可。以下分开对两种运行模式的配置做说明。
注:为解决部分权限问题,需要将windows的用户名Administrator或者自定义的用户名修改为hadoop集群的用户名称,如root,或hadoop等。
解压hadoop-1.2.1-bin.tar.gz,将hadoop-core-1.2.1.jar替换为hadoop-core-1.2.1-forwinlocal.jar。如不替换,运行时会报文件权限的错误。
启动Eclipse,打开Map/Reduce视图。window-Preferences-Hadoop Map/Reduce下选择hadoop-1.2.1-bin.tar.gz的解压目录
在视图正下方的Map/Reduce Locations页面New Hadoop Location,填入hadoop集群配置文件core-site.xml和mapred-site.xml中指定的Map/Reduce Master和DFS Master的IP地址和端口号。其余选项默认即可
在左侧的Project Explorer中即可看到DFS Location中有了我们刚才新增的hdfs。可以新建文件夹删除文件看是否已经可用。
然后New一个Project,选择Map/Reduce Project,这里我们以WordCount为例,代码如下:
在代码区域右键,Run as-run on hadoop,即可看到wordcount正确运行。之后再将MR打包发布到集群上作业。
至此,结束。
上一部分第二步中解压完hadoop-1.2.1-bin.tar.gz,可不替换hadoop-core-1.2.1.jar。集群模式运行不存在上述的文件权限问题。
WordCount程序的main方法中需要多加两行代码,在
如何才能打包wordcount成jar包?右击项目名,export-jar file-选择需要打包的文件(.classpath和.project可不打包),选择需要导出的jar包路径即可。
以上是所有内容。
这样整个MR程序的调试都完全脱离了hadoop的集群,完全在windows本地运行。即可以省略第一部分是步骤四。
windows 7
Eclipse mars
hadoop-eclipse插件
hadoop-core-1.2.1-forwinlocal.jar
hadoop集群
hadoop-1.2.1-bin.tar.gz
3.4的下载地址见http://pan.baidu.com/s/1i4ejXch
首先有两种运行方式:
MR程序以Local模式运行在windows本地,操作hdfs的文件。适用于利用小规模的数据集调试MR程序,之后打包成jar上传到集群进行正式的作业。
MR程序直接运行在hadoop集群上,省去打包上传到集群的步骤,Eclipse的Console会打印相关信息
推荐使用第一种方式,一是由于配置简单,二是由于正式作业时间较长,这样就可以不用直接开着自己电脑上的Eclipse了。调试好的程序直接去运行即可。以下分开对两种运行模式的配置做说明。
注:为解决部分权限问题,需要将windows的用户名Administrator或者自定义的用户名修改为hadoop集群的用户名称,如root,或hadoop等。
Windows的Local模式运行
将hadoop-eclispe插件放入eclipse安装目录的plugins文件夹下解压hadoop-1.2.1-bin.tar.gz,将hadoop-core-1.2.1.jar替换为hadoop-core-1.2.1-forwinlocal.jar。如不替换,运行时会报文件权限的错误。
启动Eclipse,打开Map/Reduce视图。window-Preferences-Hadoop Map/Reduce下选择hadoop-1.2.1-bin.tar.gz的解压目录
在视图正下方的Map/Reduce Locations页面New Hadoop Location,填入hadoop集群配置文件core-site.xml和mapred-site.xml中指定的Map/Reduce Master和DFS Master的IP地址和端口号。其余选项默认即可
在左侧的Project Explorer中即可看到DFS Location中有了我们刚才新增的hdfs。可以新建文件夹删除文件看是否已经可用。
然后New一个Project,选择Map/Reduce Project,这里我们以WordCount为例,代码如下:
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; public class WordCount { public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> { 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<Text, IntWritable, Text, IntWritable> { private IntWritable result = new IntWritable(); public void reduce(Text key, Iterable<IntWritable> 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(); Job job = new Job(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); String input = "hdfs://XXX:9000/data/input"; //hdfs完整输入路径 String output = "hdfs://XXX:9000/data/output"; //hdfs完整输出路径,必须是不存在的 FileInputFormat.addInputPath(job, new Path(input)); FileOutputFormat.setOutputPath(job, new Path(output)); System.exit(job.waitForCompletion(true) ? 0 : 1); } }
在代码区域右键,Run as-run on hadoop,即可看到wordcount正确运行。之后再将MR打包发布到集群上作业。
至此,结束。
hadoop集群模式运行
和上一部分配置步骤完全一致,有几点区别,如下:上一部分第二步中解压完hadoop-1.2.1-bin.tar.gz,可不替换hadoop-core-1.2.1.jar。集群模式运行不存在上述的文件权限问题。
WordCount程序的main方法中需要多加两行代码,在
Configuration conf = new Configuration();语句后添加
conf.set("mapred.job.tracker", "ip地址:端口号"); //MR master的ip地址和端口号 conf.set("mapred.jar", "XXXXX"); //wordcount程序打包成jar的本地路径,如"E:/XXX/xxx/wordcount.jar"
如何才能打包wordcount成jar包?右击项目名,export-jar file-选择需要打包的文件(.classpath和.project可不打包),选择需要导出的jar包路径即可。
以上是所有内容。
完全Local化模式
这是写本文档时想起的。第一部分我们说的是如何利用Local模式调试MR程序,但是仍然依赖于现有的Hadoop集群的HDFS环境。其实这是完全没必要的。调试环境可以直接在windows本地进行。wordcount的main方法中指定input和output的路径可以改写为:String input = "E:/XXX/data/input"; //本地路径即可 String output = "E:/XXX/data/output";
这样整个MR程序的调试都完全脱离了hadoop的集群,完全在windows本地运行。即可以省略第一部分是步骤四。
相关文章推荐
- Java设计模式之策略模式
- 《Java虚拟机原理图解》1.4 class文件里的字段表集合--field字段在class文件里是如何组织的
- java学习之---java虚拟机浅谈
- myEclipse 创建服务器
- Java反射机制
- 分布式 Springmvc myBatis shiro restful dubbo zookeepe
- java cp classpath
- Java基本类型
- 20145308刘昊阳 《Java程序设计》第4周学习总结
- Path must include project and resource name: /struts-default.xml
- myeclipse/eclipse修改JSP生成模板pageEncoding为UTF-8
- NetBeans建立跳过测试构建的快捷方式
- Spring 事务管理
- Java并发:可重入与线程安全
- Java并发:如何编写线程安全的代码
- Java重写equals方法和hashCode方法
- J2SE中的继承和封装
- Java获取当前进程ID以及所有Java进程的进程ID
- 三张图彻底了解Java中字符串的不变性
- Java语言基础