eclipse调试hadoop

来源:互联网 发布:windows即将过期怎么办 编辑:程序博客网 时间:2024/05/16 12:07

转自:http://blog.csdn.net/huoyunshen88/article/details/9275963

1. 搭建hadoop 伪分布式集群

http://hadoop.apache.org/docs/stable/single_node_setup.html


core-site.xml

[html] view plaincopy
  1. <configuration>  
  2. <property>  
  3.   <name>fs.default.name</name>  
  4.   <value>hdfs://localhost:9000</value>  
  5. </property>  
  6. <property>  
  7.   <name>hadoop.tmp.dir</name>  
  8.   <value>/home/user/data/temp</value>  
  9. </property>  
  10. <property>  
  11.   <name>dfs.name.dir</name>  
  12.   <value>/home/user/data/name</value>  
  13. </property>  
  14. <property>  
  15.   <name>dfs.data.dir</name>  
  16.   <value>/home/user/data/data</value>  
  17. </property>  
  18. <property>  
  19.   <name>dfs.replication</name>  
  20.   <value>1</value>  
  21. </property>  
  22. </configuration>  
注意: 在conf/hadoop-env.sh 中修改JDK路径  export JAVA_HOME=/usr/lib/jvm/java-6-sun-1.6.0.26 

2.  开启远端监听端口

在bin/hadoop 或 conf/hadoop-env.sh 加入以下内容,一次只能开启一个, 这里ip为10.13.249.132

[plain] view plaincopy
  1. HADOOP_NAMENODE_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8788,server=y,suspend=y"  
  2.   
  3. #HADOOP_SECONDARYNAMENODE_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8789,server=y,suspend=y"  
  4.   
  5. #HADOOP_DATANODE_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8790,server=y,suspend=y"  
  6.   
  7. #HADOOP_BALANCER_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8791,server=y,suspend=y"  
  8.   
  9. #HADOOP_JOBTRACKER_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8792,server=y,suspend=y"    
  10.   
  11. #HADOOP_TASKTRACKER_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8793,server=y,suspend=y"  

在conf/mapred-site.xml中添加以下配置项, 限制能启动task 的child数为1:

[html] view plaincopy
  1. <configuration>  
  2.   <property>  
  3.     <name>mapred.job.tracker</name>  
  4.     <value>localhost:9001</value>  
  5.   </property>  
  6.   <property>  
  7.     <name>mapred.child.java.opts</name>  
  8.     <value>-agentlib:jdwp=transport=dt_socket,address=8883,server=y,suspend=y</value>  
  9.   </property>  
  10. </configuration>  

此时开启hadoop,能看到namenode开启监听端口,如图:



3. eclipse java远程调试

装 eclipse 和 hadoop plugin 

 hadoop plugin 可以从源码编译出来 Hadoop 1.0.3/src/contrib/eclipse-plugin,  或使用聂永哥打包好的 下载地址

可用版本 eclipse3.7 + hadoop-eclipse-plugin-1.0.2 + Hadoop 1.0.3 , 

1) 配置hadoop插件

eclipse perspective -> Map/Reduce

General

Map/Reduce Master Host: localhost , Post: 9001

DFS Master Host: localhost, Post: 9000

User name: user

Advanced

dfs.data.dir, dfs.name.dir, dfs.tmp.dir 等填入 core-site.xml 中的值

mapred.child.java.opts = -Xmx200m -Xdebug -Xrunjdwp:transport=dt_socket,address=8883,server=y,suspend=y

2) eclipse开启远程调试功能,连接到运行hadoop的Ip与端口。如下图所示:



设置之后,在namenode的main()中设置一个断点,然后点击上图的debug,等待一会儿便能连上hadoop的namenode,这时便能调试hadoop的namenode了,datanode与jobtracker, tesktracker 类似。

3) 调试mapreduce程序

无参数 WordCount.java

[java] view plaincopy
  1. public class WordCount {  
  2.   
  3.   public static class TokenizerMapper  
  4.        extends Mapper<Object, Text, Text, IntWritable>{  
  5.   
  6.     private final static IntWritable one = new IntWritable(1);  
  7.     private Text word = new Text();  
  8.   
  9.     public void map(Object key, Text value, Context context  
  10.                     ) throws IOException, InterruptedException {  
  11.       StringTokenizer itr = new StringTokenizer(value.toString());  
  12.       while (itr.hasMoreTokens()) {  
  13.         word.set(itr.nextToken());  
  14.         context.write(word, one);  
  15.       }  
  16.     }  
  17.   }  
  18.   
  19.   public static class IntSumReducer  
  20.        extends Reducer<Text,IntWritable,Text,IntWritable> {  
  21.     private IntWritable result = new IntWritable();  
  22.   
  23.     public void reduce(Text key, Iterable<IntWritable> values,  
  24.                        Context context  
  25.                        ) throws IOException, InterruptedException {  
  26.       int sum = 0;  
  27.       for (IntWritable val : values) {  
  28.         sum += val.get();  
  29.       }  
  30.       result.set(sum);  
  31.       context.write(key, result);  
  32.     }  
  33.   }  
  34.   
  35.   public static void main(String[] args) throws Exception {  
  36.     Configuration conf = new Configuration();  
  37.   
  38.     Job job = new Job(conf, "word count");  
  39.     job.setJarByClass(WordCount.class);  
  40.     job.setMapperClass(TokenizerMapper.class);  
  41.     job.setCombinerClass(IntSumReducer.class);  
  42.     job.setReducerClass(IntSumReducer.class);  
  43.     job.setOutputKeyClass(Text.class);  
  44.     job.setOutputValueClass(IntWritable.class);  
  45.   
  46.     FileInputFormat.addInputPath(job, new Path("/wordcount/input"));  
  47.     FileOutputFormat.setOutputPath(job, new Path("/wordcount/out"));  
  48.   
  49.     System.exit(job.waitForCompletion(true) ? 0 : 1);  
  50.   }  
  51. }  

如果有参数, 选择“Run Configurations”,弹出窗口,点击“Arguments”选项卡,在“Program argumetns”处预先输入参数:

hdfs://master:9000/user/root/input2 hdfs://master:9000/user/root/output2

右键,选择“Run on Hadoop”, 就可以运行了.

设置断点(右键 –> Debug As – > Java Application),即可debug.

note1: 每次运行前删除out目录. 

note2: 如果提示hdfs中out目录权限不够,使用hadoop dfs chmod 770 /out 授权( Linux 下 ) .

note3:SafeModeException, 在主节点处,关闭掉安全模式: #bin/hadoop dfsadmin –safemode leave

另外,该插件会在eclipse对应的workspace\.metadata\.plugins\org.apache.hadoop.eclipse下,自动生成jar文件,以及其他文件,包括Haoop的一些具体配置等。


引用

eclipse调试hadoop源代码 http://hi.baidu.com/shenh062326/blog/item/b04a810cb48315f8aa645713.html

Hadoop学习笔记之在Eclipse中远程调试Hadoop http://www.blogjava.net/yongboy/archive/2012/04/26/376486.html

通过eclipse调试MapReduce任务 http://rdc.taobao.com/team/jm/archives/1761



0 0
原创粉丝点击