| C++沉思录+C专家编程+C和指针 | |
39.0元 |
了解一个系统的内部,我觉得最好的办法只有两个:
1. 找系统的开发设计者仔仔细细的问,
2. 自己跟踪调试系统。
估计要找到 cutting 详细聊不太可能,那只有第二个办法可以采用了,呵呵。而且当 hadoop 出现一些莫名问题的时候,跟踪调试程序也是最后的无奈选择。
工欲善其事,必先利其器。我选择的工具和环境配置如下:
1. 开发机 OS linux (X 选择 gnome 或者 kde 都可以 )
2. 远程控制软件 tightvnc 客户端和服务器端
3. 开发调试 IDE 工具 Eclipse 和 vim
其实要调试 hadoop 分布式程序和进行 java 远程调试是一样的,为什么呢?因为他们就是一回事儿,哈哈!
1. 启动 Eclipse ,将 hadoop 程序装载到工程里面
2. 修改 bin/hadoop 代码加入 java 远程调试选项:
HADOOP_OPTS="$HADOOP_OPTS $HADOOP_TASKTRACKER_OPTS
-agentlib:jdwp=transport=dt_socket,address=xxxx,server=y,suspend=y"
假设我们要调试 jobtracker 的代码,我们将 bin/hadoop 代码修改如下 :
elif [ "$COMMAND" = "tasktracker" ] ; then
CLASS=org.apache.hadoop.mapred.TaskTracker
HADOOP_OPTS="$HADOOP_OPTS $HADOOP_TASKTRACKER_OPTS -agentlib:jdwp=transport=dt_socket, address=8083, server=y, suspend=y"
3. 启动 hadoop
4. Eclipse 里面跟踪调试
a) 在 Debug configuration 里面新建一个 Java Remote Application
b) 设置断点
c) 启动分布式任务
d) 这个时候任务就会你设置的断点处,停下来让你进行接下来的调试跟踪