Intro
我知道在99%的情况下,这个错误信息的答案是:
WARN NativeCodeLoader:60 - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
简单地说就是“这只是一个警告,不要担心”,然后有时“只需下载库,编译它们并将HADOOP_HOME指向这个文件夹并将$HADOOP_HOME/bin/本机添加到您的LD_LIBRARY_PATH中”。
这就是我所做的,但我仍然在接受错误,在谷歌搜索了两天之后,我开始觉得如果我能解决这个问题,我会发现一些非常有趣的东西,目前有一种奇怪的行为,我不明白,希望我们能一起解决。
好吧,这是怎么回事
Hadoop查找本机库
运行hadoop检查-a给出了以下内容:
dds-MacBook-Pro-2:~ Rkey$ hadoop checknative -a
2018-07-15 16:18:25,956 WARN bzip2.Bzip2Factory: Failed to load/initialize native-bzip2 library system-native, will use pure-Java version
2018-07-15 16:18:25,959 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib library
2018-07-15 16:18:25,963 WARN erasurecode.ErasureCodeNative: ISA-L support is not available in your platform... using builtin-java codec where applicable
Native library checking:
hadoop: true /usr/local/Cellar/hadoop/3.1.0/lib/native/libhadoop.dylib
zlib: true /usr/lib/libz.1.dylib
zstd : false
snappy: true /usr/local/lib/libsnappy.1.dylib
lz4: true revision:10301
bzip2: false
openssl: false build does not support openssl.
ISA-L: false libhadoop was built without ISA-L support
2018-07-15 16:18:25,986 INFO util.ExitUtil: Exiting with status 1: ExitException
这里有一些错误,这可能是原因,但最重要的是,就目前而言,这一行是存在的:
hadoop: true /usr/local/Cellar/hadoop/3.1.0/lib/native/libhadoop.dylib
当我启动hadoop集群时,如下所示:
dds-MacBook-Pro-2:~ Rkey$ hstart
Starting namenodes on [localhost]
Starting datanodes
Starting secondary namenodes [dds-MacBook-Pro-2.local]
Starting resourcemanager
Starting nodemanagers
没有警告。我下载了hadoop源代码并自己构建了它。在此之前,在启动hadoop时“无法找到本机库”的-warnings。
然而,没有找到本机库。
这就是我运行火星雨时的样子:
dds-MacBook-Pro-2:~ Rkey$ pyspark
Python 3.7.0 (default, Jun 29 2018, 20:13:53)
[Clang 8.0.0 (clang-800.0.42.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
2018-07-15 16:22:22 WARN NativeCodeLoader:60 - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/__ / .__/\_,_/_/ /_/\_\ version 2.3.1
/_/
这就是我们的老朋友重现的地方:
WARN NativeCodeLoader:60 - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
我觉得这很奇怪,因为我知道它使用相同的hadoop,我可以在没有任何警告的情况下自己开始。我的计算机上没有其他hadoop安装。
Clarifications
我从他们的网站下载了非Hadoop版本的apache-spark,名为“使用用户提供的Apache Hadoop进行预构建”。然后,因为我不想重新链接所有的东西,就把它放到了我的Cellar文件夹中。
至于变量,这是我的~/.概要文件
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_172.jdk/Contents/Home
export OPENSSL_ROOT_DIR=/usr/local/Cellar/openssl/1.0.2o_2
export PYSPARK_PYTHON=python3
export PYSPARK_DRIVER_PYTHON=python3
export HADOOP_HOME=/usr/local/Cellar/hadoop/3.1.0
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export SPARK_HOME=/usr/local/spark
export PATH=$SPARK_HOME/bin:$PATH
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native
alias hstart="$HADOOP_HOME/sbin/start-dfs.sh;$HADOOP_HOME/sbin/start-yarn.sh"
alias hstop="$HADOOP_HOME/sbin/stop-dfs.sh;$HADOOP_HOME/sbin/stop-yarn.sh"
下面是我对火花-env.sh的补充:
export SPARK_DIST_CLASSPATH=$(hadoop classpath)
export LD_LIBRARY_PATH=/usr/local/Cellar/hadoop/3.1.0/lib/native/:$LD_LIBRARY_PATH
以下是/usr/local/c业力/hadoop/3.1.0/lib/本机文件夹的外观:
问题
为什么hadoop可以在本地启动,而不给出它缺少库的警告,并通过检查-a命令显示它找到了本机库,但是当相同的hadoop通过吡火花启动时,我突然又收到了这个警告。
更新16/7
我最近有个发现。这个经典错误消息的标准版本如下所示:
WARN NativeCodeLoader:62 - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
这实际上是不同的,因为我的错误消息说NativeCodeLoader: 60,而不是62。这说明我的理论并不是缺少hadoop库,而是缺少hadoop正在使用的一些本地库。这就是为什么hadoop可以在没有警告的情况下启动的原因,但是有可能尝试使用hadoop中更多本机库的pyspark会发出警告。
这仍然只是一个理论,直到我从检查的-a调用中删除所有警告之前,我都不知道。
更新15/7
目前正在尝试从hadoop签入的-warning中删除“Warnbzip2.Bzip2Factory:”,这可能会在启动pyspark时删除警告。
发布于 2019-12-28 23:15:03
我和你有同样的问题。在我的例子中,这是因为在macOS X El Capitan中,macOS中的SIP机制使操作系统忽略了LD_ library _PATH/DYLD_LIBRARY_PATH,尽管您已经将Hadoop本机库添加到这些变量的值中(我从https://help.mulesoft.com/s/article/Variables-LD-LIBRARY-PATH-DYLD-LIBRARY-PATH-are-ignored-on-MAC-OS-if-System-Integrity-Protect-SIP-is-enable获得了这些信息)。
实际上,火花的NativeCodeLoader警告是可以忽略的。但是,如果您真的想让警告消失,您可以在macOS X上禁用SIP,然后确保将$HADOOP/lib/本机添加到LD_LIBRARY_PATH中。然后,spark可以正确地找到Hadoop本机库。
https://stackoverflow.com/questions/51349471
复制相似问题