Hadoop 2.0 native lib build failed, Hadoop 2.0 本地库编译失败

来源:互联网 发布:c语言求圆的面积 编辑:程序博客网 时间:2024/05/21 09:17
Trevor Robinson created HADOOP-8370:
---------------------------------------

Summary: Native build failure: javah: class file for org.apache.hadoop.classification.InterfaceAudience not found
Key: HADOOP-8370
URL: https://issues.apache.org/jira/browse/HADOOP-8370
Project: Hadoop Common
Issue Type: Bug
Components: native
Affects Versions: 0.23.1

编译hadoop本地库出现问题,报错

Failed to execute goalorg.codehaus.mojo:native-maven-plugin:1.0-alpha-7:javah (default) onproject hadoop-common: Error running javah command: Error executing commandline
找了好长时间最后终于找到解决方法。


Environment: Apache Maven 3.0.4 (r1232337; 2012-01-17 02:44:56-0600)

Maven home: /usr/local/apache-maven-3.0.4
Java version: 1.7.0_04, vendor: Oracle Corporation
Java home: /usr/lib/jvm/jdk1.7.0_04/jre
Default locale: en_US, platform encoding: ISO-8859-1
OS name: "linux", version: "3.2.0-24-generic", arch: "amd64", family: "unix"
Reporter: Trevor Robinson


[INFO] --- native-maven-plugin:1.0-alpha-7:javah (default) @ hadoop-common ---
[INFO] /bin/sh -c cd /build/hadoop-common/hadoop-common-project/hadoop-common && /usr/lib/jvm/jdk1.7.0_02/bin/javah -d /build/hadoop-common/hadoop-common-project/hadoop-common/target/native/javah -classpath <...> org.apache.hadoop.io.compress.zlib.ZlibDecompressor org.apache.hadoop.security.JniBasedUnixGroupsMapping org.apache.hadoop.io.nativeio.NativeIO org.apache.hadoop.security.JniBasedUnixGroupsNetgroupMapping org.apache.hadoop.io.compress.snappy.SnappyCompressor org.apache.hadoop.io.compress.snappy.SnappyDecompressor org.apache.hadoop.io.compress.lz4.Lz4Compressor org.apache.hadoop.io.compress.lz4.Lz4Decompressor org.apache.hadoop.util.NativeCrc32
Cannot find annotation method 'value()' in type 'org.apache.hadoop.classification.InterfaceAudience.LimitedPrivate': class file for org.apache.hadoop.classification.InterfaceAudience not found
Cannot find annotation method 'value()' in type 'org.apache.hadoop.classification.InterfaceAudience.LimitedPrivate'
Error: cannot access org.apache.hadoop.classification.InterfaceStability
class file for org.apache.hadoop.classification.InterfaceStability not found

The fix for me was to changing the scope of hadoop-annotations from
"provided" to "compile" in pom.xml:

<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-annotations</artifactId>
<scope>compile</scope>
</dependency>

For some reason, it was the only dependency with scope "provided".

解决方法:

vi ./hadoop-common-project/hadoop-auth/pom.xml
vi ./hadoop-common-project/hadoop-common/pom.xml 


<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-annotations</artifactId>
<scope>compile</scope>
</dependency>

将节点hadoop-annotations的值由provide 改成compile