我有一个很大的S3files存储桶,我想放在HDFS上。考虑到涉及的文件数量,我更喜欢的解决方案是使用“分布式复制”。然而,由于某些原因,我无法让hadoop distcp接受我的亚马逊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作为一种旗帜,但也不起作用。我读到过显式传递凭据并不是一种好的做法,所以也许这只是一些外来者的建议,可以用其他方式来做?
如何将S3凭据与distcp一起传递?有人知道吗?
发布于 2017-11-23 21:33:49
自上一版本以来,凭据标志的格式似乎已更改。以下命令有效:
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
发布于 2018-12-19 14:24:27
如果有人遇到同样的错误,请使用
,请确保您的凭据存储(jceks文件)位于分布式文件系统(Hdfs)中,因为distcp从一个节点管理器节点启动,以便它可以访问该节点管理器节点。
发布于 2021-03-02 02:01:20
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]
https://stackoverflow.com/questions/47456479
复制相似问题