首页 > 解决方案 > pyspark 分区的限制成功写入 aws s3

问题描述

我在 Kube 集群的 Jupyter Notebook 中运行 Pyspark。一切正常,我可以向/从AWS S3/写入/读取Postgres,使用pyspark.sql等。

而且我可以将分区写入 S3,但前提是分区数不超过 17:

partitions = test.repartition(17)

然后我写

partitions.write.parquet('s3a://' + s3_bucket + '/folder',mode="overwrite")

我看到文件是如何开始出现在我的 文件夹中 S3的,首先是folder/temporary/0folder_SUCCESSpart-00000part-00016

但如果我这样做

partitions = test.repartition(20)

然后我再次看到所有文件 (20) 出现在folder/temporary/0,我在 Spark UI 中看到20 Completed tasks所有带有SUCCESS标签的文件。但最后在没有文件的情况下S3 我只得到了 17 个文件,而在我的 Jupyter Notebook 中我得到了folder_SUCCESS

Job aborted
...
Caused by: com.amazonaws.services.s3.model.AmazonS3Exception: Status Code: 403, AWS Service: Amazon S3, AWS Request ID: ..., AWS Error Code: SignatureDoesNotMatch, AWS Error Message: The request signature we calculated does not match the signature you provided. Check your key and signing method., S3 Extended Request ID: ...

我正在尝试大小文件,检查执行程序的内存,但不能超过 17 个分区。我有

Spark 2.4.5 Python 3.7 aws-java-sdk:1.7.4 hadoop-aws:2.7.3 postgresql-42.2.14 datanucleus-api-jdo-3.2.6

我正在S3使用IAM角色登录(尝试使用密钥/秘密 - 没有改变任何东西)。

我没有连接/写入/读取到/从S3的问题,我有写入超过 17 个分区的问题S3

我还尝试将 pod 和核心的数量从 2 个 worker 和 1 个 core 增加到 6 个 worker 和 2 个 core,这个错误并没有改变任何东西。

谢谢!

标签: amazon-s3pyspark

解决方案


推荐阅读