热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在hadoop中指定AWS凭证

如何解决《在hadoop中指定AWS凭证》经验,为你挑选了1个好方法。

我想在运行时指定AWS_SECRET_ACCESS_KEYAWS_ACCESS_KEY_ID

我已经尝试使用

hadoop -Dfs.s3a.access.key=${AWS_ACESS_KEY_ID} -Dfs.s3a.secret.key=${AWS_SECRET_ACCESS_KEY} fs -ls s3a://my_bucket/

export HADOOP_CLIENT_OPTS="-Dfs.s3a.access.key=${AWS_ACCESS_KEY_ID} -Dfs.s3a.secret.key=${AWS_SECRET_ACCESS_KEY}"

export HADOOP_OPTS="-Dfs.s3a.access.key=${AWS_ACCESS_KEY_ID} -Dfs.s3a.secret.key=${AWS_SECRET_ACCESS_KEY}"

在最后两个示例中,我尝试使用:

hadoop fs -ls s3a://my-bucket/

在所有情况下,我得到:

-ls: Fatal internal error
com.amazonaws.AmazonClientException: Unable to load AWS credentials from any provider in the chain
        at com.amazonaws.auth.AWSCredentialsProviderChain.getCredentials(AWSCredentialsProviderChain.java:117)
        at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3521)
        at com.amazonaws.services.s3.AmazonS3Client.headBucket(AmazonS3Client.java:1031)
        at com.amazonaws.services.s3.AmazonS3Client.doesBucketExist(AmazonS3Client.java:994)
        at org.apache.hadoop.fs.s3a.S3AFileSystem.initialize(S3AFileSystem.java:297)
        at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2669)
        at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:94)
        at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2703)
        at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2685)
        at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:373)
        at org.apache.hadoop.fs.Path.getFileSystem(Path.java:295)
        at org.apache.hadoop.fs.shell.PathData.expandAsGlob(PathData.java:325)
        at org.apache.hadoop.fs.shell.Command.expandArgument(Command.java:235)
        at org.apache.hadoop.fs.shell.Command.expandArguments(Command.java:218)
        at org.apache.hadoop.fs.shell.Command.processRawArguments(Command.java:201)
        at org.apache.hadoop.fs.shell.Command.run(Command.java:165)
        at org.apache.hadoop.fs.FsShell.run(FsShell.java:287)
        at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
        at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:84)
        at org.apache.hadoop.fs.FsShell.main(FsShell.java:340)

怎么了?



1> franklinsijo..:

这是在运行时传递凭据的正确方法,

hadoop fs -Dfs.s3a.access.key=${AWS_ACCESS_KEY_ID} -Dfs.s3a.secret.key=${AWS_SECRET_ACCESS_KEY} -ls s3a://my_bucket/

您的语法需要一个小的修复。确保不将空字符串作为值传递给这些属性。这将使这些运行时属性无效,并将继续按照身份验证链搜索凭据。

S3A客户端遵循以下身份验证链:

    如果在文件系统URI中提供了登录详细信息,则会打印警告,然后分别提取AWS密钥和密钥的用户名和密码。

    fs.s3a.access.keyfs.s3a.secret.key被看在Hadoop的XML配置。

    然后寻找AWS环境变量。

    尝试查询Amazon EC2实例元数据服务以检索发布到EC2 VM的凭证。

在运行时传递凭据的其他可能方法(请注意,在运行时提供凭据既不安全也不建议),

1)将它们嵌入到S3 URI中

hdfs dfs -ls s3a://AWS_ACCESS_KEY_ID:AWS_SECRET_ACCESS_KEY@my-bucket/

如果密钥包含 +/符号,请分别使用%2B和对其进行转义%2F

切勿在生产中共享URL,使用URL生成的日志或使用此类内联身份验证机制。

2) export会话的环境变量

export AWS_ACCESS_KEY_ID=
export AWS_SECRET_ACCESS_KEY=

hdfs dfs -ls s3a://my-bucket/


推荐阅读
author-avatar
苏佡挖图组糖最棒
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有