在Eclipse中远程调试Hadoop

我部署了一个Hadoop集群,但是在运行过程中总是会遇到各式的问题,虽然可以通过加一些Log来查看出错信息,但总是不太直观,并且也比较繁琐。因此最好能远程单步调试Hadoop。
在Hadoop中,一般常用的模块有:JobTracker、NameNode、DataNode、TaskTracker、JobClient、JobShell、FsShell、MapReduce等。那如何使用Eclipse来远程调试Hadoop的各个模块?
调试方法
这些Hadoop模块都对应一个个JVM进程。对Hadoop的各个模块进行远程调试本质上就是远程调试JVM。

而JVM本身就支持远程调试,只需要在各模块的JVM启动时加载以下参数:
-Xdebug -Xrunjdwp:transport=dt_socket, address=8000,server=y,suspend=y
各参数的含义:
-Xdebug
启用调试特性
-Xrunjdwp
启用JDWP实现,包含若干子选项:
transport=dt_socket
JPDA front-end和back-end之间的传输方法。dt_socket表示使用套接字传输。
address=8000
JVM在8000端口上监听请求,这个设定为一个不冲突的端口即可。
server=y
y表示启动的JVM是被调试者。如果为n,则表示启动的JVM是调试器。
suspend=y
y表示启动的JVM会暂停等待,直到调试器连接上才继续执行。suspend=n,则JVM不会暂停等待。
suspend=y这个选项很重要。如果想调试FsShell这种在CLient端启动的命令,则必须设置suspend=y。否则调试还没有启动,FsShell命令就执行解决了。

调试举例
NameNode调试
  • 修改NameNode节点上的文件bin/hadoop,将
123 elif [ "$COMMAND" = "namenode"  ; thenCLASS='org.apache.hadoop.hdfs.server.namenode.NameNode'HADOOP_OPTS="$HADOOP_OPTS $HADOOP_NAMENODE_OPTS"


改为:
123 elif [ "$COMMAND" = "namenode"  ; thenCLASS='org.apache.hadoop.hdfs.server.namenode.NameNode'HADOOP_OPTS="$HADOOP_OPTS $HADOOP_NAMENODE_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000"


suspend等于y或n取决于是否需要调试其启动过程。
  • 启动NameNode
  • 在Eclipse中,在NameNode代码上设置断点用于调试,再点击右键,选择调试配置:


  • 在对话框中选择远程Java应用程序,然后点击新建启动配置,如下图


  • 然后输入配置的参数,如下图所示:



其中主机要填NameNode节点的地址,端口填刚配置的端口。
  • 最后点击调试就可以开始调试了。

FS命令调试:


  • bin/hadoop fs 命令是运行在Client端的(NameNode也可以作为Client),因此需要修改Client上的配置文件。
  • 修改Client节点上的文件bin/hadoop,将
123 elif [ "$COMMAND" = "fs"  ; thenCLASS='org.apache.hadoop.fs.FsShell'HADOOP_OPTS="$HADOOP_OPTS $HADOOP_CLIENT_OPTS"


改为:
123 elif [ "$COMMAND" = "fs"  ; thenCLASS='org.apache.hadoop.fs.FsShell'HADOOP_OPTS="$HADOOP_OPTS $HADOOP_CLIENT_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000"


  • 必须设置suspend=y,否则还没开始调试,FsShell命令就执行结束了。
  • 其他过程同NameNode调试,只是主机需要设置为Client的地址。

mapreduce调试:

  • 如果想要调试Map 或Reduce Task,则修改bin/hadoop已经没用了,因为bin/hadoop中没有Map Task的启动参数。
  • 此时需要修改Client(提交作业的Client,可以是JobTracker)中的配置文件:conf/hadoop-site.xml(不同版本的Hadoop文件名称不同,在社区版本hadoop-2.0之后叫做mapred-site.xml)。将
1234 <property>  <name>mapred.child.java.opts</name>  <value>-Xmx800m</value></property>


改为:
1234 <property>  <name>mapred.child.java.opts</name>  <value>-Xmx800m -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000</value></property>


  • 在一个TaskTracker上,只能启动一个Map Task或一个Reduce Task,否则启动时会有端口冲突。因此要修改所有TaskTracker上的conf/hadoop-site.xml中的配置项:
123456789 <property>  <name>mapred.tasktracker.map.tasks.maximum</name>  <value>1</value></property><property>  <name>mapred.tasktracker.reduce.tasks.maximum</name>  <value>0</value></property>

  • 然后提交作业,再在Eclipse中启动远程调试,方法同上面一样。只是主机需要设置为TaskTracker的地址(如果有多个TaskTracker,则可能需要每个TaskTracker的地址都试一下,貌似不是所有的TaskTracker都同时进入调试状态)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值