【发布时间】:2018-12-23 06:31:50
【问题描述】:
简介
我知道 99% 的情况下此错误消息的答案:
WARN NativeCodeLoader:60 - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
只是“这只是一个警告,不要担心”,然后有时是“只需下载库,编译它们并将 HADOOP_HOME 指向此文件夹并将 $HADOOP_HOME/bin/native 添加到您的 LD_LIBRARY_PATH”
这就是我所做的,但我仍然收到错误,经过两天的谷歌搜索后,我开始觉得如果我设法解决这个问题,我会发现一些非常有趣的东西,目前我有一个奇怪的行为不明白,希望我们能一起解决这个问题。
好的,接下来就是:
Hadoop 找到本机库
运行 hadoop checknative -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 时的警告。
但是,spark 找不到本机库
这是我运行 pyspark 时的样子:
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 安装。
澄清
我从他们的网站“使用用户提供的 Apache Hadoop 进行预构建”下载了 apache-spark 的非 Hadoop 版本。然后将其放入我的地窖文件夹中,只是因为我不想重新链接所有内容。
至于变量,这是我的~/.profile
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"
这是我对 spark-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/Cellar/hadoop/3.1.0/lib/native 的外观:
问题
hadoop 是如何在本地启动而不发出缺少库的警告的,并且通过 checknatives -a 命令显示它找到了本机库,但是当通过 pyspark 启动相同的 hadoop 时,我突然再次发出此警告?
16/7 更新
我最近有了一个发现。此经典错误消息的标准版本如下所示:
WARN NativeCodeLoader:62 - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
这实际上是不同的,因为我的错误消息改为 NativeCodeLoader:60,用 60 而不是 62。这表明我的理论并不是真的缺少 hadoop 库,而是缺少一些 hadoop 正在使用的本机库.这就是为什么 hadoop 可以在没有警告的情况下启动,但 pyspark 可能会尝试使用来自 hadoop 的更多本机库,但会在启动时出现警告。
这仍然只是一个理论,直到我从 checknative 中删除所有警告 - 一个我不知道的调用。
15/7 更新
目前正在尝试从 hadoop checknative -a 中删除“WARN bzip2.Bzip2Factory:”-warning,也许这可能会在启动 pyspark 时删除警告。
【问题讨论】:
-
顺便说一句,您将覆盖
SPARK_DIST_CLASSPATH三次。你是如何安装 Spark 的? -
谢谢!看来我复制粘贴的太快了。仅保留 export SPARK_DIST_CLASSPATH=$(hadoop classpath) 删除了启动 spark 时的所有警告,但原始警告除外。我将使用新文件更新原始问题并触发启动输出。
-
您能否显示
/usr/local/Cellar/hadoop/3.1.0/lib/native的目录内容的输出? -
是的,更新原始问题,一秒钟
-
更新截图
标签: macos apache-spark hadoop pyspark warnings