Spark:无法为平台加载 native-hadoop 库
Spark: unable to load native-hadoop library for platform
我正在尝试从 Spark 入手。我的库中有 Hadoop (3.3.1) 和 Spark (3.2.2)。我已将 SPARK_HOME、PATH、HADOOP_HOME 和 LD_LIBRARY_PATH 设置为各自的路径。我也是 运行 JDK 17(echo 和 -version 在终端中工作正常)。
然而,我仍然收到以下错误:
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
21/10/25 17:17:07 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
java.lang.IllegalAccessError: class org.apache.spark.storage.StorageUtils$ (in unnamed module @0x1f508f09) cannot access class sun.nio.ch.DirectBuffer (in module java.base) because module java.base does not export sun.nio.ch to unnamed module @0x1f508f09
at org.apache.spark.storage.StorageUtils$.<init>(StorageUtils.scala:213)
at org.apache.spark.storage.StorageUtils$.<clinit>(StorageUtils.scala)
at org.apache.spark.storage.BlockManagerMasterEndpoint.<init>(BlockManagerMasterEndpoint.scala:110)
at org.apache.spark.SparkEnv$.$anonfun$create(SparkEnv.scala:348)
at org.apache.spark.SparkEnv$.registerOrLookupEndpoint(SparkEnv.scala:287)
at org.apache.spark.SparkEnv$.create(SparkEnv.scala:336)
at org.apache.spark.SparkEnv$.createDriverEnv(SparkEnv.scala:191)
at org.apache.spark.SparkContext.createSparkEnv(SparkContext.scala:277)
at org.apache.spark.SparkContext.<init>(SparkContext.scala:460)
at org.apache.spark.SparkContext$.getOrCreate(SparkContext.scala:2690)
at org.apache.spark.sql.SparkSession$Builder.$anonfun$getOrCreate(SparkSession.scala:949)
at scala.Option.getOrElse(Option.scala:189)
at org.apache.spark.sql.SparkSession$Builder.getOrCreate(SparkSession.scala:943)
at org.apache.spark.repl.Main$.createSparkSession(Main.scala:106)
... 55 elided
<console>:14: error: not found: value spark
import spark.implicits._
^
<console>:14: error: not found: value spark
import spark.sql
^
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 3.2.0
/_/
Using Scala version 2.12.15 (OpenJDK 64-Bit Server VM, Java 17.0.1)
Type in expressions to have them evaluated.
Type :help for more information.
有什么解决办法吗?
打开您的终端并输入此命令 --> gedit .bashrc
确保在 lib 之后添加 native,如下所示
export HADOOP_OPTS = "-Djava.library.path=$HADOOP_HOME/lib/native"
和保存文件并在终端中输入此命令source ~/.bashrc
试试这个可能对你有帮助。
Java 17 不受支持 - Spark 在 Java 8/11 上运行(来源:https://spark.apache.org/docs/latest/)。
所以安装 Java 11 并将 Spark 指向它。
警告 unable to load native-hadoop library for platform
很常见,并不意味着有任何问题。
如果您在 Mac 上并通过 brew 安装了 openjdk@11,它会给您一些警告并告诉您该怎么做。
在执行以下步骤之前,我一直面临同样的问题:
为了让系统 Java 包装器找到这个 JDK,将它与
进行符号链接
sudo ln -sfn /usr/local/opt/openjdk@11/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-11.jdk
如果您需要在 PATH 中首先安装 openjdk@11,运行:
echo 'export PATH="/usr/local/opt/openjdk@11/bin:$PATH"' >> ~/.zshrc
要让编译器找到 openjdk@11,您可能需要设置:
export CPPFLAGS="-I/usr/local/opt/openjdk@11/include"
我正在尝试从 Spark 入手。我的库中有 Hadoop (3.3.1) 和 Spark (3.2.2)。我已将 SPARK_HOME、PATH、HADOOP_HOME 和 LD_LIBRARY_PATH 设置为各自的路径。我也是 运行 JDK 17(echo 和 -version 在终端中工作正常)。
然而,我仍然收到以下错误:
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
21/10/25 17:17:07 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
java.lang.IllegalAccessError: class org.apache.spark.storage.StorageUtils$ (in unnamed module @0x1f508f09) cannot access class sun.nio.ch.DirectBuffer (in module java.base) because module java.base does not export sun.nio.ch to unnamed module @0x1f508f09
at org.apache.spark.storage.StorageUtils$.<init>(StorageUtils.scala:213)
at org.apache.spark.storage.StorageUtils$.<clinit>(StorageUtils.scala)
at org.apache.spark.storage.BlockManagerMasterEndpoint.<init>(BlockManagerMasterEndpoint.scala:110)
at org.apache.spark.SparkEnv$.$anonfun$create(SparkEnv.scala:348)
at org.apache.spark.SparkEnv$.registerOrLookupEndpoint(SparkEnv.scala:287)
at org.apache.spark.SparkEnv$.create(SparkEnv.scala:336)
at org.apache.spark.SparkEnv$.createDriverEnv(SparkEnv.scala:191)
at org.apache.spark.SparkContext.createSparkEnv(SparkContext.scala:277)
at org.apache.spark.SparkContext.<init>(SparkContext.scala:460)
at org.apache.spark.SparkContext$.getOrCreate(SparkContext.scala:2690)
at org.apache.spark.sql.SparkSession$Builder.$anonfun$getOrCreate(SparkSession.scala:949)
at scala.Option.getOrElse(Option.scala:189)
at org.apache.spark.sql.SparkSession$Builder.getOrCreate(SparkSession.scala:943)
at org.apache.spark.repl.Main$.createSparkSession(Main.scala:106)
... 55 elided
<console>:14: error: not found: value spark
import spark.implicits._
^
<console>:14: error: not found: value spark
import spark.sql
^
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 3.2.0
/_/
Using Scala version 2.12.15 (OpenJDK 64-Bit Server VM, Java 17.0.1)
Type in expressions to have them evaluated.
Type :help for more information.
有什么解决办法吗?
打开您的终端并输入此命令 --> gedit .bashrc
确保在 lib 之后添加 native,如下所示
export HADOOP_OPTS = "-Djava.library.path=$HADOOP_HOME/lib/native"
和保存文件并在终端中输入此命令source ~/.bashrc
试试这个可能对你有帮助。
Java 17 不受支持 - Spark 在 Java 8/11 上运行(来源:https://spark.apache.org/docs/latest/)。
所以安装 Java 11 并将 Spark 指向它。
警告 unable to load native-hadoop library for platform
很常见,并不意味着有任何问题。
如果您在 Mac 上并通过 brew 安装了 openjdk@11,它会给您一些警告并告诉您该怎么做。 在执行以下步骤之前,我一直面临同样的问题:
为了让系统 Java 包装器找到这个 JDK,将它与
进行符号链接sudo ln -sfn /usr/local/opt/openjdk@11/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-11.jdk
如果您需要在 PATH 中首先安装 openjdk@11,运行:
echo 'export PATH="/usr/local/opt/openjdk@11/bin:$PATH"' >> ~/.zshrc
要让编译器找到 openjdk@11,您可能需要设置:
export CPPFLAGS="-I/usr/local/opt/openjdk@11/include"