Hadoop本地库 Native Libraries
Hadoop本地库
由于性能和 Java 不可实现功能等原因,Hadoop 具有某些组件的本地实现。在 unix 平台上,该库命名为 libhadoop.so。
用法
使用本地 hadoop 库相当简单:
- 可以下载一个hadoop发行版,它将包含原生hadoop库的预构建版本,也可以自己编译构建原生hadoop库。无论您是下载还是构建,本地库的名称都是相同的:libhadoop.so
- 安装压缩、解码相关开发包(> zlib-1.2,> gzip-1.2) :
- 如果您下载了原生的hadoop库,请安装这两个或者其中一个开发包——无论您想在部署中使用哪种压缩编解码器
- 如果您想自己编译构建hadoop本地库,那么必须同时安装这两个开发包
- 检查运行时日志文件
组件
本地 hadoop 库包括各种组件:
-
压缩编解码器(bzip2,lz4,snappy,zlib)
-
本地 IO优化: HDFS Short-Circuit Local Reads 及 HDFS 中的集中式缓存管理
-
CRC32校验和实现
支持平台
仅在 unix 平台上支持本地 hadoop 库。该库不支持 Cygwin 或 Mac os平台。本地 hadoop 库主要用于 GNU/Linus 平台,并已经在这些发行版上进行了测试:
- RHEL4/Fedora
- Ubuntu
- Gentoo
在上述所有发行版中,一个32/64位的本地 hadoop 库将与各自的32/64位 jvm 一起工作。
下载
预构建的32位 i386-Linux 本机 hadoop 库作为 hadoop 发行版的一部分可用,位于 lib/native 目录中。您可以从 Hadoop 公共版本下载 Hadoop 发行版。
确保安装 zlib、gzip 开发包——您希望在部署、开发中使用的压缩编码器。
构建
本地 hadoop 库是用 ANSI C 编写的,使用 GNU autotools-chain (autoconf、 autoheader、 autoake、 autoscan、 libtool)构建。这意味着在任何平台上使用符合标准的 C 编译器和 GNU 自动工具链(参见支持的平台)都可以直接构建库。
您需要在目标平台上安装的软件包如下:
- C 编译器(例如 GNU c 编译器)
- GNU Autools Chain: autoconf,automatake,libtool
- Zlib-development 包(stable version > = 1.2.0)
- Openssl-development 包(例如 libssl-dev)
一旦你安装了前提包,使用标准 hadoop pom.xml 文件编译构建原生 hadoop 库:
$ mvn package -Pdist,native -DskipTests -Dtar
你应该在以下地方看到新建的本地库:
$ hadoop-dist/target/hadoop-2.6.0/lib/native
请注意以下事项:
- 为了构建本地 hadoop 库,必须在目标平台上同时安装 zlib 和 gzip 开发包; 然而,对于部署来说,如果您希望只使用一个编解码器,只安装一个包就足够了
- 为了构建和部署本地 hadoop 库,必须为 zlib 提供正确的32/64库(取决于目标平台的32/64位 jvm)
运行
bin/hadoop 脚本通过系统属性确保本机 hadoop 库位于库路径上:-Djava.library.path = < path >
在运行时,检查 MapReduce 任务的日志文件。
- 如果一切正常,那么:
DEBUG util.NativeCodeLoader - Trying to load the custom-built native-hadoop library...
INFO util.NativeCodeLoader - Loaded the native-hadoop library
- 如果出了什么问题,那么:
INFO util.NativeCodeLoader - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable