【发布时间】:2021-12-14 02:36:29
【问题描述】:
我现在花了好几个小时试图让 S3FS 与 Pyspark 3.2 / Hadoop 3.3.1 一起工作。我已经经历了各种 ClassDefNotFound 错误以及 hadoop-aws 和 aws-java-sdk jar 所具有的各种兼容性问题,但现在已经到了尝试从 S3 读取文件时不再出现任何异常的地步- 相反,应用程序只是无限期挂起。这是我目前的配置:
os.environ.update({'AWS_ACCESS_KEY_ID': 'SOME_SECRET_KEY',
'AWS_SECRET_ACCESS_KEY': 'SOME_SECRET_ACCESS_KEY'}
conf = SparkConf() \
.set('spark.jars.packages', 'org.apache.hadoop:hadoop-aws:3.3.1,com.amazonaws:aws-java-sdk-bundle:1.11.901') # also tried aws-java-sdk-bundle:1.12.96
sc = SparkContext(conf=conf)
spark = SparkSession(sc).builder.appName('test').getOrCreate()
spark._jsc.hadoopConfiguration().set("fs.s3a.aws.credentials.provider", "com.amazonaws.auth.EnvironmentVariableCredentialsProvider")
spark._jsc.hadoopConfiguration().set("fs.s3a.impl","org.apache.hadoop.fs.s3a.S3AFileSystem")
spark._jsc.hadoopConfiguration().set("fs.s3a.endpoint", "us-east-1.amazonaws.com")
print(f'pyspark hadoop version: {spark.sparkContext._jvm.org.apache.hadoop.util.VersionInfo.getVersion()}')
# executes this and a warning about missing hadoop-metrics2-s3a-file-system.properties, then hangs for good
df = spark.read.format('csv').load('s3a://bucket/file.csv').toPandas()
我也尝试了 org.apache.spark:spark-hadoop-cloud_2.13:3.2.0 包而不是 hadoop-aws,正如官方 spark 文档 here 中所建议的那样,但这也以同样的方式挂起。在此之前,我尝试过的每个配置通常都会导致java.lang.ClassNotFoundException: com.amazonaws.auth.AWSCredentialsProvider,所以现在我不确定我是变热还是变冷。
是否有人有他们用于 Pyspark 3.2 / Hadoop 3.3.1 的配置并具有 S3FS 访问权限?我需要降级吗?尽管 spark 3.0 + 会很好,但我并不依赖于任何特定版本。提前致谢。
【问题讨论】:
-
使用你指定的 jars 我有一些 Class Not Found 错误。 pyspark 3.2.0 + aws for me 适用于
--packages com.amazonaws:aws-java-sdk-bundle:1.11.375,org.apache.hadoop:hadoop-aws:3.2.0
标签: apache-spark hadoop amazon-s3 pyspark