在我的Spark应用程序中,我通过命令行参数传递了aws凭证。
spark.sparkContext.hadoopConfiguration.set("fs.s3.awsAccessKeyId", awsAccessKeyId)
spark.sparkContext.hadoopConfiguration.set("fs.s3.awsSecretAccessKey", awsSecretAccessKey)
spark.sparkContext.hadoopConfiguration.set("fs.s3.impl", "org.apache.hadoop.fs.s3native.NativeS3FileSystem")
但是,在群集模式下,在节点之间显式传递凭据是一个巨大的安全问题,因为这些凭据以文本形式传递。
如何使我的应用程序与 IAmRole 或其他在 Spark 应用中不需要这两行代码的正确方法一起使用:
spark.sparkContext.hadoopConfiguration.set("fs.s3.awsAccessKeyId", awsAccessKeyId)
spark.sparkContext.hadoopConfiguration.set("fs.s3.awsSecretAccessKey", awsSecretAccessKey)
您可以在 hadoop conf 的核心站点中添加以下配置.xml而不能将其添加到您的代码库中
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>fs.s3n.awsAccessKeyId</name>
<value>my_aws_access_key_id_here</value>
</property>
<property>
<name>fs.s3n.awsSecretAccessKey</name>
<value>my_aws_secret_access_key_here</value>
</property>
</configuration>
要使用上述文件,只需在运行 Spark 或 conf/spark-env.sh
之前export HADOOP_CONF_DIR=~/Private/.aws/hadoop_conf
对于 IAM 角色,火花 1.6 中已经打开了错误 https://issues.apache.org/jira/browse/SPARK-16363