从hadoop访问amazon S3存储桶,从命令行指定SecretAccessKey

时间:2016-07-15 21:17:42

标签: amazon-web-services hadoop amazon-s3 hdfs

我正在尝试使用hdfs命令访问amazon S3存储桶。这是我运行的命令:

$ hadoop fs -ls s3n://<ACCESSKEYID>:<SecretAccessKey>@<bucket-name>/tpt_files/
-ls: Invalid hostname in URI s3n://<ACCESSKEYID>:<SecretAccessKey>@<bucket-name>/tpt_files
Usage: hadoop fs [generic options] -ls [-d] [-h] [-R] [<path> ...]

我的SecretAccessKey包含“/”。这可能是造成这种行为的原因吗?

同时我在这个服务器上安装了aws cli,我可以使用aws cli访问我的存储桶而没有任何问题(在.aws /凭证中配置了AccessKeyId和SecretAccessKey):

aws s3 ls s3:// <bucket-name>/tpt_files/

如果有任何方法如何使用Hadoop命令访问amazon S3存储桶而不在core-site.xml中指定密钥?我更喜欢在命令行中指定密钥。

任何建议都会非常有用。

1 个答案:

答案 0 :(得分:-1)

最佳做法是在使用EC2实例配置文件角色创建的实例上运行hadoop,并将S3访问权限指定为已分配角色的策略。使用实例配置文件时不再需要密钥 http://docs.aws.amazon.com/java-sdk/latest/developer-guide/credentials.html

您还可以使用实例配置文件角色启动AMI,CLI和SDK将使用它。如果您的代码使用DefaultAWSCredentialsProviderChain类,则可以通过环境变量,系统属性或凭据配置文件(以及EC2实例配置文件角色)获取凭据。