有没有一种方法可以将pyspark与hadoop2.8+结合使用?

h22fl7wq  于 2021-05-31  发布在  Hadoop
关注(0)|答案(2)|浏览(414)

由于一些特性,我想在本地运行pyspark作业,使用特定版本的hadoop(比如hadoopaws2.8.5)。
pyspark版本似乎与spark版本一致。
在这里,我使用PySpark2.4.5,它似乎包裹了Spark2.4.5。
在提交我的pyspark作业时,使用 spark-submit --local[4] ... ,带选项 --conf spark.jars.packages=org.apache.hadoop:hadoop-aws:2.8.5 ,我遇到以下错误: 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作业hadoop版本与我传递给 spark-submit 期权 spark.jars.packages .
但我不知道如何才能让它工作?:)

nimxete2

nimxete21#

默认的spark disto包含hadoop库。spark首先使用系统(自己的)库。所以你要么 --conf spark.driver.userClassPathFirst=true 对于群集添加 --conf spark.executor.userClassPathFirst=true 或者下载没有hadoop的spark发行版。可能您必须将hadoop发行版放入spark disto jars目录。

2wnc66cl

2wnc66cl2#

好吧,我找到了解决办法:
1-以预期版本安装hadoop(我是2.8.5)
2-安装无hadoop版本的spark(2.4.4 for me)
3-套 SPARK_DIST_CLASSPATH 环境变量,使spark使用自定义版本的hadoop。
(参见。https://spark.apache.org/docs/2.4.4/hadoop-provided.html)
4-将pyspark目录添加到 PYTHONPATH 环境变量,如下所示:

export PYTHONPATH=$SPARK_HOME/python/lib/py4j-0.10.7-src.zip:$SPARK_HOME/python:$SPARK_HOME/python/build:$PYTHONPATH

(请注意,py4j版本与我的不同)
就这样。

相关问题