Apache spark 有没有办法将PySpark与Hadoop 2.8+;结合使用;?
由于一些特性,我希望使用特定版本的Hadoop(比如Hadoop aws 2.8.5)在本地运行PySpark作业 PySpark版本似乎与Spark版本一致 这里我使用PySpark 2.4.5,它似乎包裹了Spark 2.4.5 提交PySpark作业时,使用Apache spark 有没有办法将PySpark与Hadoop 2.8+;结合使用;?,apache-spark,hadoop,pyspark,Apache Spark,Hadoop,Pyspark,由于一些特性,我希望使用特定版本的Hadoop(比如Hadoop aws 2.8.5)在本地运行PySpark作业 PySpark版本似乎与Spark版本一致 这里我使用PySpark 2.4.5,它似乎包裹了Spark 2.4.5 提交PySpark作业时,使用spark submit--local[4]…,并选择--conf spark.jars.packages=org.apache.hadoop:hadoop aws:2.8.5,我遇到以下错误: py4j.protocol.Py4JJa
spark submit--local[4]…
,并选择--conf spark.jars.packages=org.apache.hadoop:hadoop aws:2.8.5
,我遇到以下错误:
py4j.protocol.Py4JJavaError:调用o32.sql时出错
除了以下java例外:
java.lang.NoClassDefFoundError: org/apache/hadoop/fs/StorageStatistics
或:
java.lang.IllegalAccessError:尝试访问org.apache.hadoop.metrics2.lib.MutableCounterLong方法。默认spark disto包含hadoop库。Spark首先使用系统(自己的)库。因此,您应该设置--conf spark.driver.userClassPathFirst=true
,并为集群添加--conf spark.executor.userClassPathFirst=true
,或者在不使用hadoop的情况下下载spark发行版。可能您必须将hadoop发行版放入spark disto jars目录。好的,我找到了一个解决方案:
1-以预期版本安装Hadoop(对于我来说是2.8.5)
2-安装一个无Hadoop版本的Spark(2.4.4适用于我)
3-设置SPARK\u DIST\u CLASSPATH
环境变量,使SPARK使用自定义版本的Hadoop
(参见)
4-将PySpark目录添加到PYTHONPATH
环境变量中,如下所示:
导出PYTHONPATH=$SPARK\u HOME/python/lib/py4j-0.10.7-src.zip:$SPARK\u HOME/python:$SPARK\u HOME/python/build:$PYTHONPATH
(请注意,py4j版本与我的不同)
就是这样。hadoop集群也是本地的吗?如果是,那太好了。如果不是的话,原则是“将计算引入数据”,而不是“将数据引入计算”@Z4层:是的。
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