Hadoop本地库

#hadoop checknative -a
2019-04-15 04:17:26,229 INFO bzip2.Bzip2Factory: Successfully loaded & initialized native-bzip2 library system-native
2019-04-15 04:17:26,233 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib library
2019-04-15 04:17:26,251 WARN zstd.ZStandardCompressor: Error loading zstandard native libraries: java.lang.InternalError: Cannot load libzstd.so.1 (libzstd.so.1: cannot open shared object file: No such file or directory)!
2019-04-15 04:17:26,255 WARN erasurecode.ErasureCodeNative: ISA-L support is not available in your platform... using builtin-java codec where applicable
Native library checking:
hadoop:  true /opt/software/hadoop-3.2.0/lib/native/libhadoop.so.1.0.0
zlib:    true /lib64/libz.so.1
zstd  :  false 
snappy:  true /lib64/libsnappy.so.1
lz4:     true revision:10301
bzip2:   true /lib64/libbz2.so.1
openssl: false Cannot load libcrypto.so (libcrypto.so: cannot open shared object file: No such file or directory)!
ISA-L:   false libhadoop was built without ISA-L support
2019-04-15 04:17:26,435 INFO util.ExitUtil: Exiting with status 1: ExitException

发现少了,zstd 和openssl

1.什么是hadoop本地库(Native Library)?

鉴于性能问题以及某些Java类库的缺失,对于某些组件,Hadoop提供了自己的本地实现。这些组件保存在Hadoop的一个独立的动态链接的库里。这个库在*nix平台上叫libhadoop.so.​​

2.hadoop2.6.0本地库包含组件:

  • ​压缩编码解码器(bzip2, lz4, snappy, zlib)
  • Native IO utilities for HDFS Short-Circuit Local Reads and
    Centralized Cache Management in HDFS
  • CRC32​校验实施。

3.支持平台:RHEL4/Fedora,Ubuntu,Gentoo

4.本地库的使用:

  • ​检查组件;
  • 检查支持的平台;
  • 无论是下载的hadoop发行版本(已经包含预构建的hadoop本地库),还是自己构建hadoop本地库,本地库的名字都是一样的:libhadoop.so
  • 安装compression codec development packages ​(>zlib-1.2,
    gzip-1.2):如果是下载好的本地库,安装一个或多个在部署你想用到的compression codec开发包;如果是构建本地库,则必须安装所有的开发包。
  • 检查运行日志文件。

5.构建本地库:

hadoop本地库是使用 ANSI C写的,使用​GNU autotools-chain构建的,这就意味着应该在任意平台上使用标准的C编译器和GNU autotools-chain直接构建它。构建前需要在平台上安装以下包:

  • C compiler (e.g. GNU C Compiler)
  • GNU Autools Chain: autoconf, automake, libtool zlib-development
    package (stable version >= 1.2.0) openssl-development package(e.g.
    libssl-dev)

一旦安装好所需的包,使用标准的hadoop pom.xml文件,并传递本地标志来构建本地库:

$ mvn package -Pdist,native -DskipTests -Dtar

备注:

1.​使用hadoop预构建的本地库,并安装zlib1g, gzip,扔出现相同的问题。

开启debug:​export HADOOP_ROOT_LOGGER=DEBUG,console

报错:​16/05/31 20:14:09 DEBUG util.NativeCodeLoader: Failed to load native-hadoop with error: java.lang.UnsatisfiedLinkError: /home/hadoop/hadoop-2.6.0/lib/native/libhadoop.so.1.0.0: /home/hadoop/hadoop-2.6.0/lib/native/libhadoop.so.1.0.0: wrong ELF class: ELFCLASS64 (Possible cause: architecture word width mismatch)

分析:可能是​libhadoop.so.1.0.0与系统位数不一致。

查看libhadoop.so.1.0.0​文件信息:file lib/native/libhadoop.so.1.0.0

​lib/native/libhadoop.so.1.0.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=3a80422c78d708c9a1666c1a8edd23676ed77dbb, not stripped——————>libhadoop.so.1.0.0​文件居然是64位的(不是说默认的是32位的吗),我的系统是ubuntu32位的。

解决方法:​

方法一:从网上下载了一个网友编译好的本地库,将原来的本地库替换掉,再重新启动hadoop,警告消除。​

方法二:将native library编译成跟自己系统版本相符的版本

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值