我有一大堆 S3files 想放在 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 作为一个也不起作用的标志。我已经读过如何明确地传递凭据不是一个好习惯,所以也许这只是一些以其他方式做的 gentil 建议?
应该如何使用 distcp 传递 S3 凭据?有谁知道?