热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Hadoop彻底解决警告:WARNutil.NativeCodeLoader:Unabletoloadnativehadooplibraryforyourplatform...

在macOSBigSur系统安装的Hadoop3.2.1集群,通过客户端操作HDFS中的文件,命令行中总是会有这样的警告:WARNutil.NativeCode

在 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。

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

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

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

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

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

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

img src="" /

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

来看看它确实起作用了:

当然了,这个方法治标不治本,最终还是没有成功加载到 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_HOME}/lib/native 中(删除原来的所有文件)。

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

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

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

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

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

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

作者:

出处:

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

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


推荐阅读
  • Hadoop平台警告解决:无法加载本机Hadoop库的全面应对方案
    本文探讨了在Hadoop平台上遇到“无法加载本机Hadoop库”警告的多种解决方案。首先,通过修改日志配置文件来忽略该警告,这一方法被证明是有效的。其次,尝试指定本地库的路径,但未能解决问题。接着,尝试不使用Hadoop本地库,同样没有效果。然后,通过替换现有的Hadoop本地库,成功解决了问题。最后,根据Hadoop的源代码自行编译本地库,也达到了预期的效果。以上方法适用于macOS系统。 ... [详细]
  • Bootstrap 插件使用指南
    本文详细介绍了如何在 Web 前端开发中使用 Bootstrap 插件,包括自动触发插件的方法、插件的引用方式以及具体的实例。 ... [详细]
  • 优化Vite 1.0至2.0升级过程中遇到的某些代码块过大问题解决方案
    本文详细探讨了在将项目从 Vite 1.0 升级到 2.0 的过程中,如何解决某些代码块过大的问题。通过具体的编码示例,文章提供了全面的解决方案,帮助开发者有效优化打包性能。 ... [详细]
  • centos 7.0 lnmp成功安装过程(很乱)
    下载nginx[rootlocalhostsrc]#wgethttp:nginx.orgdownloadnginx-1.7.9.tar.gz--2015-01-2412:55:2 ... [详细]
  • 本文探讨了 TypeScript 中泛型的重要性和应用场景,通过多个实例详细解析了泛型如何提升代码的复用性和类型安全性。 ... [详细]
  • 本文详细介绍了 Java 网站开发的相关资源和步骤,包括常用网站、开发环境和框架选择。 ... [详细]
  • EST:西湖大学鞠峰组污水厂病原菌与土著反硝化细菌是多重抗生素耐药基因的活跃表达者...
    点击蓝字关注我们编译:祝新宇校稿:鞠峰、袁凌论文ID原名:PathogenicandIndigenousDenitrifyingBacte ... [详细]
  • 本文介绍了如何使用Flume从Linux文件系统收集日志并存储到HDFS,然后通过MapReduce清洗数据,使用Hive进行数据分析,并最终通过Sqoop将结果导出到MySQL数据库。 ... [详细]
  • 近期,微信公众平台上的HTML5游戏引起了广泛讨论,预示着HTML5游戏将迎来新的发展机遇。磊友科技的赵霏,作为一名HTML5技术的倡导者,分享了他在微信平台上开发HTML5游戏的经验和见解。 ... [详细]
  • 本文回顾了作者初次接触Unicode编码时的经历,并详细探讨了ASCII、ANSI、GB2312、UNICODE以及UTF-8和UTF-16编码的区别和应用场景。通过实例分析,帮助读者更好地理解和使用这些编码。 ... [详细]
  • 为了在Hadoop 2.7.2中实现对Snappy压缩和解压功能的原生支持,本文详细介绍了如何重新编译Hadoop源代码,并优化其Native编译过程。通过这一优化,可以显著提升数据处理的效率和性能。此外,还探讨了编译过程中可能遇到的问题及其解决方案,为用户提供了一套完整的操作指南。 ... [详细]
  • V8不仅是一款著名的八缸发动机,广泛应用于道奇Charger、宾利Continental GT和BossHoss摩托车中。自2008年以来,作为Chromium项目的一部分,V8 JavaScript引擎在性能优化和技术创新方面取得了显著进展。该引擎通过先进的编译技术和高效的垃圾回收机制,显著提升了JavaScript的执行效率,为现代Web应用提供了强大的支持。持续的优化和创新使得V8在处理复杂计算和大规模数据时表现更加出色,成为众多开发者和企业的首选。 ... [详细]
  • 阿里云服务器搭建详解——Ubuntu
    由于自己电脑配置跟不上,双系统一开,整个电脑就会变得非常卡顿,所以决定在阿里云买一个云服务器。听朋友说,学生买的话是非常便宜 ... [详细]
  • 兆芯X86 CPU架构的演进与现状(国产CPU系列)
    本文详细介绍了兆芯X86 CPU架构的发展历程,从公司成立背景到关键技术授权,再到具体芯片架构的演进,全面解析了兆芯在国产CPU领域的贡献与挑战。 ... [详细]
  • Webpack 初探:Import 和 Require 的使用
    本文介绍了 Webpack 中 Import 和 Require 的基本概念和使用方法,帮助读者更好地理解和应用模块化开发。 ... [详细]
author-avatar
是非涩味_943
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有