问题导读
1.hadoop本地库支持哪些平台?
2.本地库是否有32,64之分?
3.hadoop通过什么工具来检测本地库是否加载正确?
4.如何加载本地库?包含哪些步骤?
5.本地库在什么情况下不需要使用DistibutedCache?
概述
这个指南描述了hadoop本地库,包括关于共享本地库的小讨论。
注意:
取决于你的环境,这个词 “native libraries”涉及所有的*.so’,你需要编译;这个词 “native compression”涉及所有的*.so’的你需要编译指定与压缩相关的。当前,尽管如此,这个文档仅限于hadoop本地库 (libhadoop.so).文档为libhdfs库(libhdfs.so)点这 here.
hadoop本地库
处于性能考虑和非可用性 Java 实现,Hadoop的具有某些部件的本地实现,这些组件单独是可用的。动态链接库调用本地原生Hadoop库。 在 *nix(如:Linux,unix) 平台上本地库名字为 libhadoop.so.
用法
相当容易使用hadoop本地库:
1.查看组件
2.查看支持平台
3.下载一个构建好的hadoop发布版本或则自己构建本地库。无论是自己下载还是自己构建(编译),本地的名字是相同的: libhadoop.so
4.安装压缩编解码开发包(> > zlib-1.2,gzip-1.2):
如果你下载本地库,安装一个或则多个开发包,无论压缩编解码你想用于部署。
如果你想编译本地库,它是强制性安装了开发包。
5.检查运行时日志文件
组件
本地库包含各种组件:
- Compression Codecs (bzip2, lz4, snappy, zlib)
- Native IO utilities for HDFS Short-Circuit Local Reads and Centralized Cache Management in HDFS
- CRC32 校验实现
支持平台
hadoop本地库仅支持在*nix平台上,不支持 Cygwin和Mac OS X 平台.
hadoop本地库主要用在GNU/Linus平台,已测试
上面hadoop 32/64位本地库与相应的32/64 位 jvm工作
下载
hadoop预构建 32-位 i386-Linux本地库作为hadoop分布式一部分是有效的,位于e lib/native目录。你可以下载从hadoop Common Releases.
一定要安装zlib和/或gzip 开发包
构建
hadoop本地库是用ANSI C编写,并使用GNU自动工具链 (autoconf, autoheader, automake, autoscan, libtool)构建。这意味着他可以直接使用工具链 (autoconf, autoheader, automake, autoscan, libtool)在任何平台上构建(查看支持平台)
在平台上包需要安装:
- C compiler (e.g. GNU C Compiler)
- GNU Autools Chain: autoconf, automake, libtool
- zlib-development package (stable version >= 1.2.0)
- openssl-development package(e.g. libssl-dev)
一旦你安装必备包使用标准的Hadoop的pom.xml文件,通过本地库标识构建hadoop本地库
[mw_shl_code=bash,true] $ mvn package -Pdist,native -DskipTests -Dtar[/mw_shl_code]
你可以查看新构建的库在
[mw_shl_code=bash,true] $ hadoop-dist/target/hadoop-2.7.1/lib/native[/mw_shl_code]
请注意以下几点:
1.它强制安装 zlib 和 gzip 开发包在目标平台,构建hadoop本地库。尽管如此,如果你想安装部署使用一个codec包,也是足够的。
2.为了构建和部署hadoop本地库,使用正确的zlib 32/64位 库是需要的 ,在目标平台上依赖32/64 位 jvm,
运行时
bin/hadoop脚本确保hadoop本地库通过系统属性-Djava.library.path=<path>在库路径。
在运行时,检查hadoop MapReduce任务日志文件
1.如果所有的事情准备好,然后调试util.NativeCodeLoader ,尝试加载自定义构建本地库。。。 INFO util.NativeCodeLoader - Loaded the native-hadoop library
2.如果产生错误,然后:INFO util.NativeCodeLoader - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
检查
NativeLibraryChecker是一个工具用来检测本地库是否加载正确,你可以启动nativelibrarychecker如下:
[mw_shl_code=bash,true] $ hadoop checknative -a
14/12/06 01:30:45 WARN bzip2.Bzip2Factory: Failed to load/initialize native-bzip2 library system-native, will use pure-Java version
14/12/06 01:30:45 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib library
Native library checking:
hadoop: true /home/ozawa/hadoop/lib/native/libhadoop.so.1.0.0
zlib: true /lib/x86_64-linux-gnu/libz.so.1
snappy: true /usr/lib/libsnappy.so.1
lz4: true revision:99
bzip2: false[/mw_shl_code]
本地共享库
你可以加载任何本地共享库使用DistributedCache,分发和符号链接库文件
这个例子展示了如何分发共享本地库mylib.so,和从mapreduc任务加载的。
1.首先复制库到hdfs:bin/hadoop fs -copyFromLocal mylib.so.1 /libraries/mylib.so.1
2.job启动程序应该包含下面:
[mw_shl_code=bash,true]DistributedCache.createSymlink(conf);
DistributedCache.addCacheFile("hdfs://host:port/libraries/mylib.so. 1#mylib.so", conf);[/mw_shl_code]
3.MapReduce 任务应该包含:
[mw_shl_code=bash,true] System.loadLibrary("mylib.so");[/mw_shl_code]
注意:
如果你下载或则构建了hadoop本地库,不需要使用DistibutedCache使库提供给mapreduce任务
版本:2.7.1
相关文章
hadoop入门-第一章General:第一节单节点伪分布
hadoop入门-第一章General:第二节集群配置
hadoop入门-第一章General:第三节Hadoop初级入门之命令指南
hadoop入门-第一章General:第四节文件系统shell
hadoop入门-第一章General:第五节hadoop的兼容性说明
hadoop入门-第一章General:第六节开发人员和用户接口指南:hadoop接口分类
hadoop入门-第一章General:第七节Hadoop 文件系统 API :概述
hadoop入门-第二章common:第一节hadoop 本地库 指南
hadoop入门-第二章common:第二节hadoop代理用户 -超级用户代理其它用户
hadoop入门-第二章common:第三节机架智能感知
hadoop入门-第二章common:第四节安全模式说明
hadoop入门-第二章common:第五节服务级别授权指南
hadoop入门-第二章common:第六节Hadoop HTTP web-consoles认证机制
hadoop入门-第二章common:第七节Hadoop Key管理服务器(KMS) - 文档集
hadoop入门:第三章HDFS文档概述(一)
hadoop入门:第三章HDFS文档概述(二)
hadoop入门:第四章mapreduce文档概述
hadoop入门:第五章MapReduce REST APIs文档概述
hadoop入门:第六章YARN文档概述
hadoop入门:第七章YARN REST APIs
hadoop入门:第八章hadoop兼容文件系统
hadoop入门:第九章hadoop认证
hadoop入门:第十章hadoop工具
hadoop入门:第十一章hadoop配置
|