如何在Ubuntu上修复Hadoop警告:发生了非法反射访问操作的错误

21

我已经成功地安装了Java openjdk版本 "10.0.2"Hadoop 2.9.0,所有进程都运行良好。

hadoopusr@amalendu:~$ jps
19888 NameNode
20388 DataNode
20898 NodeManager
20343 SecondaryNameNode
20539 ResourceManager
21118 Jps

但是当我尝试执行任何命令,比如 hdfs dfs -ls /,都会收到这些警告

hadoopusr@amalendu:~$ hdfs dfs -ls /
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.apache.hadoop.security.authentication.util.KerberosUtil (file:/usr/local/hadoop/share/hadoop/common/lib/hadoop-auth-2.9.0.jar) to method sun.security.krb5.Config.getInstance()
WARNING: Please consider reporting this to the maintainers of org.apache.hadoop.security.authentication.util.KerberosUtil
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
18/09/04 00:29:24 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

请帮忙解决这个问题。 这是我的~/.bashrc文件的配置

export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"

4
请使用Java 8来运行Hadoop。目前,Spark、Scala等工具还不支持Java 9或更新版本的Java。 - John Hanley
你的数据节点已关闭。 - HbnKing
@H.king 是的,我已经修复了。 - Amalendu Kar
3个回答

17

这些警告与jigsaw项目和更强的封装相关,您无法对其做任何事情。

基本上,有一个名为sun.security.krb5.Config的类,它是java.security.jgss模块的一部分。该模块“定义”了它导出的内容(其他人可以使用的内容)以及给谁使用。换句话说,这并不是面向公众的 - 不要触碰它;但是hadoop已经这样做了,这是他们解决此问题的一部分。您可以报告此问题或尝试升级hadoop,也许已经修复了此问题。


1
谢谢,但有没有什么方法可以隐藏这些警告? - Amalendu Kar
3
先生,我卸载了Java 11并安装了Java 8,所有内容都被删除了,但是出现了“WARN util.NativeCodeLoader:Unable to load native-hadoop library for your platform... using builtin-java classes where applicable”这个警告信息。 - Amalendu Kar
1
@AmalenduKar 这是完全不同的问题,你应该发布一个不同的问题来询问它。 - Eugene
2
@AmalenduKar 这个消息的意思是Hadoop本地库是编译为32位,而你正在64位的设置上运行。对于小型Hadoop设置,你可以忽略这个消息。 - John Hanley
3
您可以使用--add-opens选项临时打开sun.security.krb5包。这将消除警告,但重要的是确保Hadoop维护者意识到此问题。一旦JDK内部完全封装,像这样的hack就会失效。 - Alan Bateman
显示剩余2条评论

5

4

这个问题是由于最近的Java升级引起的。请使用Java 8进行配置,它可以更加流畅地工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接