使用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.      总结

通过上面的修改,可以使用 vtunehadoop 进行不同层面的分析,对 hadop 的优化或许提供很好的思路。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值