将Hadoop 2.5.1本机库重新编译为32位

时间:2015-02-28 17:48:30

标签: hadoop

阶段1:我已经在Ubuntu 14.04 64bit上安装了Hadoop 2.6.0,我已经在伪分布式模式下启动了它,我运行了他们provide的示例程序。一切都还可以。

阶段2:我在3台运行Ubuntu 10.04 32bit的计算机上安装了Hadoop 2.5.1。我已经启动了HDFS和YARN,我可以在Web GUI中看到它们。但是当我尝试编译相同的测试程序时,我得到了这个:

gcc test.c -I$HADOOP_HDFS_HOME/include -L/usr/lib/java/jdk1.7.0_71/jre/lib/amd64/server/  -L$HADOOP_HDFS_HOME/lib/native -lhdfs -ljvm -o test
/usr/bin/ld: skipping incompatible /usr/local/hadoop/lib/native/libhdfs.so when searching for -lhdfs
/usr/bin/ld: skipping incompatible /usr/local/hadoop/lib/native/libhdfs.a when searching for -lhdfs
/usr/bin/ld: cannot find -lhdfs
collect2: ld returned 1 exit status

现在,当我file libhdfs.so.0.0.0时,我得到:

libhdfs.so.0.0.0:   ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped

因此,本机库是64位,我的操作系统是32位。

问题: 是否有必要从源代码重新编译整个Hadoop,还是只能重新编译本机库并在现有安装中替换它们? 什么是最短路径?

请提供有关重新编译的信息。

修改

我已经在64位机器上编译了32位,我已经导出了CLFAGS = -m32,但是我遇到了这个错误:

[exec] /usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/libjvm.so: error adding symbols: File in wrong format
     [exec] collect2: error: ld returned 1 exit status
     [exec] make[2]: *** [target/usr/local/lib/libhdfs.so.0.0.0] Error 1
     [exec] make[1]: *** [CMakeFiles/hdfs.dir/all] Error 2

我接下来要做的是手动安装和配置指向java8 JDK 32bit的update-alternatives。

我的libfuse-dev只有一个问题,我已经卸载了。 因为它不是强制性的。

之后我跑了:mvn package -Pnative -DskipTests -Dtar

并在此处找到了lib:hadoop-hdfs-project/hadoop-hdfs/target/native/target/usr/local/lib

libhdfs.a  libhdfs.so  libhdfs.so.0.0.0

1 个答案:

答案 0 :(得分:0)

最近的hadoop tarball似乎只附带64位库。你可以自己编译,尽管我自己没有测试过。 您必须下载hadoop的源tarball并安装以下软件包:

  • GCC(或其他C编译器)
  • GNU Autotools(autoconf,automake,libtool)
  • zlib dev package
  • openssl dev package
  • 行家

安装完成后,您可以使用源代码压缩包中包含的标准hadoop pom.xml文件来编译本机库:

$ mvn package -Pdist,native -DskipTests -Dtar

可以在以下位置找到这些库:

$ hadoop-dist/target/hadoop-2.6.0/lib/native

bin / hadoop脚本通过系统属性-Djava.library.path确保本机hadoop库位于类路径中。您可以修改bin / hadoop脚本以指向新编译的库。有关详细信息,请务必查看可用的文档here