更新时间:2024-10-31 GMT+08:00

MapReduce二次开发远程调试

问题

MapReduce二次开发过程中如何远程调试业务代码?

回答

MapReduce开发调试采用的原理是Java的远程调试机制,在Map/Reduce任务启动时,添加Java远程调试命令。

  1. 首先理解两个参数:“mapreduce.map.java.opts”“mapreduce.reduce.java.opts”,这两个参数为客户端参数,分别指定了Map/Reduce任务对应的JVM启动参数。

    修改客户端“客户端安装路径/Yarn/config/mapred-site.xml”配置文件中“mapreduce.map.java.opts”“mapreduce.reduce.java.opts”参数,分别加入调试命令“-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8000”,保存文件。

  2. MapReduce为分布式计算框架,Map/Reduce任务启动所在的节点存在不确定性,建议将集群内NodeManager实例只保留一个运行,其他全部停止,以保证任务一定会在这个唯一运行的NodeManager节点上启动。
  3. 在客户端提交MapReduce任务,在Map/Reduce任务启动时会挂起并监测8000端口,等待远程调试。
  4. 在IDE上,选择MapReduce任务的实现类,通过配置远程调试信息,执行Debug。

    1. 设置断点,双击蓝框区域设置或取消断点。

    2. 配置远程调试信息,右键->Debug As->Debug Configurations...

    3. 在弹出的页面,双击Remote Java Application,设置Connection Properties,其中Host为运行的NodeManager节点IP,Port端口号为8000,然后单击“Debug”

若使用IDE直接提交MapReduce任务,则IDE即成为客户端的角色,参考1修改二次开发工程中的“mapred-site.xml”即可。