我正在尝试将一个文件从s3复制到amazonec2上的hadoop hdfs。
我使用的命令是:
bin/hadoop distcp s3://<awsAccessKeyId>:<awsSecretAccessKey>@<bucket_name>/f1 hdfs://user/root/
f1是文件名
我也把它改成了s3n,看看它是否工作,但它没有。
我将密钥中的正斜杠替换为%2f
我得到的错误是:signaturedesnotmatch
org.jets3t.service.S3ServiceException: S3 GET failed for '/%2Ff1'
<Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>
<StringToSignBytes>...</StringToSignBytes>
<RequestId>...</RequestId>
<HostId>..</HostId>
<SignatureProvided>NsefW5en6P728cc9llkFIk6yGc4=\
</SignatureProvided>
<StringToSign>GETMon, 05 Aug 2013 15:28:21 GMT/<bucket_name>/%2Ff1</StringToSign>
<AWSAccessKeyId><MY_ACCESS_ID><\ /AWSAccessKeyId></Error>
我只有一个aws访问密钥id和密钥。我检查了我的aws帐户,它们是一样的。我使用相同的aws访问密钥和密钥登录到ec2集群。我也尝试过使用core-site.xml,但也没有用。
谢谢,拉吉夫
2条答案
按热度按时间cigdeys31#
重新生成对我有效的密钥的另一种方法是在运行distcp时使用-dfs.s3n.awsaccesskeyid=-dfs.s3n.awssecretaccesskey=flags。
示例:hadoop distcp-dfs.s3n.awsaccesskeyid=-dfs.s3n.awssecretaccesskey=s3n://path/to/log/dirhdfs://hdfs-node:8020/日志/
注意s3n的使用,它有5gb的文件限制:amazons3和hadoop中的s3n之间的区别
编辑:不要对秘密访问密钥进行url编码,所以斜杠“/”和加号“+”应该按原样传递!
n9vozmp42#
重新生成我的aws密钥和秘密,这样我的秘密中就没有正斜杠了。裁判:https://issues.apache.org/jira/browse/hadoop-3733