我有一大桶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凭证?有人知道吗?
2条答案
按热度按时间um6iljoc1#
万一有人用同样的错误
-D hadoop.security.credential.provider.path
,请确保您的凭据存储(jceks文件)位于分布式文件系统(hdfs)中,因为distcp从其中一个节点管理器节点启动,因此它可以访问同一个节点。5tmbdcev2#
自上一版本以来,凭据标志的格式似乎已更改。以下命令起作用: