Spark:如何在Spark应用程序中显式使用aws凭据

时间:2016-11-17 19:07:04

标签: scala amazon-web-services apache-spark amazon-s3 spark-dataframe

在我的Spark应用程序中,我有通过命令行参数传入的凭据。

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)

1 个答案:

答案 0 :(得分:2)

您可以在hadoop conf的core-site.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或export HADOOP_CONF_DIR=~/Private/.aws/hadoop_conf

之前,只需conf/spark-env.sh使用上述文件

对于IAM角色,已经在spark 1.6 https://issues.apache.org/jira/browse/SPARK-16363

中打开了错误