Jun 11

hadoop出现Unable to load native-hadoop library for your platform 的解决 不指定

admin , 21:27 , Hadoop , 评论(0) , 引用(0) , 阅读(400) , Via 本站原创 | |
搜索
我已经获得阿里云幸运券,准备分享给您。请点击获取  

Unable to load native-hadoop library for your platform 的解决begin by itlife365.com

17/06/09 12:13:07 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Found 2 items
-rw-r--r--   1 hadoop supergroup          0 2017-01-09 23:14 hdfs://localhost:9000/user/hadoop/output/_SUCCESS
-rw-r--r--   1 hadoop supergroup         77 2017-01-09 23:14 hdfs://localhost:9000/user/hadoop/output/part-r-00000
[hadoop@itlife365 tmp]$

[hadoop@itlife365 ~]$ hadoop fs -ls /
17/06/09 12:22:42 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Found 1 items
drwxr-xr-x   - hadoop supergroup          0 2017-01-09 23:00 /user
[hadoop@itlife365 ~]$

[hadoop@itlife365 hadoop]$ ./bin/hadoop jar share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-2.6.0-sources.jar  org.apache.hadoop.examples.WordCount input output
17/06/09 05:57:41 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
17/06/09 05:58:53 INFO Configuration.deprecation: session.id is deprecated. Instead, use dfs.metrics.session-id
17/06/09 05:58:53 INFO jvm.JvmMetrics: Initializing JVM Metrics with processName=JobTracker, sessionId=
Exception in thread "main" org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://localhost:9000/user/hadoop/output already exists
        at org.apache.hadoop.mapreduce.lib.output.FileOutputFormat.checkOutputSpecs(FileOutputFormat.java:146)
        at org.apache.hadoop.mapreduce.JobSubmitter.checkSpecs(JobSubmitter.java:562)

使用任何hadoop 命令都出现这个错误。
安装hadoop启动之后总有警告:
Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

原因分析:
Apache提供的hadoop本地库是32位的,而在64位的服务器上就会有问题,因此需要自己编译64位的版本。
或者32bit的服务器上 部署64位的文件。
提示hadoop不能加载本地库。
hadoop2 以后官网只提供64位的,所有32位的需要自己源码编译了或者网上下载
以前官网会提供32位的安装包,但目前提供的下载包为64位的,在Linux 32位系统下安装后会一直提示错误“WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable ”,但官网又不提供32位系统下的安装包,所以我们只能自己编译打包源码。

1、首先找到对应自己hadoop版本的64位的lib包,可以自己手动去编译,但比较麻烦,也可以去网上找,好多都有已经编译好了的。
2、可以去网站:http://dl.bintray.com/sequenceiq/sequenceiq-bin/  下载对应的编译版本
3、将准备好的64位或者32位的lib包解压到已经安装好的hadoop安装目录的lib/native 和 lib目录下:
大家可以到$HADOOP_HOME/lib/native下,查看文件libhadoop.so.1.0.0,里面会显示Hadoop的位数

如果你是64位操作系统,可以跳过【本地编译源码】直接跳到第二步。
4 本地编译源码
具体操作看前一篇,这里

最后编译完以后,目标在

hadoop-2.6.0-src/hadoop-dist/target/hadoop-2.6.0下,将此目录下的lib/native替换掉$HADOOP_HOME/lib/native。

5 配置环境变量
在/etc/profile中,添加下面配置:
export  HADOOP_HOME=/usr/local/hadoop
export  HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export  HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"

6、让环境变量生效

[hadoop@]$ source /etc/profile
7、
并把相同配置添加到hadoop-env.sh文件末尾
8、再次输入hdfs命令 输入如下命令,没有报warn,说明修改成功。
[root@itlife365 ~]# su - hadoop
[hadoop@itlife365 ~]$ hadoop fs -ls /
Found 1 items
drwxr-xr-x   - hadoop supergroup          0 2017-01-09 23:00 /user

[hadoop@itlife365 ~]$
[hadoop@itlife365 ~]$ hadoop checknative -a (网上找的其他验证方式,感觉也报错我就没有处理了)
17/06/11 20:53:13 WARN bzip2.Bzip2Factory: Failed to load/initialize native-bzip2 library system-native, will use pure-Java version
17/06/11 20:53:13 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/libz.so.1
snappy:  false
lz4:     true revision:99
bzip2:   false
openssl: true /usr/lib/libcrypto.so
17/06/11 20:53:14 INFO util.ExitUtil: Exiting with status 1
[hadoop@itlife365 ~]$
hadoop-Unable-to-load-native-hadoop-library-for-your-platform
Unable to load native-hadoop library for your platform 的解决end by itlife365.com
       

Tags: , , ,