首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在我的Mac上,Hadoop3.1.0找到了它的本地库,但是spark 2.3.1没有

在我的Mac上,Hadoop3.1.0找到了它的本地库,但是spark 2.3.1没有
EN

Stack Overflow用户
提问于 2018-07-15 14:45:17
回答 1查看 1.4K关注 0票数 2

Intro

我知道在99%的情况下,这个错误信息的答案是:

代码语言:javascript
运行
复制
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给出了以下内容:

代码语言:javascript
运行
复制
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

这里有一些错误,这可能是原因,但最重要的是,就目前而言,这一行是存在的:

代码语言:javascript
运行
复制
hadoop:  true /usr/local/Cellar/hadoop/3.1.0/lib/native/libhadoop.dylib

当我启动hadoop集群时,如下所示:

代码语言:javascript
运行
复制
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。

然而,没有找到本机库

这就是我运行火星雨时的样子:

代码语言:javascript
运行
复制
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
      /_/

这就是我们的老朋友重现的地方:

代码语言:javascript
运行
复制
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文件夹中。

至于变量,这是我的~/.概要文件

代码语言:javascript
运行
复制
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的补充:

代码语言:javascript
运行
复制
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

我最近有个发现。这个经典错误消息的标准版本如下所示:

代码语言:javascript
运行
复制
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时删除警告。

EN

回答 1

Stack Overflow用户

发布于 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本机库。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51349471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档