如何在 Amazon EC2 上以本地模式配置 Spark 运行 以使用 S3 的 IAM 规则

How to configure Spark running in local-mode on Amazon EC2 to use the IAM rules for S3

我在 Amazon EC2 上 运行 本地模式下的 Spark2,当我尝试从 S3 读取数据时出现以下异常:

java.lang.IllegalArgumentException: AWS Access Key ID and Secret Access Key must be specified as the username or password (respectively) of a s3 URL, or by setting the fs.s3.awsAccessKeyId or fs.s3.awsSecretAccessKey properties (respectively)

我可以,但由于安全问题,我不想从代码中手动设置 AccessKey 和 SecretKey。

EC2 设置了 IAM 规则,允许它完全访问相关的 S3 存储桶。对于每个其他亚马逊 API 调用它就足够了,但似乎火花忽略了它。

我可以将 spark 设置为使用此 IAM 规则而不是 AccessKey 和 SecretKey 吗?

切换到使用 s3a:// 方案(使用类路径中的 Hadoop 2.7.x JAR),这会自动发生。 spark/hadoop 的非 EMR 版本的 "s3://" 方案不是您想要的连接器(它是旧的、不可互操作的并且已从最新版本中删除)

我正在使用 hadoop-2.8.0 和 spark-2.2.0-bin-hadoop2.7。

Spark-S3-IAM 集成与驱动程序上的以下 AWS 包配合良好。

spark-submit --packages com.amazonaws:aws-java-sdk:1.7.4,org.apache.hadoop:hadoop-aws:2.7.3  ...

Scala 代码片段:

sc.textFile("s3a://.../file.gz").count()