我正在尝试使用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中指定密钥?我更喜欢在命令行中指定密钥。
任何建议都会非常有用。
答案 0 :(得分:-1)
最佳做法是在使用EC2实例配置文件角色创建的实例上运行hadoop,并将S3访问权限指定为已分配角色的策略。使用实例配置文件时不再需要密钥 http://docs.aws.amazon.com/java-sdk/latest/developer-guide/credentials.html
您还可以使用实例配置文件角色启动AMI,CLI和SDK将使用它。如果您的代码使用DefaultAWSCredentialsProviderChain类,则可以通过环境变量,系统属性或凭据配置文件(以及EC2实例配置文件角色)获取凭据。