从 hadoop 访问亚马逊 S3 存储桶,并从命令行指定 SecretAccessKey

问题描述 投票:0回答:2

我正在尝试使用 hdfs 命令访问亚马逊 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/credentials 中配置 AccessKeyId 和 SecretAccessKey):

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

是否有任何方法可以使用 Hadoop 命令访问亚马逊 S3 存储桶,而无需在 core-site.xml 中指定密钥?我更喜欢在命令行中指定键。

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

amazon-web-services hadoop amazon-s3 hdfs
2个回答
0
投票

hadoop fs -Dfs.s3a.access.key= -Dfs.s3a.secret.key= -ls s3a://

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

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


-1
投票
© www.soinside.com 2019 - 2024. All rights reserved.