hadoop distcp未提供aws凭据

3z6pesqy  于 2021-06-01  发布在  Hadoop
关注(0)|答案(2)|浏览(448)

我有一大桶S3文件要放在hdfs上。考虑到涉及的文件数量,我首选的解决方案是使用“分布式副本”。但是由于某些原因,我无法让hadoop distcp获取我的amazons3凭据。我使用的命令是:

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凭证?有人知道吗?

um6iljoc

um6iljoc1#

万一有人用同样的错误 -D hadoop.security.credential.provider.path ,请确保您的凭据存储(jceks文件)位于分布式文件系统(hdfs)中,因为distcp从其中一个节点管理器节点启动,因此它可以访问同一个节点。

5tmbdcev

5tmbdcev2#

自上一版本以来,凭据标志的格式似乎已更改。以下命令起作用:

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

相关问题