我正在使用spark 2.3.0和Hadoop 2.7(但如有必要我可以升级)
我想使用ARN(Amazon资源名称)IAM角色访问S3文件 https://docs.aws.amazon.com/cli/latest/userguide/cli-multiple-profiles.html
我已经看过这个How to access s3a:// files from Apache Spark?,但对于IAM访问没有疑问
{{1}}
我没有找到任何选项或配置
我还在寻找在spark提交上带有args的解决方案,但不在配置文件中(这需要通过dynamic来实现)
你有什么主意吗?
答案 0 :(得分:1)
对IAM假定角色的显式支持是S3A代码HADOOP-15141中的一项非常新功能,但仍不完全稳定HADOOP-15583,因此升级不会带来任何好处。
什么是2.8 HADOOP-12537的会话凭据支持
在这里,您需要以某种方式获取IAM角色的临时凭证(也许是AWS CLI?否则,请使用一点AWS开发工具包就可以做到这一点。想象一下this code和{{ 3}}。
假定角色代码为您提供了会话凭证集(访问密钥,秘密密钥,会话令牌),然后需要在spark上下文中进行设置,并将凭证提供者切换为临时提供者,如this所述。
然后,您应该能够在该IAM角色中工作,直到会话期满(现在已延长到几个小时;直到2018年3月,它们只持续了几分钟)。
Hadoop 3.1+中对IAM角色的完全支持使您可以声明IAM角色和任何其他策略,并使连接器自动登录,然后定期刷新会话令牌。您将不需要它,因此您的Spark作业的持续时间不会超过您在启动时获得的凭据的寿命。
答案 1 :(得分:0)
如果您在ec2上运行spark并且想要使用IAM角色,则无需更改代码,只需在IAM控制台中创建一个角色并分配给您的ec2。在该实例上运行的所有内容都会继承角色特权。
如果您在EMR上运行,请在调用EMR集群API的lambda脚本中创建角色并指定角色arn,请通过lambda环境参数访问角色arn。