第一阶段:我已经在ubuntu14.0464位上安装了hadoop2.6.0,我以伪分布式模式启动了它,并运行了它们提供的示例程序。这里一切都好。
第二阶段:我已经在3台运行ubuntu10.0432位的计算机上安装了hadoop2.5.1。我已经启动了hdfs和yarn,我可以在webgui中看到它们。但是当我尝试编译同一个测试程序时,我得到了这样一个结果:
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
接下来我做的是手动安装和配置更新替代品,以支持32位java8 jdk。
我只有libfuse dev的问题,我已经卸载了它。因为这不是强制性的。
之后我跑了: mvn package -Pnative -DskipTests -Dtar
在这里找到了libs: hadoop-hdfs-project/hadoop-hdfs/target/native/target/usr/local/lib
:
libhdfs.a libhdfs.so libhdfs.so.0.0.0
1条答案
按热度按时间guicsvcw1#
最近的hadoop tarballs似乎只附带了64位库。你可以自己编译,尽管我还没有亲自测试过。您必须下载hadoop的源代码tarball并安装以下软件包:
gcc(或其他c编译器)
gnu自动工具(autoconf、automake、libtool)
zlib开发包
openssl开发包
Maven
安装后,可以使用源tarball中包含的标准hadoop pom.xml文件编译本机库:
这些库位于:
bin/hadoop脚本通过系统属性-djava.library.path确保本机hadoop库位于类路径上。您可以修改bin/hadoop脚本以指向新编译的库。有关更多信息,请务必查看此处提供的文档。