我使用的是spark 2.3.0和hadoop 2.7(但如果需要,我可以升级)
我想要一个带有arn(amazon资源名)iam角色的access3文件https://docs.aws.amazon.com/cli/latest/userguide/cli-multiple-profiles.html
我已经看过这个如何从apachespark访问s3a://文件了?但毫无疑问,我的访问
public class test {
public static void main(String[] args) {
SparkSession sc = new SparkSession.Builder()
.appName("test")
.config("spark.master", "local[*]") //for example
.config("spark.hadoop.fs.s3a.access.key", "****")
.config("spark.hadoop.fs.s3a.secret.key", "****")
// .config("spark.hadoop.fs.s3a.arn_role","arn:aws:iam::***:role/******"")
.getOrCreate();
sc.read().format("csv").load("s3a://toto/****.csv").printSchema();
}
}
我没有找到任何选项或配置
我也在寻找一个在spark submit上使用args的解决方案,但不在配置文件中(这需要通过动态方式实现)
你知道吗?
2条答案
按热度按时间qc6wkl3g1#
如果在ec2上运行spark并希望使用iam角色,则不需要更改代码,只需在iam控制台中创建一个角色并将其分配给ec2即可。在该示例上运行的所有操作都将继承角色权限。
如果在emr上运行,请创建role并在调用emr集群api的lambda脚本中指定角色arn,然后通过lambda环境参数访问角色arn。
fdbelqdn2#
对iam假定角色的显式支持是s3a代码hadoop-15141中的一个非常新的特性,但是hadoop-15583仍然不是完全稳定的,因此升级不会带来任何好处。
2.8hadoop-12537的会话凭证支持是什么
在这里,您需要以某种方式获取iam角色的临时凭据(可能是aws cli?如果不是的话,一点awssdk就可以让你做到这一点。想象一下这个代码和这个代码的混合。
assumerole代码为您提供会话凭证集(访问密钥、密钥、会话令牌),然后您需要在spark上下文中设置这些凭证集,并将凭证提供程序切换到临时提供程序,如本文所述。
然后,您应该能够在iam角色中通过spark工作,直到会话到期(会话现在已延长到几个小时;直到2018年3月,他们只持续了几分钟)。
hadoop3.1+中的完整iam角色支持允许您声明iam角色和任何额外策略,并让连接器自动让您登录,然后定期刷新会话令牌。你不会有这个,所以你的spark工作不能超过你在启动时获得的证书的有效期。