pyspark从数据源创建表报错:org.apache.hadoop.io.nativeio.NativeIO$POSIX.stat

在cmd中运行pyspark或spark-sql,从csv数据源创建表均报以下错误:

java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$POSIX.stat(Ljava/lang/String;)Lorg/apache/hadoop/io/nativeio/NativeIO$POSIX$Stat;

经过排查是Spark环境的相关依赖之间版本不匹配出现的问题,又将Spark环境的相关依赖重新排查了下,这里梳理下整个环境搭建的过程。

Spark环境搭建

运行环境

  • windows 11
  • Spark 3.4.4
  • Hadoop 3.3.6
  • Java JDK 1.8

运行Spark需要Java JDK,并配置好JAVA_HOME变量。此外,Spark会用到HDFS和YARN,因此需要安装Hadoop。

安装Java JDK

地址:Java Downloads | Oracle

安装后,需要配置环境变量JAVA_HOME,并添加bin目录到环境变量。

安装Hadoop

地址:Apache Hadoop

下载对应的版本后,先不要用解压软件解压,会提示报错:

Can not create symbolic link : 客户端没有所需的特权

可以使用管理员运行cmd,在Hadoop下载目录下执行:

tar zxvf hadoop-3.3.6.tar.gz

解压完毕后,设置系统变量HADOOP_HOME,并添加bin目录到环境变量。

安装winutils

winutils是由社区开发的工具,其模拟了Hadoop在Unix系统中的一些环境和命令,解决了Windows和Hadoop的兼容性问题。

因此winutils是Hadoop在Windows上安装和使用的前提条件,如果没有winutils,在Windows上使用Hadoop可能会遇到未知的问题。

地址:https://github.com/cdarlint/winutils/tree/master

下载项目文件到本地,选择对应hadoop版本中的bin目录下的hadoop.dll和winutils.exe文件拷贝到 C:\Windows\System32目录中。

安装Spark

地址:Downloads | Apache Spark

下载解压到对应目录,然后添加环境变量:

  • PYSPARK_PYTHON:路径为本地python.exe的相关路径
  • SPARK_HOME:为Spark的解压目录

并添加Spark的bin目录到环境变量中。

解决 PySpark 中 `org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z` 报错可参考以下方法: 1. **检查 JDK 版本**:确认 JDK 为 64 位,若不是 64 位,hadoop.dll 无法在 32 位的 JDK 环境下运行,需要安装 64 位的 JDK 并重新配置环境变量,同时将编辑器的环境变量改成当前的 JDK,最后删除 32 位的 JDK 环境,避免编辑器不能主动加载 64 位的环境[^1]。 2. **手动加载 hadoop.dll**:在代码中手动加载 hadoop.dll 并指定 hadoop 目录,示例代码如下: ```java static { try { // 设置 HADOOP_HOME 目录 System.setProperty("hadoop.home.dir", "D:/DevelopTools/hadoop-2.9.2/"); // 加载库文件 System.load("D:/DevelopTools/hadoop-2.9.2/bin/hadoop.dll"); } catch (UnsatisfiedLinkError e) { System.err.println("Native code library failed to load.\n" + e); System.exit(1); } } ``` 虽然这是 Java 代码,但在 PySpark 中使用 Java 相关的 Hadoop 库时原理相通,可以参考这种手动加载的思路来解决问题[^2]。 3. **检查环境变量配置**:检查 hadoop 和 JDK 的环境变量是否配置成功。可通过 cmd 打开命令提示符,分别输入 `hadoop version` 和 `java -version`,若出现 hadoopJava 的版本号则示环境变量配置成功;若未成功,可参考相关链接进行配置,hadoop 环境变量配置链接为 hadoop 的环境变量配置 - 优快云 博客,Java 环境变量配置链接为 Java 开发环境配置 | 菜鸟教程 [^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值