您的位置:首页 > 运维架构 > Linux

Linux下使用eclipse调试hadoop程序

2013-09-10 15:31 260 查看
1、准备工作

首先下载一个hadoop的稳定版本,我使用的是hadoop-1.1.2

下载jdk1.6

下载ant,我使用的是apache-ant-1.9.2

安装eclipse

2、创建hadoop工程,修改配置

解压hadoop-1.1.2.tar到一个指定文件夹

新建一个java project,选择hadoop-1.1.2文件夹即可

修改conf文件夹下几个xml的配置如下:

1)core-site.xml:

<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/hadoop/tmp</value>
<description>A base for other temporary directories.</description>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>


2)hdfs-site.xml:

<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>

<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>


3)mapred-site.xml:

<configuration>
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
</configuration>


3、设置ssh无密码登陆

命令行下执行如下:

#ssh-keygen -t rsa

#cd ~/.ssh

#cat id_rsa.pub >> authorized_keys

执行完后执行ssh localhost,不需要输入密码即可

4、运行hadoop

命令行进入hadoop-1.1.2文件夹下,执行如下

#bin/hadoop namenode -format #格式化hdfs

#bin/start-all.sh #启动所有服务

执行完上面两个语句,使用jps命令应该能看到6个进程如下:

5333 NameNode

5471 DataNode

5874 TaskTracker

6815 Jps

5736 JobTracker

5633 SecondaryNameNode

5、编译hadoop

进入hadoop-1.1.2文件夹下,执行ant进行编译

编译过程中可能会有各种问题:

1)请保证你的机器能够访问外网,如果是实验室或公司机器只能访问内网,需要设置代理:

export http_proxy="http://xxx.xxx.xxx.com:端口号"

export https_proxy=$http_proxy

export ftp_proxy=$http_proxy

2)编译过程中可能会遇到jetty、common-el等找不到master配置的情况,找到hadoop-1.1.2文件夹下的ivy.xml

把jetty->master都替换为jetty->default,把common-master都替换为common->default

3)可能在/root/.ivy2/local/下找不到一些jar,然后通过一些地址去下载,地址又是失效的

自己手动去下载那些jar,放入指定文件夹下即可

最终编译成功

6、编译hadoop-eclipse插件

进入hadoop-1.1.2/src/contrib/eclipse-plugin/文件夹下,执行

#ant -Declipse.home=/path/to/eclipse -Dversion=1.1.2

其中-Declipse.home是eclipse的安装目录,-Dversion=1.1.2是hadoop的版本号

编译成功后会在hadoop-1.1.2/bulid/contrib/下生成一个名为hadoop-eclipse-plugin-1.1.2.jar的eclipse插件,

拷贝到Declipse.home/plugins/下,重启eclipse

windows->show view->other->mapreduce tools->map/reduce locations

点击蓝色的大象,新建一个mapreduce连接,设置如下图



9000是之前在core-site.xml中设置的dfs端口号

9001是之前在mapred-site.xml中设置的mapred的端口号

确认完成后可以在project explorer界面看到如下图:



通过右键添加、删除文件夹和文件,上传、下载文件,比使用命令行put和get方便多了吧~

编译过程中可能也会遇到一些问题,也可以直接用别人已经编译好的hadoop-eclipse插件

7、新建一个mapred工程

1)new->project,这里可以选择mapred project,如下图



2)执行next,配置hadoop工程位置,和新建工程位置



如上图,configure hadoop install directory选择hadoop-1.1.2工程位置,点击OK即可

3)把WordCount.java那个文件拷过来,配置run configuration如下图



参数写“/test/input/a.txt /test/output/test4”,其中/test/input/a.txt为hdfs上的文件,作为输入文件,/test/output/test4作为输出文件夹,确保test4当前不存在

然后右击WordCount.java,run on hadoop->choose an existing server from the list below->finish

可以在console界面看到调试信息,然后选中hdfs的output文件夹按F5进行刷新,可以看到如下:



8、远程调试hadoop程序

调试新建的mapred应用程序不需多说,和调试一般程序一样,现在介绍如何调试mapred程序,比如jobtracker

如果hadoop服务在远程机器上,确保本地代码和远程的是一致的

1)在hadoop-1.1.2目录下使用命令行执行如下语句,表示使用调试模式监听JobTracker

#export HADOOP_JOBTRACKER_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=9876,server=y,suspend=y"

2)然后启动hadoop

#bin/start-all.sh

会看到信息:Listening for transport dt_socket at address: 9876

3)新建一个debug配置如下图



如上图所示,选择Remote Java Application,Project选择hadoop-1.1.2的项目,连接属性填写远端地址和端口。

因为这里使用的是单机环境,地址填了localhost,如果是远端服务器,填写远端服务器IP或hostname,然后端口填写之前设置的监听端口

4)设置断点,启动debug,在命令行执行mapred程序,就可以进入断点进行调试,mapred命令可以使用如下:

#bin/hadoop jar hadoop-examples-1.1.2.jar wordcount /test/input/a.txt /test/output/test2

5) 因为是在命令行执行export,想退出调试模式,把终端关闭再启一个就行了,非常方便
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: