在 macOS Big Sur 系统安装的 Hadoop 3.2.1 集群,通过客户端操作 HDFS 中的文件,命令行中总是会有这样的警告:

WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

这个警告是说,Hadoop 没有成功加载你电脑的本地库,所以使用了内置的 Java 类库。

本地库的作用:提升一些操作的性能(Java 不够快),并且弥补 Java 类库的不足,Hadoop 为某些组件提供了自己的本地实现,保存在一个独立的动态链接的库里,在 类 Uinux 平台上名为 libhadoop.so

不能使用本地库的影响:部分压缩算法不能使用。查看本地库的支持情况,请参考下面的链接:

HDFS 02 - macOS 系统安装 HDFS - 1 准备安装包

既然是 WARN,说明它不会影响正常的读写,但是强迫症患者表示,总是看到这玩意,让人抓狂。

今天就来写写怎么彻底解决掉它!

1 - 在日志配置文件中忽略警告 - 有效

找到 Hadoop 的安装配置路径,然后编辑日志配置:

cd ${HADOOP_HOME}
vim etc/hadoop/log4j.properties
# 在文件最后面追加:
log4j.logger.org.apache.hadoop.util.NativeCodeLoader=ERROR

<img src="https://img2020.cnblogs.com/blog/1438655/202106/1438655-20210627115337494-50680247.png" width=50%" />

意思是,对于 org.apache.hadoop.util.NativeCodeLoader 类的日志,只打印 ERROR 及以上级别,那么 ERROR 级别之下的,比如 DEBUGINFOWARN 等,都会被忽略。

来看看它确实起作用了:

当然了,这个方法治标不治本,最终还是没有成功加载到 native-hadoop library

2 - 指定本地库的路径 - 无效

先把上面对日志配置文件的修改,还原回去。

我们来看看这个告警到底是什么幺蛾子。

1)增加日志调试信息:

# 只在当前终端(命令行)有效,新打开的终端无效:
export HADOOP_ROOT_LOGGER=DEBUG,console

再执行 HDFS 命令,我们会看到这个:

2021-06-27 14:41:33,165 DEBUG util.NativeCodeLoader: Trying to load the custom-built native-hadoop library...
2021-06-27 14:41:33,166 DEBUG util.NativeCodeLoader: Failed to load native-hadoop with error: java.lang.UnsatisfiedLinkError: no hadoop in java.library.path
2021-06-27 14:41:33,166 DEBUG util.NativeCodeLoader: java.library.path=/Users/healchow/bigdata/hadoop-3.2.1/lib
2021-06-27 14:41:33,166 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
2021-06-27 14:41:33,166 DEBUG util.PerformanceAdvisory: Falling back to shell based

Hadoop 到这里查找 native-hadoop:/Users/healchow/bigdata/hadoop-3.2.1/lib,准确的应该是 /Users/healchow/bigdata/hadoop-3.2.1/lib/native

2)修改 hadoop-env.sh 指定本地库路径:

# 向 etc/hadoop/hadoop-env.sh 文件大约95行,添加下面2行配置:
export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_HOME}/lib/native
export HADOOP_OPTS="-Djava.library.path=${HADOOP_HOME}/lib/native"

保存后,重启 HDFS,然后再次执行 HDFS 命令,发现依旧报错:

2021-06-27 14:46:15,746 DEBUG util.NativeCodeLoader: Failed to load native-hadoop with error: java.lang.UnsatisfiedLinkError: no hadoop in java.library.path
2021-06-27 14:46:15,746 DEBUG util.NativeCodeLoader: java.library.path=/Users/healchow/bigdata/hadoop-3.2.1/lib/native
2021-06-27 14:46:15,746 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

经过各种搜索验证,猜测是由于下载的安装包中,本地库是通过 32 位机器编译而来,在64位机器上不能运行。

3 - 不使用 Hadoop 本地库 - 无效

保留上一步的修改。在 Hadoop 的配置文件 core-site.xml 中禁用本地库 —— 默认开启并使用:

    <property>
<name>hadoop.native.lib</name>
<value>false</value>
<description>Should native hadoop libraries, if present, be used.</description>
</property>

重启 NameNode 再试,在 macOS Big Sur 中,Hadoop 版本为 3.2.1,发现警告依旧存在 继续找其他方法。

4 - 替换 Hadoop 本地库 - 有效

修改 core-site.xml,重新启用本地库。

然后,从 hadoop-native-macos 下载对应版本的本地库,替换到本地 ${HADOOP_HOME}/lib/native 中(删除原来的所有文件)。

不用重启 Hadoop 集群,即可验证警告消失(Hadoop-3.2.1 为例):

查看 Hadoop 支持的本地库信息:

其中报错是因为本地没有 snappy 压缩相关的库,暂时忽略。

5 - 根据源码,编译本地库 - 有效

编译过程,参考 ,编译完成后,拷贝。。。到。。。

然后重启 HDFS,快看!告警终于消失了


版权声明

作者:瘦风(https://healchow.com)

出处:博客园-瘦风的南墙(https://www.cnblogs.com/shoufeng)

感谢阅读,公众号 「瘦风的南墙」 ,手机端阅读更佳,还有其他福利和心得输出,欢迎扫码关注

本文版权归博主所有,欢迎转载,但 [必须在页面明显位置标明原文链接],否则博主保留追究相关人士法律责任的权利。

Hadoop - 彻底解决警告:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform...的更多相关文章

  1. Hadoop _ 疑难杂症 解决1 - WARN util.NativeCodeLoader: Unable to load native-hadoop library for your plat

    最近博主在进行Hive测试 压缩解压缩的时候 遇到了这个问题, 该问题也常出现在日常 hdfs 指令中, 在启动服务 与 hdfs dfs 执行指令的时候 : 都会显示该提示,下面描述下该问题应该如何 ...

  2. 解决讨厌的警告 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

    问题: 执行任何hadoop命令,都会提示如下WARN.虽然影响不大,但是每次运行一个命令都有这么个WARN,让人很不爽,作为一个精致的男人, 必须要干掉它. [root@master logs]# ...

  3. Hadoop出现错误:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable,解决方案

    安装Hadoop的时候直接用的bin版本,根据教程安装好之后运行的时候发现出现了:WARN util.NativeCodeLoader: Unable to load native-hadoop li ...

  4. HADOOP:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable终于解决了

    WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin- ...

  5. Hadoop集群“WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable”解决办法

    Hadoop集群部署完成后,经常会提示 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platfo ...

  6. hadoop命令运行,去除:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform 警告

    参照:Hadoop之—— WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... 修 ...

  7. Hadoop问题解决:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

    在配置好hadoop的环境之后,命令启动./start-all.sh发现经常出现这样的一个警告: WARN util.NativeCodeLoader: Unable to load native-h ...

  8. [hadoop] WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

    hadoop 启动后,有警告信息: WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform ...

  9. Hadoop安装—— WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platf

    今天在安装hadoop完成测试创建用户目录失败在网上找到了原因记录一下原文地址 http://blog.csdn.net/l1028386804/article/details/51538611 配置 ...

随机推荐

  1. .Net Core——用代码写代码?

    想要用代码写代码,肯定是绕不开反射的.反射的概念相比都不陌生,只是应用多少就因人而异,今天分享一个代码生成器的思路,仅供参考,不要过分依赖哦. 思路分析 众所周知,利用反射可以在程序运行时获取到任一对 ...

  2. makefile的include用法

    include 使用方法 : include filename.mk 作用: 暂停当前的makefile执行,去执行指定的makefile,执行完毕后继续执行当前的makefile -include ...

  3. [OS] 汇编语言

    操作系统 每个进程拥有一片连续的内存空间(地址空间),空间中的每个字节都可以用一个32位无符号整数定位,每个字节的位置称为地址 CPU 32位:能够处理的数据最大为32bit,地址空间2^32< ...

  4. HTML中的全局属性

    一.全局属性和局部属性 每种元素都有自己规定的属性,这种属性成为局部属性.还有另外一种属性,他可以用来配置所有元素的共有行为,这种属性成为称为全局属性.全局属性可以用在任何一个元素身上,但是不一定会带 ...

  5. 中间件系列一 RabbitMQ之安装和Hello World Demo

    https://blog.csdn.net/hry2015/article/details/79016854 1. 概述 RabbitMQ是一个由erlang开发的AMQP(Advanced Mess ...

  6. http://www.loongnix.org/index.php/Lbrowser

    http://www.loongnix.org/index.php/Lbrowser 浏览器是桌面应用的核心API软件,龙芯中科早在2011年就开始组建浏览器研发团队开展基于gecko.blink等内 ...

  7. elasticksearch分词,导致kibana的url出现问题

    在Kibana的展示页面中,我们点击Table的左侧栏,发现Elasticsearch中的数据在展示中是正确的数据,比如:agent中www.baidu.com/test,该界面中会正确的显示为www ...

  8. 回车与换行的区别:CRLF、CR、LF

    引言 以下是 MySQL 8 导出数据的窗口,导出数据时需要选择记录分隔符,这就需要你明白 CRLF.CR 和 LF 分别代表什么,有何区别,否则可能导出数据会出现莫名其米的问题. 名词解释 CR:C ...

  9. Socket编程——(转载)

    我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠so ...

  10. C语言编程 菜鸟练习100题(51-60)

    [练习51]矩阵转置 0. 题目: 矩阵的转置 1. 分析: 练习使用 for 循环嵌套,多维数组的表达. 2. 程序: #include <stdio.h> int main() { i ...