本指南介绍了本地的hadoop库,并包括了有关本地共享库的简短讨论。
注意:根据您的环境,术语“本机库”可能是指所有需要编译的* .so。并且,“本机压缩”一词可以指代您需要编译的与压缩特别相关的所有* .so。但是,当前,该文档仅处理本机hadoop库(libhadoop.so)。libhdfs库的文件(libhdfs.so)在这里。
出于性能原因和Java实现的不可用性,Hadoop具有某些组件的本机实现。这些组件在单个动态链接的本机库(称为本机hadoop库)中可用。在* nix平台上,该库名为libhadoop.so。
使用本地hadoop库非常容易:
仅* nix平台支持本机hadoop库。该库不适用于Cygwin或Mac OS X平台。
原生hadoop库主要在GNU / Linus平台上使用,并已在以下发行版上进行了测试:
在上述所有发行版中,一个32/64位本机hadoop库将与相应的32/64位jvm一起工作。
预构建的32位i386-Linux本机hadoop库可作为hadoop发行版的一部分提供,位于lib / native目录中。您可以从Hadoop Common Releases下载hadoop发行版。
确保安装zlib和/或gzip开发包-您要在部署中使用的任何压缩编解码器。
原生hadoop库是用ANSI C编写的,并使用GNU autotools链(autoconf,autoheader,automake,autoscan,libtool)构建。这意味着应该在任何使用符合标准的C编译器和GNU autotools-chain(请参阅支持的平台)的平台上直接构建该库。
您需要在目标平台上安装的软件包是:
安装必备软件包后,请使用标准的hadoop pom.xml文件并传递本机标志以构建本机hadoop库:
$ mvn软件包-Pdist,native -DskipTests -Dtar
您应该在以下位置看到新建的库:
$ hadoop-dist / target / hadoop-3.2.1 / lib / native
请注意以下事项:
bin / hadoop脚本可通过系统属性确保本地hadoop库位于库路径中:-Djava.library.path = <path>
在运行时,检查您的MapReduce任务的hadoop日志文件。
NativeLibraryChecker是用于检查是否正确加载本机库的工具。您可以按以下方式启动NativeLibraryChecker:
$ hadoop checknative -a 14/12/06 01:30:45 WARN bzip2.Bzip2Factory:无法加载/初始化native-bzip2库system-native,将使用纯Java版本 14/12/06 01:30:45 INFO zlib.ZlibFactory:成功加载并初始化了native-zlib库 本机库检查: 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 zstd:true /usr/lib/libzstd.so.1 lz4:真实修订版:99 bzip2:错误
您可以使用DistributedCache加载任何本机共享库,以分发和符号链接库文件。
本示例说明如何分发共享库mylib.so并从MapReduce任务加载它。
注意:如果下载或构建了本地hadoop库,则无需使用DistibutedCache使该库可用于MapReduce任务。