1

我遇到了AWS EMR上的Hadoop作業未保存到S3的問題。當我以較小的樣本運行作業時,作業將輸出存儲得很好。當我運行相同的命令,但是在我的完整數據集上時,作業又一次完成,但是在S3中我沒有指定要輸出的內容。我的AWS EMR減速器輸出爲我完成的工作(應該在S3上,但沒有)?

顯然有一個bug with AWS EMR in 2009,但它是「固定」。

其他人都有這個問題嗎?我仍然在線上集羣,希望數據被埋在服務器的某個地方。如果有人有一個想法,我可以找到這些數據,請讓我知道!

更新:當我看從減壓器一個日誌,一切都看起來不錯:

2012-06-23 11:09:04,437 INFO org.apache.hadoop.fs.s3native.NativeS3FileSystem (main): Creating new file 's3://myS3Bucket/output/myOutputDirFinal/part-00000' in S3 
2012-06-23 11:09:04,439 INFO org.apache.hadoop.fs.s3native.NativeS3FileSystem (main): Outputstream for key 'output/myOutputDirFinal/part-00000' writing to tempfile '/mnt1/var/lib/hadoop/s3/output-3834156726628058755.tmp' 
2012-06-23 11:50:26,706 INFO org.apache.hadoop.fs.s3native.NativeS3FileSystem (main): Outputstream for key 'output/myOutputDirFinal/part-00000' is being closed, beginning upload. 
2012-06-23 11:50:26,958 INFO org.apache.hadoop.fs.s3native.NativeS3FileSystem (main): Outputstream for key 'output/myOutputDirFinal/part-00000' upload complete 
2012-06-23 11:50:27,328 INFO org.apache.hadoop.mapred.Task (main): Task:attempt_201206230638_0001_r_000000_0 is done. And is in the process of commiting 
2012-06-23 11:50:29,927 INFO org.apache.hadoop.mapred.Task (main): Task 'attempt_201206230638_0001_r_000000_0' done. 

當我連接到該任務的節點,提到的臨時目錄是空的。

更新2:閱讀Difference between Amazon S3 and S3n in Hadoop後,我想知道如果我的問題是使用「S3://」,而不是「S3N://」作爲我的輸出路徑。在我的兩個小樣本(商店都很好)以及我的全部工作中,我使用了「s3://」。任何想法,如果這可能是我的問題?

更新3:我現在看到AWS的EMR,S3://和S3N://都映射到S3本機文件系統(AWS EMR documentation)。

更新4:我重新運行了這個工作了兩次,每次都增加了服務器和還原器的數量。這兩個中的第一個完成了89/90減速機輸出複製到S3。第90位表示,它根據日誌成功複製,但AWS Support說文件不存在。他們已經將這個問題升級到他們的工程團隊。我第二次運行更多的reducer和服務器,實際上完成了將所有數據複製到S3(謝天謝地!)。但有一點很奇怪,就是有些減速器需要FOREVER將數據複製到S3--在這兩個新的運行中,都有一個減速器,其輸出需要1或2個小時才能複製到S3,而其他減速器最多隻需要10分鐘(文件是3GB左右)。我認爲這與EMR所使用的S3NativeFileSystem有什麼問題有關(例如,長時間懸掛 - 我當然會得到這個掛起;以及所謂的成功上傳不會上傳)。我先上傳到本地的HDFS,然後上傳到S3,但我是having issues on this front as well(等待AWS工程團隊的審查)。

TLDR;使用AWS EMR直接在S3上存儲看起來很麻煩;他們的工程團隊正在調查。

+0

EMR集羣本身可以將數據寫入到S3和HDFS。這些羣集上的HDFS是由節點的臨時存儲製成的,並且僅在羣集期間可用。爲了確保它是S3的問題,也許你可以嘗試在整個數據集上運行有問題的查詢,但將結果存儲在HDFS上?如果您在查詢後看到HDFS中的結果,那很可能意味着S3或其使用的問題。另外,你使用的路徑爲s3:// ...或s3n:// ...? –

+0

我在路徑中使用's3://'。我的完整作業有大約300個2GB文件作爲輸入。當我用10個這樣的2gb文件運行一個樣例作業時,使用相同的輸出語法,它可以正常工作(存儲到s3)。在關閉集羣之前,我在HDFS上達到了頂點,並沒有看到任何似乎會包含數據的目錄(儘管我殺死了集羣,所以無法仔細檢查)。關於重新完成全部工作,並且首先輸出到HDFS,我可以做到這一點,但是如果我失敗了另一份工作,成本會相當高。我希望AWS員工回覆我發佈在他們的論壇上的這個副本 –

+0

@MarkGrover - 我沒有意識到s3://和s3n://之間存在差異。你認爲使用「s3://」可能是我的數據沒有顯示的原因嗎? –

回答

1

事實證明,這是AWS方面的一個錯誤,他們已經將其修正爲最新的AMI 2.2.1版本,在these release notes中進行了簡要描述。

我從AWS獲得的長篇解釋是,當reducer文件> S3的塊限制(即5GB?)時,則使用multipart,但沒有進行適當的錯誤檢查,所以這就是爲什麼它有時會工作,而其他時間則不行。

如果這種情況持續下去的任何人,請參閱我的病例數,62849531.

相關問題