1

使用 AWS 库,我可以访问 S3,但如果我尝试使用 Spark 程序(使用 NativePackager 构建)访问 S3,这将不起作用。

我尝试了 s3://、s3n:// 和 s3a://。

让我展示一些我的测试:

测试1:

如果我没有什么特别的。如前所述失败。

测试2:

https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html之后,我在调用我的代码之前执行了此代码:

curl --location http://169.254.170.2/$$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI > credentials.txt
export AWS_ACCESS_KEY_ID=`cat credentials.txt | perl -MJSON::PP -E 'say decode_json(<>)->{"AccessKeyId"}'`
export AWS_SECRET_ACCESS_KEY=`cat credentials.txt | perl -MJSON::PP -E 'say decode_json(<>)->{"SecretAccessKey"}'`

之前的一些错误

测试3:

如果我用我的个人密钥设置 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY。AWS 库和 Spark Work

考虑到测试 3有效,我的代码有效。出于显而易见的原因,我不喜欢在周围维护钥匙。问题是:

如何在我的 Spark 作业上使用 AWS Batch (ECS) 创建的凭证?

4

1 回答 1

6

我遇到了同样的问题,仔细阅读文档后,我意识到我需要将其添加到我的 spark 属性中:

sparkConf.set('spark.hadoop.fs.s3a.aws.credentials.provider', 'com.amazonaws.auth.DefaultAWSCredentialsProviderChain')

希望能帮助到你

于 2018-06-03T20:34:13.007 回答