首页 > 代码库 > 编译hadoop 的native library
编译hadoop 的native library
os:centos 6.7 x64
要解决的问题:
WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
解决的必要性
hadoop的cache和短路读(Short-Circuit Local Reads)都需要native library的支持
解决步骤
编译方法是
http://hadoop.apache.org/docs/r2.3.0/hadoop-project-dist/hadoop-common/NativeLibraries.html
编译过程中可能出现
[ERROR] Failed to execute goal org.apache.hadoop:hadoop-maven-plugins:2.3.0:protoc (compile-protoc) on project hadoop-common: org.apache.maven.plugin.MojoExecutionException: ‘protoc --version‘ did not return a version -> [Help 1]
这时需要在系统中安装protobuf
从https://github.com/google/protobuf/archive/v3.2.0.tar.gz下载3.2.0源码3.3.0编译有问题,
1、 下载工具:
$ sudo yum install autoconf automake libtool curl make g++ unzip
2、 首先生成configure script
$ ./autogen.sh
3、 编译和安装
$ ./configure
出错:configure: error: C++ preprocessor "/lib/cpp" fails sanity check
解决:这是缺少相应的库导致的,安装相应的库也可。
# yum install glibc-headers
# yum install gcc-c++
再执行$ ./configure 就OK了。
4、 继续编译
$ make
出错:
./google/protobuf/metadata.h:175: 错误:类‘google::protobuf::internal::InternalMetadataWithArena’ 没有名为‘InternalMetadataWithArenaBase’ 的字段
./google/protobuf/metadata.h:204: 错误:类‘google::protobuf::internal::InternalMetadataWithArenaLite’ 没有名为‘InternalMetadataWithArenaBase’ 的字段
解决:把src/google/protobuf/metadata.h:175和204:的代码改一下(参考https://github.com/google/protobuf/pull/2599/commits/141a1dac6ca572056c6a8b989e41f6ee213f8445#diff-4842737ed3a65a110689915a0540b272L175)
再make,OK
5、 继续make check,时间确实好长
$ make check
$ sudo make install
$ sudo ldconfig # refresh shared library cache.
即可.
6、 测试一下
protoc –version
返回libprotoc 3.2.0
安装OK
编译hadoop 的native library