2013-08-05 87 views
1

我想從S3複製文件到我在Amazon EC2上的hadoop HDFS。從S3複製Hadoop distcp:簽名不匹配錯誤

,我使用的命令是:

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訪問密鑰和祕密密鑰。我檢查了我的AWS賬戶,他們是一樣的。我使用相同的AWS訪問密鑰和密鑰來登錄到我的EC2羣集。我也嘗試使用core-site.xml,但這也沒有幫助。

感謝, 拉吉夫

+0

我還發現你需要你的s3 url以s3n開頭而不是s3 – viper

+0

這對我有效:http://stackoverflow.com/questions/14681938/invalid-hostname-error-when-connecting-to- s3-sink-when-using-secret-key-having-f – Roshini

回答

1

,以再生爲我工作密鑰的選擇是運行DistCp使用時要使用-Dfs.s3n.awsAccessKeyId = -Dfs.s3n.awsSecretAccessKey =標誌。

實施例: 的hadoop DistCp使用-Dfs.s3n.awsAccessKeyId = -Dfs.s3n.awsSecretAccessKey = S3N://路徑/到/日誌/ DIR HDFS:// HDFS節點:8020 /日誌/

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

編輯:不要URL編碼祕密訪問鍵,所以斜槓「/」和加號「+」應該照原樣傳遞!

+0

最後的解決方案將無法正常工作,hadoop文件系統仍然抱怨:java.lang.IllegalArgumentException:錯誤FS – tribbloid

+0

@tribbloid hadoop的確切命令和版本是什麼? – Garren