一.调试hadoop要解决的问题:
在上一篇文章中, 我们已经可以采用插件的方法, 来运行hadoop项目, 但是我们没办法用debug方式来运行您的hadoop项目。
那么我们可以运行这个项目吗?
我们当然可以采用运行普通java项目的办法来运行这个java项目, 但是map reduce程序没办法正常的工作。
我们如何解决这个问题?要解决这个问题如何进行?首先要解决这个问题,需要了解hadoop的基本工作过程,特别是hadoop的工作过程中的classpath相关设置问题了。
关于hadoop的classpath问题, 请参考前面的一些体会,如下地址供您研究:
Hadoop源代码分析 之hadoop配置及启动(4)—–启动过程汇总
Hadoop源代码分析 之hadoop配置及启动(3)—–classpath与hadoop主要组件启动过程
Hadoop源代码分析 之hadoop配置及启动(2)—–classpath与启动shell脚本
Hadoop源代码分析 之hadoop配置及启动(1)—–classpath与配置文件
通过上面这些研究我们可以了解hadoop启动的关键时,如何配制hadoop运行的classpath的,通过这个classpath的脚本能找到配置文件, 然后根据配置文件能联系到各个服务组件, 然后在根据组件连接各个服务器然后决定如何进行下一步的工作。
有了以上,我们就可以断定, 我们的普通的java项目可以通过适当调整classpath设置然后能够运行hadoop的map reduce程序。 在普通java项目中可以应用 方便的各种调试工具来进行应用程序的调试、开发等。
下面我们将根据这个线索来逐步构建一个java的项目, 然后添加hadoop的配置文件等到项目中, 然后调试程序。
二.配置并测试一个hadoop的本地系统
如下图, 在hadoop安装目录的上级目录,拷贝一个hadoop的本地系统,如下图
cp -r hadoop-1.2.1 hadoop-local
进入新拷贝的hadoop目录中, 执行下面的命令,
[sch@db conf]$ pwd // 显示当前目录, 输入命令时,不要包括注释部分
/work/apps/hadoop-local/conf // 当前目录是本地hadoop的配置文件目录
[sch@db conf]$ ls // 查看当前目录下的文件情况
capacity-scheduler.xml mapred-queue-acls.xml
configuration.xsl mapred-site.xml
core-site.xml masters
fair-scheduler.xml slaves
hadoop-env.sh ssl-client.xml.example
hadoop-metrics2.properties ssl-server.xml.example
hadoop-policy.xml taskcontroller.cfg
hdfs-site.xml task-log4j.properties
log4j.properties
[sch@db conf]$ cat core-site.xml // 查看 core-site.xml的配置情况, 可以用vi编辑到这个状况
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration> // 请特别注意, 配置中是完全空的,
</configuration> // 全空表示 本地默认配置, 包括采用本地文件系统
[sch@db conf]$ cat hdfs-site.xml // 下面请看同上
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
</configuration>
[sch@db conf]$ cat mapred-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
</configuration>
截图如下:
完成上述配置后,我们就完成了本地的hadoop的配置工作
三.准备测试hadoop项目的测试数据
如下图, 我们在刚刚安装好的 hadoop目录中,创建input目录, 并且把conf目录下的相关文件拷贝过去
命令如下:
[sch@db hadoop-local]$ mkdir input
[sch@db hadoop-local]$ cp conf/* input/
[sch@db hadoop-local]$ ls input/
四.在eclipse中创建一个普通的java项目
1. Java项目的创建
Eclispe中如何创建一个普通的java项目就省略, 读者应该都会了, 项目创建完成如下结构。
2. Hadoop源代码的引入
Hadoop源代码的引入可以采用拷贝源代码到src中
也可以采用import命令,导入eclipse中,
采用哪个方法都行,总之最后结果如下
如上, 我们引进引入了全部hadoop的例子源代码, 但发现有大量的编译错误,下面解决编译错误的情况。
3. 导入hadoop的包,解决java项目的编译错误问题
在java的编译属性上, 选择lib相关标签, 然后选择添加外部jar文件的按钮
然后在弹出的对话框中, 选择下面系统目录, 然后选择里面的两个jar文件
然后点击ok按钮
添加hadoop的lib目录中的文件到项目中, 如下图
添加完成, 可能还有些错误, 也可能没有。情况如下: