我正在尝试使用 pyspark 读取 AWS S3 存储桶。该存储桶需要请求者付费才能读取。
但是,尽管 aws-cli 上的类似凭证有效,并且我相信
spark.hadoop.fs.s3a.requester-pays.enabled
配置是原因,但它似乎不起作用,因为如果我删除 aws-cli 上的参数 --request-payer requester
,我会得到确切的结果同样的错误。
下面是我的 pyspark 配置代码
spark = SparkSession.builder \
.appName("MainnetBlocksStreamingJob") \
.config("spark.jars.packages", "org.apache.hadoop:hadoop-aws:3.2.0,com.amazonaws:aws-java-sdk-bundle:1.11.375") \
.config("spark.hadoop.fs.s3a.access.key", S3_ACCESS_KEY) \
.config("spark.hadoop.fs.s3a.secret.key", S3_SECRET_KEY) \
.config("spark.hadoop.fs.s3a.endpoint", "s3.amazonaws.com") \
.config("spark.hadoop.fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem") \
.config("spark.hadoop.fs.s3a.path.style.access", "true") \
.config("spark.hadoop.fs.s3a.requester-pays.enabled", "true") \
.config("spark.hadoop.fs.s3a.requester.pays.enabled", "true") \
.config('spark.hadoop.fs.s3a.aws.credentials.provider', 'org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider')\
.getOrCreate()
我用命令运行 pyspark
spark-submit \--packages io.delta:delta-spark_2.12:3.3.0,org.apache.hadoop:hadoop-aws:3.2.0,com.amazonaws:aws-java-sdk-bundle:1.11.375 \
--conf "spark.driver.extraJavaOptions=-Dlog4j.configuration=file:log4j.properties" \
--conf spark.hadoop.fs.s3a.requester-pays.enabled=true \
dataproc_jobs/streaming.py
谢谢你。
根据 s3a 文档,它是
fs.s3a.requester.pays.enabled
。
但是,该功能仅随 HADOOP-14661 S3A 一起提供,以支持 Requester Pays Buckets,这表明它是 Hadoop 3.3.5 功能。
将所有 hadoop-* 依赖项升级到 3.3.5 或更高版本才能正常工作。