我有一大堆 S3file 想放在 HDFS 上。鉴于涉及的文件数量,我的首选解决方案是使用“分布式副本”。但是由于某种原因,我无法使用 hadoop distcp 来获取我的 Amazon S3 凭证。我使用的命令是:
hadoop distcp -update s3a://[bucket]/[folder]/[filename] hdfs:///some/path/ -D fs.s3a.awsAccessKeyId=[keyid] -D fs.s3a.awsSecretAccessKey=[secretkey] -D fs.s3a.fast.upload=true
然而,这就像没有“-D”参数一样。
ERROR tools.DistCp: Exception encountered
java.io.InterruptedIOException: doesBucketExist on [bucket]: com.amazonaws.AmazonClientException: No AWS Credentials provided by BasicAWSCredentialsProvider EnvironmentVariableCredentialsProvider SharedInstanceProfileCredentialsProvider : com.amazonaws.SdkClientException: Unable to load credentials from service endpoint
我已经查看了 hadoop distcp 文档,但在那里找不到关于为什么这不起作用的解决方案。我试过 -Dfs.s3n.awsAccessKeyId 作为标志,但也没有用。我已经读过如何明确地传递凭据不是好的做法,所以也许这只是一些以其他方式做的绅士建议?
应该如何使用 distcp 传递 S3 凭据?有谁知道?
最佳答案
凭据标志的格式似乎自上一版本以来发生了变化。以下命令有效:
hadoop distcp \
-Dfs.s3a.access.key=[accesskey] \
-Dfs.s3a.secret.key=[secretkey] \
-Dfs.s3a.fast.upload=true \
-update \
s3a://[bucket]/[folder]/[filename] hdfs:///some/path
关于Hadoop distcp 未提供 AWS 凭证,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47456479/