eclipse中编译hadoop(hive)源码
本人按照下面编译Hadoop 所说的方法在eclipse中编译hive没有成功。
在windows上重新装了一个ant1.8,在cmd中直接用ant编译成功。
eclipse中编译没有成功原因是 D:\workspace\hive\build-common.xml:392: java.lang.UnsupportedClassVersionError: Bad version number in .class file
即编译和运行的JDK版本不统一,修改如下
1.Window --> Preferences -->Java --> compiler中的compiler compliance level对应的下拉菜单中选择JDK版本6.0.
2.Window --> Preferences -->Java -->Installed JRES,然后在右边选择与步骤1版本一致的JDK版本
至此版本设置是统一的JDK6.0,还是报错,原因尚待查明。。。
===============================================================
以上问题的解决:
3.工程名右键-》properties-》builders-》选中新建的hive_builder(ant类型),edit-》JRE-》runtime JRE-》separate JRE-》选择外部安装的JDK6.0。
编译成功。
===============================================================
编译Hadoop
在这里,我们以编译Hadoop 家庭成员common 为例,对Hadoop 其它成员的编译方法是类似的。
3.1. 编译common成员
步骤1) 在Elipse 的Package 视图中单击右键,选择New->Java Project,如下图所示:
步骤2) 选择源代码目录,设置Project 名。
在上图所示的对话框中,点击Browse 按钮,选择common 源代码目录,并设置Projectname
为common。工程导入完成后,进入Eclipse 主界面,可以看到common 已经导入进来,但可以看到common
上有红叉叉,是因为Elipse 默认使用了Java Builder,而不是Ant Builder,所以下一步就是设置使用Ant Builder。
步骤3) 设置Builder 为Ant:右键common->Properties->Builders:
在上图所示的界面中,点击New 按钮,在弹出的对话框中选中Ant Builder,确定之后会弹出如下对话框:
点击Browse File System 按钮,选择common 源代码目录下的build.xml 文件,并设置Name 为common_Builder(Name 可以改成其它的,但建议使用common_Builder,因为这样名副其实),操作结果如下图所示:
除上图所示的设置外,还需要设置如下图所示的Targets,建议设置成Manual Build 编译方式,而不是Auto Build 编译方式。因为在Auto Build 模式下,任何修改都会触发编译,而Manual Build 模式下,只在需要的时候,点击编译按钮或菜单编译即可。
Hadoop 各成员都需要编译成jar,所以做如下图所示的一个修改:
确定之后,返回如下图所示的Edit Configuration 对话框:
上面完成后,回到Builder 的主对话框,再将对话框中的Java Builder 下移,并将它前面的勾去掉。
进入Eclipse 主界面,由于之前选择了Manual Build,所以需要人工方式驱动编译,编译成功后,可以看到BUILD SUCCESSFUL 字样。
请注意:如果上图所示的菜单中的Build Automatically 被勾中,则在common 的右键菜单中可能不会出现Build 子菜单。
在编译过程中,Ant 会自动从网上下载所依赖的库。common 的编译成功结束后,可以在build 目录下找到编译后生成的文件hadoop-core-0.21.0-dev.jar。
3.2. 编译Hadoop其它成员
hdfs、mapreduce 和hive 的编译方式同common。
4. FAQ
4.1. 联网
确保可以上internet,Ant 需要自动下载很多第三方依赖库,如果不能联网,编译会复杂很多。
4.2. 编译hive
hive 的编译相对复杂些,而且默认它会编译多个版本的hive,建立修改shims 目录下的ivy.xml 文件,去掉不必要版本的编译。
4.3. 编译生成文件位置
common 编译后生成build\hadoop-core-0.21.0-dev.jar;
hdfs 编译后生成build\hadoop-hdfs-0.21.0-dev.jar;
mapreduce 编译后生成build\hadoop-mapred-0.21.0-dev.jar;
hive 编译后生成build\service\hive_service.jar,请注意并没有直接放在build 目录下;
hbase 编译后生成build\hbase-0.21.0-dev.jar;
有时候在编译某个时出错,可先跳过,编译其它的,Refresh 之后再编译。