Hadoop本地库
目的
鉴于性能问题以及某些Java类库的缺失,对于某些组件,Hadoop提供了自己的本地实现。 这些组件保存在Hadoop的一个独立的动态链接的库里。这个库在*nix平台上叫libhadoop.so. 本文主要介绍本地库的使用方法以及如何构建本地库。
组件
使用方法
hadoop本地库的用法很简单:
- 看一下 支持的平台.
- 下载 预构建的32位i386架构的Linux本地hadoop库(可以在hadoop发行版的lib/native目录下找到)或者自己 构建 这些库。
- 确保你的平台已经安装了zlib-1.2以上版本或者lzo2.0以上版本的软件包或者两者均已安装(根据你的需要)。
bin/hadoop 脚本通过系统属性 -Djava.library.path=<path>来确认hadoop本地库是否包含在库路径里。
检查hadoop日志文件可以查看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
支持的平台
Hadoop本地库只支持*nix平台,已经广泛使用在GNU/Linux平台上,但是不支持 Cygwin 和 Mac OS X。
已经测试过的GNU/Linux发行版本:
在上述平台上,32/64位Hadoop本地库分别能和32/64位的jvm一起正常运行。
构建Hadoop本地库
Hadoop本地库使用 ANSI C 编写,使用GNU autotools工具链 (autoconf, autoheader, automake, autoscan, libtool)构建。也就是说构建hadoop库的平台需要有标准C的编译器和GNU autotools工具链。请参看 支持的平台。
你的目标平台上可能会需要的软件包:
- C 编译器 (e.g. GNU C Compiler)
- GNU Autools 工具链: autoconf, automake, libtool
- zlib开发包 (stable version >= 1.2.0)
- lzo开发包 (stable version >= 2.0)
如果已经满足了上述先决条件,可以使用build.xml 文件,并把其中的compile.native置为 true,这样就可以生成hadoop本地库:
$ ant -Dcompile.native=true <target>
因为不是所有用户都需要Hadoop本地库,所以默认情况下hadoop不生成该库。
你可以在下面的路径查看新生成的hadoop本地库:
$ build/native/<platform>/lib
其中<platform>是下列系统属性的组合 ${os.name}-${os.arch}-${sun.arch.data.model};例如 Linux-i386-32。
注意
- 在生成hadoop本地库的目标平台上必须 安装了zlib和lzo开发包;但是如果你只希望使用其中一个的话,在部署时,安装其中任何一个都是足够的。
- 在目标平台上生成以及部署hadoop本地库时,都需要根据32/64位jvm选取对应的32/64位zlib/lzo软件包。
使用DistributedCache 加载本地库
用户可以通过 DistributedCache 加载本地共享库,并分发和建立库文件的符号链接。
这个例子描述了如何分发库文件并在从map/reduce任务中装载库文件。
- 首先拷贝库文件到HDFS。
bin/hadoop fs -copyFromLocal mylib.so.1 /libraries/mylib.so.1 - 启动作业时包含以下代码:
DistributedCache.createSymlink(conf);
DistributedCache.addCacheFile("hdfs://host:port/libraries/mylib.so.1#mylib.so", conf); - map/reduce任务中包含以下代码:
System.loadLibrary("mylib.so");
转自:http://hadoop.apache.org/docs/r0.19.1/cn/native_libraries.html#%E6%94%AF%E6%8C%81%E7%9A%84%E5%B9%B3%E5%8F%B0
Hadoop本地库的更多相关文章
- hadoop本地库与系统版本不一致引起的错误解决方法
hadoop本地库与系统版本不一致引起的错误解决方法 部署hadoop的集群环境为 操作系统 centos 5.8 hadoop版本为cloudera hadoop-0.20.2-cdh3u3 集 ...
- Hadoop本地库介绍及相关问题解决方法汇总
1.hadoop本地库的作用是什么?2.哪两个压缩编码器必须使用hadoop本地库才能运行?3.hadoop的使用方法?4.hadoop本地库与系统版本不一致会引起什么错误?5.$ export HA ...
- HADOOP docker(八):hadoop本地库
前言2. Native Hadoop Library3. 使用本地库4. 本地库组件5. 支持的平台6. 下载7. 编译8. 运行时观察9. 检查本地库10. 如果共享本地库 小伙伴还记得每次启动hd ...
- hadoop本地库无法加载
(1)设置环境变量 export HADOOP_HOME=/your/own/hadoop/home export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME ...
- WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable(spark加载hadoop本地库的时候出现不能加载的情况要怎么解决呢?)
原文地址: https://www.zhihu.com/question/23974067/answer/26267153 原文内容: 我64位机器,当时hadoop启动的时候出现这个问题是因为had ...
- spark加载hadoop本地库的时候出现不能加载的情况要怎么解决呢?
hadoop shell运行的时候不会报这个错误,因为我已经重新在64位机上编译了源文件,并把so文件复制到hadoop的native目录下,而且环境变量也设置正确了,所以hadoop本身没有问题. ...
- hadoop native本地库问题总结
近期,打算hbase建表用snappy压缩时,碰到一些hadoop本地库的问题. 事实上这些问题是一直存在的,仅仅是不影响正常使用,就没有引起重视. 这次希望彻底解决下面问题: 问题一:运行start ...
- 解决Hadoop无法加载本地库的问题: Unable to load native-hadoop library for your platform
今天跑Hadoop程序时一直提示我无法加载本地库,然后就直接退出运行了,如下图所示. 原因是由于Apache提供的Hadoop本地库是32位的,而在64位的服务器上就会有问题,因此需要自己编译64位的 ...
- 执行Hadoop job提示SequenceFile doesn't work with GzipCodec without native-hadoop code的解决过程记录
参照Hadoop.The.Definitive.Guide.4th的例子,执行SortDataPreprocessor作业时失败,输出的错误信息 SequenceFile doesn't work w ...
随机推荐
- MyEclipse的快捷使用(含关联源码和Doc的方式)
删除行代码 :在Eclipse中将光标移至待删除的行上,然后按Ctrl+d 组合键 快速导入包 :在Eclipse中将光标移至相应的类上面,按Ctrl+Shift+M 组合键 批量行注释 :Ctrl+ ...
- NALU(NAL单元)
一 NALU类型 标识NAL单元中的RBSP数据类型,其中,nal_unit_type为1, 2, 3, 4, 5及12的NAL单元称为VCL的NAL单元,其他类型的NAL单元为非VCL的NAL ...
- HTML5 随音乐节奏变化的频谱图动画
这里将要介绍的HTML5 音频处理接口与Audio标签是不一样的.页面上的Audio标签只是HTML5更语义化的一个表现,而HTML5提供给JavaScript编程用的Audio API则让我们有能力 ...
- 增加SharePoint2010修改域密码功能
转:http://blog.163.com/hr_test/blog/static/16485210720137953131694/ 前提 SharePoint2010的用户基于AD的,因此修改密码是 ...
- 【转】堆栈跟踪中收到一个UnhandledExceptionFilter调用时,如何查找问题异常堆栈
定义没有异常处理程序来处理引发的异常时调用UnhandledExceptionFilter函数.函数通常将异常传递到捕获并处理它所尝试的 Ntdll.dll 文件. 在某些情况下,在其中存在的进程内存 ...
- Oracle 数据乱码
原文 Oracle 数据乱码 服务器配置环境变量 NLS_LANG:American_america.ZHS16GBK
- delphi ole word
源代码如下: //Word打印(声明部分) wDoc,wApp:Variant; function PrnWordBegin(tempDoc,docName:String):boolean; func ...
- 【转】发布python的包至pypi服务器
[原文链接]http://yejinxin.github.io/distribute-python-packages-to-pypi-server/ 使用pip或easy_install可以管理和安装 ...
- Cadence原理图与Allegro交互
1:激活orCAD与Allegro的交互程序 打开原理图,Options->Preference在Miscellaneous里勾选 2:打开用到的工程 原理图,还有Allegro PCB Des ...
- 如何避免JavaScript的内存泄露及内存管理技巧
发表于谷歌WebPerf(伦敦WebPerf集团),2014年8月26日. 高效的JavaScript Web应用必须流畅,快速.与用户交互的任何应用程序,都需要考虑如何确保内存有效使用,因为如果 ...