
# 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. 设置断点，双击蓝框区域设置或取消断点。 ![](https://support.huaweicloud.com/devg-lts-mrs/zh-cn_image_0000001252532014.jpg "点击放大")
      
   
   2. 配置远程调试信息，"右键-\>Debug As-\>Debug Configurations..."。 ![](https://support.huaweicloud.com/devg-lts-mrs/zh-cn_image_0000001299092057.jpg "点击放大")
      
   
   3. 在弹出的页面，双击"Remote Java Application"，设置Connection Properties，其中Host为运行的NodeManager节点IP，Port端口号为8000，然后单击"Debug"。 ![](https://support.huaweicloud.com/devg-lts-mrs/zh-cn_image_0000001298930901.jpg "点击放大")
      
   
   
   
   
![](https://support.huaweicloud.com/devg-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
若使用IDE直接提交MapReduce任务，则IDE即成为客户端的角色，参考[1]修改二次开发工程中的"mapred-site.xml"即可。
