hadoop Native本地库的一系列问题!!!

先说一下哈,我用的是ubuntu 18.04,不过不同系统都是大同小异,解决方法都是一样的,看下去就好了。

 首先hadoop环境配置走一遍,这个不能错。

export JAVA_HOME=/opt/jdk
export JRE_HOEM=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

export HADOOP_HOME="/usr/local/hadoop"  
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH  
export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native/:$LD_LIBRARY_PATH
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"

上面配置最后一条,亲测ubuntu 16.04和14.04 这个:$HADOOP_COMMON_LIB_NATIVE_DIR加不加都一样,但是ubuntu 18.04需要加。

source 一下

然后检查一下本地库native

$ hadoop checknative -a

下面几个是所有的native库问题

第一种:

Native library checking:
hadoop:  false 
zlib:    false 
snappy:  false 
lz4:     false 
bzip2:   false 
openssl: false 
70/01/01 01:02:05 INFO util.ExitUtil: Exiting with status 1

1.环境配置问题,没加载到,按我上面的环境配置检查一下

2.可能是/lib/native文件夹下为空,为空的话建议重下一个包或者下个native库,重安一下

3.可能是native库下的.so是32位的,而你的电脑是64位的,按我下面的命令查看一下,看到网上好多一说native库不行就说是这个问题让你换的都是扯淡,现在官网发行版基本全是64位,只有很少一部分人有这个问题,检测本地库到底是多少位如下。

$ cd /usr/local/hadoop/lib/native
$ldd libhadoop.so
	linux-vdso.so.1 (0x00007fff057ec000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f17d15dc000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f17d13bd000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f17d0fcc000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f17d1a02000)

第二种:

70/01/01 01:26:05 WARN bzip2.Bzip2Factory: Failed to load/initialize native-bzip2 library system-native, will use pure-Java version
70/01/01 01:26:05 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib library
Native library checking:
hadoop:  true /usr/hadoop/lib/native/libhadoop.so
zlib:    true /usr/lib/libz.so.1
snappy:  false 
lz4:     true revision:99
bzip2:   true 
openssl: false Cannot find AES-CTR support, is your version of Openssl new enough?
70/01/01 01:26:05 INFO util.ExitUtil: Exiting with status 1

这种情况好很多,就是已经加载成功了,而且是成功加载了hadoop.so。

snappy是一个压缩的依赖,安装如下

官网下载一下哈,链接很好找我就不发了~~~~

$ tar -xvf snappy-1.1.3.tar.gz
$ cd snappy-1.1.3
$ ./configure 
$ make
$ make install

安装完后

snappy:true

openssl 之所以为false是因为可能没安装openssl,如果已安装那就是因为软连接没设。

$ apt-get install openssl

也可以手动安装,看心情就好,下面命令时手动安装,包自己下,很好找。

$ tar -xvf openssl-1.1.0f.tar.gz
$ cd openssl-1.1.0f/
$ ./config shared --prefix=/usr/local/openssl --openssldir=/usr/lib/openssl
$ make && make install
$ vim /etc/profile
export PATH=$PATH:/usr/local/openssl/bin 
$ openssl version
$ sudo ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib/libssl.so.1.1
$ sudo ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib/libcrypto.so.1.1 

安装成功后

$ cd /usr/bin/
$ ldd openssl
linux-vdso.so.1 (0x00007fff58f14000)
	libssl.so.1.1 => /usr/lib/x86_64-linux-gnu/libssl.so.1.1 (0x00007f0062316000)
	libcrypto.so.1.1 => /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1 (0x00007f0061e9e000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f0061c7f000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f006188e000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f006168a000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f0062821000)

找到libcrypto.so.1.1的路径

$ cd /usr/lib/x86_64-linux-gnu/
$ ln -s libcrypto.so.1.0.0 libcrypto.so

就搞定了,有兴趣的可以自己百度学习一下什么是.so,是干什么的。还有转载记得写出处,挂我的链接谢谢,拒绝手残党。

https://blog.csdn.net/solike8/article/details/88424001,手动粘贴自己链接。~~

19/03/12 17:19:15 INFO bzip2.Bzip2Factory: Successfully loaded & initialized native-bzip2 library system-native
19/03/12 17:19:15 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib library
Native library checking:
hadoop:  true /usr/local/hadoop/lib/native/libhadoop.so.1.0.0
zlib:    true /lib/x86_64-linux-gnu/libz.so.1
snappy:  true /usr/local/lib/libsnappy.so.1
lz4:     true revision:10301
bzip2:   true /lib/x86_64-linux-gnu/libbz2.so.1
openssl: true /usr/lib/x86_64-linux-gnu/libcrypto.so

还有有些人 bzip2: false 这个的话和hadoop版本与电脑系统有关系,一般来说2.8.x以上都会找到这个.so,2.8.0以下会报找不到,可以直接挂个软链接就好,这个.so每个电脑基本都有,find /管道搜一下  链接一挂就true了,如果实在没有安一下就好。

最后附上官网的解决办法,我发现网上都没有人发过这种方法的相关帖子,自己试了一下,好像没成功。

http://hadoop.apache.org/docs/r2.7.5/hadoop-project-dist/hadoop-hdfs/ShortCircuitLocalReads.html

First copy the library to the HDFS: bin/hadoop fs -copyFromLocal mylib.so.1 /libraries/mylib.so.1
The job launching program should contain the following: DistributedCache.createSymlink(conf); DistributedCache.addCacheFile("hdfs://host:port/libraries/mylib.so. 1#mylib.so", conf);
The MapReduce task can contain: System.loadLibrary("mylib.so");

意思是用这条命令把没有加载成功的库复制到你环境里配的native文件夹下面。

猜你喜欢

转载自blog.csdn.net/solike8/article/details/88424001