2012-11-26 31 views
0

我正嘗試使用map-reduce從FTP並行讀取文件。我有一個代碼工作,它讀取文件並對其執行字數統計。但是,當輸入大小很大時(特定情況下超過2 MB)它會失敗。 它以一個溢出0完成消息停止,然後一個地圖100%減少0%。然後通過服務器關閉連接。 我不太明白。 Spill 0是什麼意思?爲什麼代碼會因大輸入而失敗?我如何分割輸入並將其提供給映射器?這會有幫助嗎? 我可以擴展FileInputFormat類來完成這項工作嗎? 謝謝:)使用FileInputFormat爲大文件的映射器分割輸入?

回答

0

是的,你可以實現你的InputFormat。除了FileInputFormat之外,Hadoop中還有其他幾個人,例如TextInputFormatKeyValueInputFormat等。您還可以定義從分組中讀取記錄的方式。爲此,您需要實施自己的RecordReader

http://developer.yahoo.com/hadoop/tutorial/module4.html

例如,默認InputFormatTextInputFormat讀取一個文件,並使用LineRecordReader由一線得到記錄行。如果您正在從文件中讀取結構化數據,則可以實施您自己的RecordReader,以便每個記錄都是來自該文件的數據結構。

在任何情況下,做一個從FTP讀取文件的MapReduce作業都很奇怪。 Hadoop的工作原理是因爲數據存儲在Hadoop的文件系統(HDFS)上,該文件系統是一個分佈式文件系統,其中每個文件分成塊並分佈在文件系統的所有節點上。您應該採用的方式是將該文件下載到您的HDFS並執行您的MapReduce作業。

+0

謝謝迭戈..然而,我陷入了一個不同的場景。我們有一個從FTP服務器傳輸數據的應用程序。我們希望使用mapreduce實際將服務器中的數據導入到我們的hdfs中。任何指針呢? – RadAl

相關問題