您的位置:首页 > 运维架构

hadoop2.7.2学习笔记07-本地库

2017-05-12 14:33 288 查看

1、hadoop本地库

32位的i386-Linux的hadoop本地库位于lib/native目录中。

hadoop本地库包含三个组件(后两个完全不知所云,不过以后可能会学习到):

1、压缩与解压(bzip2,lz4,snappy,zlib)。

2、用于支持 HDFS Short-Circuit Local Reads和Centralized
Cache Management in HDFS的IO工具。

3、CRC32 checksum的实现。

 

hadoop本地库由C语言编写,由GNU自动编译工具(autoconf,autoheader,automake,autoscan,libtool)进行编译。

编译时需要安装的工具包括:

C编译器(例如GNU C编译器)

GNU自动编译工具:autoconf,automake,libtool

zlib开发包(稳定版本 >=1.2.0)

openssl开发包(例如libssl-dev)

注意:zlib的位数需要和部署环境的JVM位数(32/64)一致。

hadoop通过系统参数-Djava.library.path=<path>来指定本地库的位置。

运行mapreduce任务时若出现异常,则会打印下面的日志

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

NativeLibraryChecker可以用来检查本地库是否可以正确地被加载(在笔记03中有讲到):

[hadoop@localhost hadoop-2.7.2]$ bin/hadoop checknative -a
17/05/12 14:53:10 WARN bzip2.Bzip2Factory: Failed to load/initialize native-bzip2 library system-native, will use pure-Java version
17/05/12 14:53:10 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib library
Native library checking:
hadoop:  true /home/hadoop/hadoop-env/hadoop-2.7.2/lib/native/libhadoop.so.1.0.0
zlib:    true /lib64/libz.so.1
snappy:  true /lib64/libsnappy.so.1
lz4:     true revision:99
bzip2:   false
openssl: false Cannot load libcrypto.so (libcrypto.so: cannot open shared object file: No such file or directory)!
17/05/12 14:53:11 INFO util.ExitUtil: Exiting with status 1
可以看到有的库加载成功了,有的失败了。

2、本地共享库

使用DistributedCache可以散布和链接任何的本地共享库。方法是:

1、将库文件拷贝到HDFS:

bin/hadoop fs -copyFromLocal mylib.so.1 /libraries/mylib.so.1
2、作业启动程序需要包含下面的代码

DistributedCache.createSymlink(conf); DistributedCache.addCacheFile("hdfs://host:port/libraries/mylib.so. 1#mylib.so", conf);
3、接着MapReduce操作就可以包含:

System.loadLibrary("mylib.so");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hadoop