由于某些功能,我想使用特定版本的Hadoop(比如hadoop-aws 2.8.5)在本地运行PySpark作业。
PySpark版本似乎与Spark版本保持一致。
在这里,我使用PySpark 2.4.5,它似乎包装了Spark 2.4.5。
在使用spark-submit --local[4] ...
和--conf spark.jars.packages=org.apache.hadoop:hadoop-aws:2.8.5
选项提交我的PySpark作业时,遇到以下错误:py4j.protocol.Py4JJavaError: An error occurred while calling o32.sql
除以下Java异常外:
java.lang.NoClassDefFoundError: org/apache/hadoop/fs/StorageStatistics
要么:
java.lang.IllegalAccessError: tried to access method org.apache.hadoop.metrics2.lib.MutableCounterLong.<init (Lorg/apache/hadoop/metrics2/MetricsInfo;J)V from class org.apache.hadoop.fs.s3a.S3AInstrumentation
我想Pyspark Job Hadoop版本与我传递给
spark-submit
选项spark.jars.packages
的版本不一致。但是我不知道如何使它工作? :)
最佳答案
默认的spark disto包含hadoop库。首先使用Spark使用系统(自己的)库。因此,您应该设置--conf spark.driver.userClassPathFirst=true
并为集群添加--conf spark.executor.userClassPathFirst=true
或下载没有hadoop的spark发行版。可能您必须将您的hadoop发行版放到spark disto jars目录中。
关于apache-spark - 有没有办法在Hadoop 2.8+中使用PySpark?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60787243/