您的位置:首页 > 产品设计 > UI/UE

Hadoop-2.2.0中文文档—— Common - Native Libraries Guide

2014-05-17 13:30 453 查看

概览

这个入门教程描述了native(本地?原生?)hadoop库,包含了一小部分关于native hadoop共享库的讨论。
This guide describes the native hadoop library and includes a small discussion about native shared libraries.
注意: 根据你的环境,词组 "native libraries" 可能会变成 *.so,这样你就需要编译,然后,要是词组 "native compression" 变成 *.so,你就需要在编译时特别指定相关的压缩。(原文是在是翻不好! Depending on your environment, the term
"native libraries" could refer to all *.so's you need to compile; and, the term "native compression" could refer to all *.so's you need to compile that are specifically related to compression.)当期,然而,这个文档只讨论 native hadoop 库(
libhadoop.so
).

Native Hadoop Library

Hadoop 有 native实现,是因为性能原因和Java的实现不可用而实现了特定的组件。这些组件可在单节点,动态链接的 native 库中调用native hadoop库。在*nix平台上,库名是 
libhadoop.so
.

用法

使用hadoop native库相当简单:
检查组件
检查支持的平台
或者下载一个包含内置原生库的hadoop发行版,或者创建你自己的 native hadoop 库。不论是下载还是创建,库的名字都是一样的:libhadoop.so
安装压缩编码包 (>zlib-1.2, >gzip-1.2): + 如果你下载库安装一个或更多的开发包-不论你用哪一个压缩编码器来部署。 + 如果你创建库,则必须安装两个开发包。
检查运行时日志文件

组件

native hadoop 库包含两个组件, zlib 和 gzip 压缩编码器:
zlib
gzip
native hadoop 库对gzip工作来说是必须的。

支持的平台

native hadoop 库仅在 *nix 平台上受支持。这个库不能与 Cygwin或 Mac OS X 平台一同工作。
native hadoop 库主要用在 GNU/Linus 平台,已经在这些发行版上测试过:
RHEL4/Fedora
Ubuntu
Gentoo
在所有上面的 32/64 位发行版上, native hadoop 库会分别运行一个 32/64 位的 jvm.

下载

内置的 32-bit i386-Linux native hadoop 作为hadoop发行版的一部分,位置是 
lib/native
 目录。你可以从
Hadoop Common Releases 下载hadoop发行版。
确保要安装 zlib和/或 gzip 开发包 - 不论你用哪一个压缩编码器来部署。

Build

native hadoop 库实用 ANSI C 写的,用 GNU autotools-chain (autoconf, autoheader, automake, autoscan, libtool)构建。这意味着它应该可以直接在任何有标准C编译器和GNU autotools-chain(见支持的平台)的平台上构建库。
你需要安装在目标平台上的包:
C 编译器(例如, GNU C Compiler)
GNU Autools Chain: autoconf, automake, libtool
zlib-开发包 (稳定版本 >= 1.2.0)
一旦你使用标准的hadoop build.xml file安装了先决的包,并传递compile.native 标志(设为true)去构建 native hadoop library:

$ ant -Dcompile.native=true <target>


你应该可以看见新建的库:

$ build/native/<platform>/lib


平台是系统属性的组合: $os.name-$os.arch-$sun.arch.data.model (如,
Linux-i386-32).
请注意:
必须安装zlib 和 开发包到目标平台上,以便构建 native hadoop 库。然而,为了开发的话仅安装一个包就够了,如果你只想用编码器的话。
必须有正确的 32/64库 适合zlib,取决于目标平台的 32/64 位 jvm ,为的是构建和部署 native hadoop library.

运行时

bin/hadoop 脚本确保 native hadoop library 通过系统属性在 library path 上:
-Djava.library.path=<path>

在运行时,为你的 MapReduce 任务检查 hadoop 日志文件。
如果一切正常,那么: 
DEBUG util.NativeCodeLoader - 试着加载自构建的
native-hadoop library...
 
INFO util.NativeCodeLoader - 载入了的 native-hadoop library

如果哪里出错了,那么: 
INFO util.NativeCodeLoader - 不能为你的平台载入
native-hadoop library ... 使用可用的java类


Native Shared Libraries

你可以用DistributedCache 为分布和对称链接库文件载入任何的 native shared library 。
这个例子展示了如何散布一个 a shared library, mylib.so, 并将其从一个 MapReduce任务中载入。
首先复制文件到 HDFS: 
bin/hadoop fs -copyFromLocal mylib.so.1
/libraries/mylib.so.1

job启动程序应该包含下面的: 
DistributedCache.createSymlink(conf);
 
DistributedCache.addCacheFile("hdfs://host:port/libraries/mylib.so.
1#mylib.so", conf);

MapReduce 任务可以包含: 
System.loadLibrary("mylib.so");

注意: 如果你下载了或构建了 native hadoop library,你不需要使用 DistibutedCache 来使库对你的 MapReduce 任务可用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hadoop 文档