2

我已经在 64 位 Linux 上设置了一个运行 Hadoop 2.1 beta 的集群。但是,每次我运行 hadoop 命令工具时,都会弹出一条警告消息:

WARN util.NativeCodeLoader: Unable to load native-hadoop library for 
your platform...
using builtin-java classes where applicable

然后我发现它缺少 64 位 linux 的本机库。/lib/native官方的 hadoop 2.1 tarball 只在文件夹中提供了 32 位 linux 的原生库。

我阅读了hadoop 原生库的官方文档,该指南说:

Once you installed the prerequisite packages use the standard hadoop 
build.xml file and pass along the compile.native flag (set to true) to 
build the native hadoop library:

$ant -Dcompile.native=true <target>

我搜索 hadoop 文件夹,没有名为build.xml. 对java编程和hadoop还不够了解,所以想知道如何编译64位linux系统的native库?谢谢。

4

2 回答 2

4

构建系统已更改为 Maven。您可以在此处找到构建说明: https ://svn.apache.org/repos/asf/hadoop/common/trunk/BUILDING.txt

具体来说,您可以运行: mvn package -Pdist,native,docs -DskipTests -Dtar

(一旦你安装了 protobuf 2.5.0)

于 2013-10-01T14:18:15.623 回答
1

下载并安装 protobuf

wget http://protobuf.googlecode.com/files/protobuf-2.5.0.tar.gz /tmp
tar -xvf protobuf-2.5.0.tar.gz
cd /tmp/protobuf-2.5.0
sudo ./configure
sudo ./make install 
sudo ldconfig

安装 cmake

sudo apt-get install cmake

使用 maven 构建原生库

mvn compile -Pnative

如果有任何错误,使用-e -Xswitch 运行 maven,它将输出详细的调试信息。查看错误是什么并进行适当的更改。

例如,我收到以下错误:

[ERROR] Could not find goal 'protoc' in plugin org.apache.hadoop:hadoop-maven-plugins:3.0.0-SNAPSHOT among available goals -> [Help 1]

意味着您的 protobuf 版本不正确。

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.7:run (make) on project hadoop-common: An Ant BuildException has occured: Execute failed: java.io.IOException: Cannot run program "cmake" (in directory "/tmp/hadoop-2.5.0-src/hadoop-common-project/hadoop-common/target/native"): error=2, No such file or directory

未安装 cmake。

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-javadoc-plugin:2.8.1:jar (module-javadocs) on project hadoop-annotations: MavenReportException: Error while creating archive:
[ERROR] Exit code: 1 - /tmp/hadoop-2.5.0-src/hadoop-common-project/hadoop-annotations/src/main/java/org/apache/hadoop/classification/InterfaceStability.java:27: error: unexpected end tag: </ul>
[ERROR] * </ul>

不知道是什么问题。只需通过将-Dmaven.javadoc.skip=true标志传递给 Maven 来跳过 javadoc 生成。

于 2014-08-28T02:59:40.327 回答