由于一些特性,我想在本地运行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
.
但我不知道如何才能让它工作?:)
2条答案
按热度按时间nimxete21#
默认的spark disto包含hadoop库。spark首先使用系统(自己的)库。所以你要么
--conf spark.driver.userClassPathFirst=true
对于群集添加--conf spark.executor.userClassPathFirst=true
或者下载没有hadoop的spark发行版。可能您必须将hadoop发行版放入spark disto jars目录。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
环境变量,如下所示:(请注意,py4j版本与我的不同)
就这样。