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 ...
随机推荐
- ListView 使用
1. 不使用xml 文件 动态创建 Listview 并且绑定 ArrayList ListView listView = new ListView(this); listView.setAdapte ...
- LeetCode: JumpGame 1 and 2
Title : Given an array of non-negative integers, you are initially positioned at the first index of ...
- NavieBayes中的多项式与伯努力模型
1文本分类过程 例如文档:Good good study Day day up可以用一个文本特征向量来表示,x=(Good, good, study, Day, day , up).在文本分类中,假设 ...
- FFMPEG 库移植到 VC 需要的步骤
在VC下使用FFMPEG编译好的库,不仅仅是把.h,.lib,.dll拷贝到工程中就行了,还需要做以下几步.(此方法适用于自己使用MinGW编译的库,也同样适用于从网上下载的编译好的库,例如http: ...
- RTP协议之Header结构解析
实时传输协议 RTP,RTP 提供带有实时特性的端对端数据传输服务,传输的数据如:交互式的音频和视频.那些服务包括有效载荷类型定义,序列号,时间戳和传输监测控制.应用程序在 UDP 上运行 RTP 来 ...
- Linux编译安装Darwin Streaming Server 6.0.3。。。
目前主流的流媒体服务器有微软的windows media server.RealNetworks的Helixserver和苹果公司的Darwin Streaming Server. 微软的window ...
- ORACLE 远程连接数据库
通过运行->cmd->sqlplus/nolog 登录sqlplus时,突然间提示“sqlplus不是内部或外部命令,也不 是可运行的程序或批处理文件”,如下图: 分析后感觉不可能啊,因为 ...
- 搭建LAMP测试环境
LAMP:Linux+Apache+Mysql+Php,组合统称为LAMP,关于其中的独立个体,这里就不多介绍了. 1.首先准备一下软件包,如下: mysql-5.0.22.tar.gz httpd- ...
- liunx上运行mybase
mybase 是个人知识管理软件,国内用他的人很多,尤其是程序员.我也是mybase的忠实使用者,有大量的积累. 以前一直用Windows,mybase使用完全没有问题,后来转投ubuntu阵营 ...
- 获取某月第一天,最后一天的sql server脚本 【转】http://blog.csdn.net/chaoowang/article/details/9167969
这是计算一个月第一天的SQL 脚本: SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) --当月的第一天 SELECT DATEADD(mm, DA ...