【问题标题】:Hadoop distcp copy from S3: Signature does not match error来自 S3 的 Hadoop distcp 副本:签名不匹配错误
【发布时间】:2013-08-05 16:02:01
【问题描述】:

我正在尝试将文件从 S3 复制到我在 Amazon EC2 上的 hadoop HDFS。

我使用的命令是:

bin/hadoop distcp s3://<awsAccessKeyId>:<awsSecretAccessKey>@<bucket_name>/f1 hdfs://user/root/
  • f1 是文件名
  • 我也把它改成了 s3n 看看它是否有效,但它没有。
  • 我将秘密访问密钥中的正斜杠替换为 %2F

我得到的错误是:SignatureDoesNotMatch

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,但这也没有帮助。

谢谢, 拉吉夫

【问题讨论】:

标签: hadoop amazon-web-services amazon-s3 hdfs


【解决方案1】:

重新生成我的 AWS 密钥和秘密,这样我的秘密中没有正斜杠对我有用。 参考:https://issues.apache.org/jira/browse/HADOOP-3733

【讨论】:

  • 不幸的是加号仍然会导致界面失败
  • 我已经尝试过了,它仍然给出了同样的错误,我的新密钥包含一个加号“+”,我不确定是否应该再次避免
【解决方案2】:

重新生成对我有用的密钥的另一种方法是在运行 distcp 时使用 -Dfs.s3n.awsAccessKeyId= -Dfs.s3n.awsSecretAccessKey= 标志。

示例: hadoop distcp -Dfs.s3n.awsAccessKeyId= -Dfs.s3n.awsSecretAccessKey= s3n://path/to/log/dir hdfs://hdfs-node:8020/logs/

注意使用 s3n,它有 5GB 的文件限制:Difference between Amazon S3 and S3n in Hadoop

编辑:不要对秘密访问密钥进行 url 编码,因此斜杠“/”和加号“+”应该按原样传递!

【讨论】:

  • 最后一个方案不行,hadoop文件系统还是报错:java.lang.IllegalArgumentException: Wrong FS
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 2014-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多