johnny10229 寫:
您好 jazz大
我想請問一下,我在運算mapreduce過程中想要把結果存起來到同一檔案(EX:.result.txt)
因為我是用迭代式演算法,因此map/reduce會一直循環,所以輸出檔也會一直更新
但是因為reducer分成3台 有可能同一時間運算完都需要寫入結果
所以造成某一台無法開啟result檔案,所以會被蓋過
log檔是顯示"此檔案已被開啟"
請問我該怎麼處理這個問題 ?? 有試過try-catch-finally 但是好像沒作用
附上那部分的code,希望Jazz大大幫幫忙
謝謝
HDFS 是一種 Append Only 檔案系統,
因此原生就不支援同時多個程序寫入同一個檔案(不支援 concurrent write)。
http://www.slideshare.net/dataera/inside-hdfs-append也因此,若循正統 Hadoop MapReduce 程式寫法,
reduce() 函數會自動寫到不同的 output 檔案中。
但您的程式看起來
(1) 不是 Hadoop MapReduce API 規範的寫法
(2) 自行開檔、寫檔到 HDFS
所以遇到這個現象是「正常」。
一般解決這個問題的方式是「改用其他支援 concurrent write 的系統」
例如,寫到資料庫,或者寫到一般 POSIX 的檔案系統(網路芳鄰、NFS 網路磁碟)
供參考~
- Jazz