2016-07-15 140 views
1

我想使用hdfs命令访问亚马逊S3存储桶。这里是我运行的命令:从hadoop访问亚马逊S3存储桶从命令行指定SecretAccessKey

$ 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中指定密钥?我宁愿在命令行中指定Keys。

任何建议将会非常有帮助。

回答

-1

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

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

+0

谢谢!将尝试使用实例配置文件。 –