Hadoop异常解决:Unable to load native-hadoop library
问题
使用Hadoop时,每次起NameNode,DataNode,或者使用命令hadoop fs -ls
的时候,都会出现如下提示
WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
怎么修呢?
分析
查看网上文章,比较靠谱的说法是“hadoop不能加载本地库”。
不能加载的原因主要有两种:
- Linux机器是32位的,Hadoop安装包是64位的,不兼容,需要自己打包源码。
- 运行的参数
HADOOP_OPTS
没有正确设置,所以找不到目录文件。
一个一个来:
方案1
首先,我使用命令uname -i
查看本机的配置,发现是64位的。第一个猜想不成立。
x86_64
参考 -> 5 ways to check if your Linux OS is 64-bit or 32-bit https://www.faqforge.com/linux/5-ways-check-linux-os-64-bit-32-bit/
方案2
其次,我配置了HADOOP_OPTS
并重试,还是不行。第二个方案也失败了。
/etc/hadoop/hadoop-env.sh
vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh
->
export HADOOP_OPTS="-Djava.library.path=${HADOOP_HOME}/lib/native"
参考 -> hadoop报错 https://blog.csdn.net/weixin_38256474/article/details/94440838
解决
多想一步,既然我们让Hadoop去这个/lib/native
目录下查找类库,那么这个目录下到底有些什么东西呢?
cd
过去一看,空空如也!
所以即使我们配置对了路径,还是什么都没有找到。
我使用的是这个版本,hadoop-2.6.0-cdh5.15.1
。去官网重下了一个,解压缩发现还是空的。
于是换了一个不是CDH的版本:hadoop-2.7.7
,下载解压缩,然后把/lib/native
下的东西拷贝到原来的系统中。
-rw-r--r-- 1 root root 1492202 Oct 30 10:59 libhadoop.a
-rw-r--r-- 1 root root 1632624 Oct 30 10:59 libhadooppipes.a
-rwxr-xr-x 1 root root 864841 Oct 30 10:59 libhadoop.so
-rwxr-xr-x 1 root root 864841 Oct 30 10:59 libhadoop.so.1.0.0
-rw-r--r-- 1 root root 476154 Oct 30 10:59 libhadooputils.a
-rw-r--r-- 1 root root 446100 Oct 30 10:59 libhdfs.a
-rwxr-xr-x 1 root root 281340 Oct 30 10:59 libhdfs.so
-rwxr-xr-x 1 root root 281340 Oct 30 10:59 libhdfs.so.0.0.0
可以正常使用了。
总结
遇到问题,结合前人经验,融合自己的思考,关键时刻要多想一步!
分类:
【Big Data大数据】
标签:
Hadoop
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现