hadoop-0.20.205.0 编译并导入到eclipse

    尝试编译hadoop-0.20.205这个版本,编译过程出现了如下小错误:/home/user/github/hadoop-common/build.xml:1611: /home/user/github/hadoop-common/build/hadoop-0.20.205.1/native not found.

以上提示是在说native目录没有找到,hadoop引入了本地库的概念,通过本地库可以使Hadoop更高效的做某些事情,目前在Hadoop中本地库应用在文件的压缩上面:

1. zlib

2. gzip


解决过程:

1. 进入到/hadoop-common/src/native目录,先尝试直接编译本地库:./configure

2. 编译没有通过,并打出如下错误:configure: error: Native java headers not found. Is $JAVA_HOME set correctly?

3. export JAVA_HOME

4. 再次执行./configure,编译通过

5. 执行ant mvn-install,通过

注1:在ubuntu下可能还会有些其它错误,总之依次执行./configure make make install看能不能通过就行了。

注2:编译native应该按正常流程来,即:ant compile-native,请参考:http://wiki.apache.org/hadoop/UsingLzoCompression

注3:在执行ant mvn-install 或 ant mvn-deploy时一直失败,但是在这之前先执行ant compile-native就ok了,好像是build.xml依赖有点问题;


导入到eclipse:

1. cd hadoop-common

2. ant eclipse

    a). 为导入eclipse生成.classpath (依赖包环境变量)

    b). 生成相应的配置文件:

          ./conf/mapred-site.xml

          ./conf/hadoop-policy.xml

          ./conf/hdfs-site.xml

          ./conf/core-site.xml

          ./conf/capacity-scheduler.xml

          ./conf/fair-scheduler.xml

          ./conf/hadoop-env.sh

3. 在eclipse中新建一个Java Project,选择"Create project from existing source",选择hadoop-common目录

4. 下一步,切换到"Libraries",选择"Add Class Folder..." 按钮,从列表中选择"conf";

5. 切换到"Order and Export"找到"conf",点击top把它移到顶端;]

6. 切换到"Source",将output folder设置为build/eclipse_build(这一步视自己情况而定),点击finish,完成导入;

7. 将JDK的tools.jar 添加到 build path。注:tools.jar没有包含在JRE中,所以要手工加一下;

8. 导入后还有点其它小问题,根据提示依次解决即可;



PS1:也可以使用ivyDE来更新依赖,具体参考:http://tech.zhenhua.info/2010/11/svn-subclipse.html

PS2:ant版本:1.7.1    maven版本:3.0.3

PS3:hadoop的新版本都开始使用maven做为项目依赖管理,应该是更加方便一些

PS4:Unbound classpath variable: 'ANT_HOME/lib/ant.jar' in project 'hadoop-common'

原因:没有将ant的路径添加到eclipse中

解决方法:点击菜单“window”—>"preferences"—>依次点击左侧树形结构“Java”—>“Build Path”—>“ClassPath Variable”,在右侧增加环境变量,点击“New”,Name中写入“ANT_HOME”,Path为eclipse路径下的plugins下,如/home/lxsym/work/eclipse/plugins/org.apache.ant_1.7.1.v20100518-1145。




附1:

在使用这两种压缩方式的时候,Hadoop默认会从$HADOOP_HOME/lib/native/Linux-*目录中加载本地库。
如果加载成功,输出为:
DEBUG util.NativeCodeLoader - Trying to load the custom-built native-hadoop library... 
INFO util.NativeCodeLoader - Loaded the native-hadoop library
如果加载失败,输出为:
INFO util.NativeCodeLoader - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
在Hadoop的配置文件core-site.xml中可以设置是否使用本地库:
<property>
  <name>hadoop.native.lib</name>
    <value>true</value>
      <description>Should native hadoop libraries, if present, be used.</description>
      </property>
      Hadoop默认的配置为启用本地库。
      另外,可以在环境变量中设置使用本地库的位置:
      export JAVA_LIBRARY_PATH=/path/to/hadoop-native-libs
      有的时候也会发现Hadoop自带的本地库无法使用,这种情况下就需要自己去编译本地库了。在$HADOOP_HOME目录下,使用如下命令即可:
      ant compile-native
      编译完成后,可以在$HADOOP_HOME/build/native目录下找到相应的文件,然后指定文件的路径或者移动编译好的文件到默认目录下即可。

若干问题:

1. ant compile-native失败:

     [exec] libtool: link: gcc -shared  .libs/ZlibCompressor.o .libs/ZlibDecompressor.o .libs/SnappyCompressor.o .libs/SnappyDecompressor.o .libs/getGroup.o .libs/JniBasedUnixGroupsMapping.o .libs/JniBasedUnixGroupsNetgroupMapping.o .libs/file_descriptor.o .libs/errno_enum.o .libs/NativeIO.o   -ljvm -ldl  -m64   -Wl,-soname -Wl,libhadoop.so.1 -o .libs/libhadoop.so.1.0.0
     [exec] /usr/bin/ld: cannot find -ljvm
     [exec] collect2: ld returned 1 exit status
     [exec] make[1]: Leaving directory `/home/fengzanfeng/tmp/hadoop-common/build/native/Linux-amd64-64'
     [exec] make[1]: *** [libhadoop.la] Error 1
     [exec] make: *** [all] Error 2

这个问题很简单,gcc 在编译是找不到动态库:libjvm.so,只要将libjvm.so拷贝一份到/usr/lib文件夹;



参考:

https://issues.apache.org/jira/browse/HADOOP-4949

http://ilinuxkernel.com/?p=1185

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值