在hadoop环境中使用多个aws密钥的解决方法是什么?我的hadoop作业将需要访问两个不同的s3存储桶(两个不同的键)。尝试了“凭据”提供程序,但看起来它是相当有限的。它以小写形式存储所有键,因此我不能对一个作业使用“s3a”,对另一个作业使用“s3n”。例如:对于s3a,它查找:
fs.s3a.access.key
fs.s3a.secret.key
对于s3n:
fs.s3n.awsAccessKeyId
fs.s3n.awsSecretAccessKey
但是如果我用“fs.s3n.awsaccesskeyid”创建提供者,它将存储为“fs.s3n.awsaccesskeyid”,结果在运行时它无法加载预期的密钥。
作为解决方法,我尝试生成两个不同的凭据提供程序并传递为:
--Dhadoop.security.credential.provider.path=key1,key2
但这两个密钥都有fs.s3a.access.key和fs.s3a.secrety.key对,因此无法协同工作。
我不想通过访问和密钥使用-d选项,因为它是可见的。有没有更好的方法来处理这种情况?
1条答案
按热度按时间dgtucam11#
如果升级到hadoop2.8,可以使用每个bucket的配置来解决这个问题。fs.s3a.bucket.$bucketname中的所有内容都被修补到该bucket的fs示例的配置中,覆盖任何其他配置
fs.s3a.bucket.engineering.access.key=AAID.. fs.s3a.bucket.logs.access.key=AB14...
我们经常用它来和不同地区的bucket对话,加密等等。到目前为止效果不错。尽管我会这么说。特殊例外:如果您加密jcecks文件中的凭证机密。这些文件涵盖了这一点。