10.hadoop-2.7.2官网文档翻译-原生库指南

作者: 疯狂小兵 | 2016-07-14 | 阅读
「编辑」 「本文源码」

概览

该指南描述了原生的Hadoop库和原生共享库的一小部分讨论。

注意:依赖你的环境,属于原生库可能为你需要编译的所有*.so,属于原生压缩指的是所有你需要编译并特别是明确要压缩的*.so。然而,目前该文档仅仅称呼原生Hadoop库libhadoop.so. 针对libHDFS库libhdfs.so的文档在这里

原生Hadoop库

因为性能原因,Hadoop某些组件是原生实现的,java实现不可用。这些组件可以在叫做原生Hadoop库的单一动态链接库中获得。在*nix平台上该库叫做libhadoop.so

用法

使用原生Hadoop库相当容易:

  1. 检验组件

  2. 检验支持的平台

  3. 下载Hadoop的发行版本,包含了原生Hadoop库的预编译版本;或者编译你自己的原生Hadoop库版本。不管是编译还是下载,库的名字是相同的:libhadoop.so

  4. 安装压缩编解码器(zlib-1.2,gzip-1.2):

    • 如果你下载库,安装一个或多个你想在你的开发中使用的压缩编解码器的开发包。

    • 如果你编译库,会强制安装上面的两个开发包

  5. 检查运行时的日志文件

组件

原生的Hadoop库包含多种组件:

支持平台

原生Hadoop库仅仅支持*nix平台。该库不能在Cygwin和Mac OS X平台使用。

原生库主要用于GNU/Linux平台并测试了以下Linux发行版:

  • RHEL4/Fedora

  • Ubuntu

  • Gentoo

以上所有发行版的32位和64位原生Hadoop库会在各自的32位和64位jvm上运行。

下载

预编译的32位的i386的linux原生Hadoop库可以作为Hadoop发行版本的一部分获得。在lib/native目录。你可以从Hadoop通用版本中获得Hadoop发行版。

要确保你安装了开发中要用到的压缩编解码器zlibgzip,两个都安装也可。

构建

原生的Hadoop库是用ANSII C缩写,使用GNU的自动工具链(autoconf,autoheader,automake,autoscan,libtool)编译。意味着应该在任何平台通过标准的C编译器和GNU自动工具链编译库。

在目标平台你需要安装以下的包:

  • C编译器(比如,GNU C 编译器)

  • GNU自动工具链:autoconf,autoconf,libtool

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

  • openssl 开发包(比如,libssl-dev)

一旦安装了必备的包,使用标准的Hadoop的POM.xml文件,使用原生标志编译原生Hadoop库。

$ mvn package -Pdist,native -DskipTests -Dtar

你可以在$ hadoop-dist/target/hadoop-2.7.2/lib/native查看最新编译的库。

请注意以下几点:

  • 为了编译原生的Hadoop库,会在目标平台强制安装在zlib和gzip开发包。然而,对于部署,如果进指向使用一个编解码器,只需要安装一个包。

  • 为了编译和部署原生Hadoop库,在目标平台上安装依赖于32位或者64位JVM的正确的32位或者64位的库是必须要的。

### 运行时

bin/hadoop脚本通过系统属性-Djava.library.path=<path>确保原生库在库路径上。

在运行期间,为你的MapReduce任务检查Hadoop日志文件。

  • 如果所有事都正确,会显示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

检查

NativeLibraryChecker是检查原生库是否被正确安装的工具。你可以以如下命令启动NativeLibraryChecker:

$ 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

原生共享库

你可以使用DistributedCache 分配和软连接那些库文件来加载任何原生共享库。

该例子展示了你应该怎样分发一个共享库mylib.so,并同一个MapReduce任务加载它。

  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);
  1. MapReduce任务可以包含: System.loadLibrary("mylib.so");

注意:如果你已经下载了或者编译了原生Hadoop库,你不需要使用DistibutedCache来使得你的MapReduce任务可以获得库。


版权声明:本文由 在 2016年07月14日发表。本文采用CC BY-NC-SA 4.0许可协议,非商业转载请注明出处,不得用于商业目的。
文章题目及链接:《10.hadoop-2.7.2官网文档翻译-原生库指南》




  相关文章:

「游客及非Github用户留言」:

「Github登录用户留言」:

TOP