我不是在寻找这些依赖于println的所谓"调试"解决方案。我的意思是在运行的Hadoop实例上附加一个真实的调试器,并在不同的机器上调试它。
这可能吗?如何?多彬吗?
链接
调试任务跟踪器,执行以下步骤。
-
编辑conf/hadoop-env.sh,使其具有以下内容
export HADOOP_TASKTRACKER_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=5000,server=y,suspend=n"
-
启动Hadoop (bin/Start -dfs.sh和bin/Start -mapred.sh)
- 将阻塞等待调试连接
- 在调试配置中使用Eclipse"Remote Java Application"连接到服务器,并添加断点
- 运行map reduce作业
我从来没有这样做过,因为我宁愿我的"真实"作业不受调试开销的阻碍运行(在某些情况下,调试开销可能会改变环境条件):我针对一个伪实例进行"本地"调试(eclipse中的正常调试绝对没有问题),一旦我隔离了(通过使用例如计数器)问题所在,就从活动环境中复制特定文件。