使用vtune分析hadoop
[*]
1.
使用
vtune
分析
tasktracker,jobtracker,datanode
1.1在
conf/hadoop-env.sh
中添加如下修改,这样在
vtune
的结果中能看到
jit
信息。
export AMPLXE_EXPERIMENTAL=1
1.2在
bin/hadoop
中,将如下语句进行替换。
exec "$JAVA" $JAVA_HEAP_MAX $HADOOP_OPTS -classpath "$CLASSPATH" $CLASS "$@"
替换如下,以分析
tasktracker
为例,分析其他进程,作相应的修改即可。
if [ "$COMMAND" = "tasktracker" ] ; then
exec "/home/chengtao/soft/intel/vtune_amplifier_xe_2011/bin64/amplxe-cl" -collect hotspots -r /home/chengtao/test_tasktracker "$JAVA" $JAVA_HEAP_MAX $HADOOP_OPTS -classpath "$CLASSPATH" $CLASS "$@"
else
exec "$JAVA" $JAVA_HEAP_MAX $HADOOP_OPTS -classpath "$CLASSPATH" $CLASS "$@"
fi
这样修改的作用在于,让
vtune
启动相应的线程,能够收集数据。
1.3在
bin/hadoop-daemon.sh
中,将下面语句进行替换
echo $! > $pid
替换内容如下
if [ "$command" = "tasktracker" ];then
sleep 3
ps aux | grep -v "vtune" | grep "TaskTracker" | awk '{if(NR==1)print $2}' > $pid
else
echo $! > $pid
fi
这样修改的作用在于,将实际起来的
tasktracker id
写到
$pid
中,否则写入的是
vtune
的进程的
id
,在运行
bin/stop-all.sh
的时候,
tasktracker
的进程是
stop
不掉的。
Sleep 3
是为了等
tasktracker
确实已经起来了。
[*]
2.
使用
vtune
分析任务线程TaskRunner
这里需要修改
hadoop
的代码,使得
taskrunner
启动的时候,是试用
vtune
起来的。代码的具体修改是在
mapred/org/apache/hadoop/mapred/TaskRunner.java
这个文件中。在vargs.add(jvm.toString());
之前添加。
vargs.add("/home/hadoop/vtune/vtune_amplifier_xe_2011/bin64/amplxe-cl");
vargs.add("-collect");
vargs.add("hotspots");
vargs.add("-r");
vargs.add("/home/hadoop/" + taskid.toString());
这样就可以分析实际跑任务的线程了。会在
/home/hadoop
目录下出现较多的
taskid
目录,每个目录下对应着
taskid
这个线程的分析结果
[*]
3.
总结
通过上面的修改,可以使用
vtune
对
hadoop
进行不同层面的分析,对
hadop
的优化或许提供很好的思路。
页:
[1]