Hadoop Distcp没有AWS凭证



我有一个我想放在HDFS上的巨大的S3files。鉴于涉及的文件量我首选的解决方案是使用"分布式副本"。但是,由于某种原因,我无法获得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

如果某人使用-D hadoop.security.credential.provider.path出现相同错误的情况,请确保您的凭据存储(JCEKS文件)位于分布式文件系统(HDFS)中,因为DISTCP启动了一个节点之一经理节点可以访问相同的节点。

koen的答案对我有帮助,这是我的版本。

hadoop distcp 
  -Dfs.s3a.aws.credentials.provider=org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider 
  -Dfs.s3a.access.key=[accesskey] 
  -Dfs.s3a.secret.key=[secretkey] 
  -Dfs.s3a.session.token=[sessiontoken] 
  -Dfs.s3a.fast.upload=true 
  hdfs:///some/path s3a://[bucket]/[folder]/[filename] 

最新更新