设为首页 收藏本站
查看: 1602|回复: 0

[经验分享] 搭建hadoop源代码调试环境

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-3-7 09:31:43 | 显示全部楼层 |阅读模式
搭建hadoop源代码调试环境

本文介绍以下在hadoop伪分布式环境下如何利用Eclipse调试hadoop源代码

1、安装搭建hadoop伪分布式

  笔者在上一篇博文中介绍过如果搭建hadoop伪分布式,这一步可以参考上文。

2、下载配置ant

  可以到http://ant.apache.org/bindownload.cgi下载最新版本的ant,下载解压后,需要将ant的bin目录添加到PATH的环境变量上。

  在ubuntu下可以:

  root@ubuntu:#nano /etc/profile

  在打开的文件末尾添加ant的bin目录:

  export ANT_HOME=/usr/local/ant

  然后保存退出后执行以下命令使之立即生效:

  root@ubuntu:#. /etc/profile

  (注意.后面有空格)

3、利用ant下载依赖和编译文件

  进入到hadoop的安装目录下执行$ant

  root@ubuntu:#cd $HADOOP_HOME

  root@ubuntu:/usr/local/hadoop/hadoop-0.20.2/# ant

  此时,ant开始下载依赖和编译文件。

  在编译的时候可能遇到编译错误的情况。经查,是$hadoop_home/src/saveVersion.sh生成的package-info.java有问题,导致无法编译过去。将saveVersion.sh修改一下:


nset LANG  
unset LC_CTYPE  
version=$1  
user=`whoami` #此处修改成固定值,如jbm3072  
date=`date`  
if [ -d .git ]; then  
revision=`git log -1 --pretty=format:"%H"`  
hostname=`hostname`  
branch=`git branch | sed -n -e 's/^* //p'`  
url="git://$hostname/$cwd on branch $branch"  
else  
revision=`svn info | sed -n -e 's/Last Changed Rev: \(.*\)/\1/p'`  
url=`svn info | sed -n -e 's/URL: \(.*\)/\1/p'`  
fi  
mkdir -p build/src/org/apache/hadoop  
cat << EOF | \  
sed -e "s/VERSION/$version/" -e "s/USER/$user/" -e "s/DATE/$date/" \  
-e "s|URL|$url|" -e "s/REV/$revision/" \  
> build/src/org/apache/hadoop/package-info.java  
/*
* Generated by src/saveVersion.sh
*/  
@HadoopVersionAnnotation(version="VERSION", revision="REV",   
                         user="USER", date="DATE", url="URL")  
package org.apache.hadoop;  
EOF  



  修改后,应该就可以编译通过了。

4、将eclipse-files copy到工程目录下。

    执行命令:

ant eclipse-files   
    就可以将eclipse-files copy到工程目录下。

5、创建eclipse项目

  打开Eclipse的Fiile->New->Java Project,创建一个新的Java项目,选择项目的位置为Hadoop的安装目录,然后Finish就完成了Eclipse的hadoop源码项目。
整个hadoop项目代码量太大,有时候,你只关心hadoop的某几个模块,则可以在Build Path配置下的Source页删除不需要的模块,只保留自己需要的模块,例如笔者  只需要分析Common和HDFS两个模块,则仅需要保留core和hdfs目录就可以了。
  
6、远程调试Hadoop源代码
  (1) 为了不影响原文件,将hadoop/bin目录下的hadoop脚本复制一份
     root@ubuntu:/usr/local/hadoop/hadoop-0.20.2/bin# cp hadoop hadoop-debug
  (2) 在hadoop-debug脚本最后一行进行如下改动:    
#exec "$JAVA" $JAVA_HEAP_MAX $HADOOP_OPTS -classpath "$CLASSPATH" $CLASS "$@"  
exec "$JAVA" -Xdebug -Xrunjdwp:transport=dt_socket,address=9090,server=y,suspend=y $JAVA_HEAP_MAX $HADOOP_OPTS -classpath "$CLASSPATH" $CLASS "$@"  

    以后在需要调试hadoop的某个操作的时候,使用hadoop-debug进行操作,此时该操作会挂起,等待调试连接9090端口。在不需要调试时,使用hadoop操作则不会在    9090端口挂起
  (3)例子
    以上传文件到hdfs文件系统命令为例
    root@ubuntu:/usr/local/hadoop/hadoop-0.20.2/bin# sh hadoop-debug fs -put /home/tmp.avi  /home/
    Listening for transport dt_socket at address: 9090
    该命令此时在9090端口等待调试连接,这时候打开eclipse的hadoop项目,选中org.apache.hadoop.hdfs包的DFSClient.java文件右键->debug as ->debug        configrue进入调试配置窗口,填入如下信息:
    
    并在你需要设置断点的地方设置断点,再点击Debug,这时候命令就会跳到断点的地方并查看变量的值了,如图:
    
    终
    
    


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-15553-1-1.html 上篇帖子: 搭建hadoop伪分布式环境 下篇帖子: hadoop core-site.xml--ipc properties 源代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表