2013-05-02 37 views
4

我知道在Hadoop中,大輸入文件分割成小文件,並通過映射函數在不同節點中處理。我也知道我們可以定製InputSplit。我想知道的是,如果InputSplit可以進行以下類型的自定義:Hadoop中的輸入分割定製

我有一個大的輸入文件進入Hadoop,我想要一個文件的子集,即文件中的一組行跟隨每個輸入分割。我的意思是大文件的所有數據塊都應該包含這些行,不管文件分裂的方式如何。

爲了使我的問題更加清晰,東西一樣,如果我們需要比較與該文件內容的其餘部分輸入文件的一部分(比如A),在這種情況下,所有InputSplit S中的要去map功能需求有這A部分與它進行比較。 請在此引導我。

回答

1

理論上可以將您的大文件(A, B, C, D, ...)拆分爲拆分(A, B), (A, C), (A, D), ...。但是,您必須爲此編寫大量自定義類。目前FileSplit(其延伸InputSplit)基本上表示file的分割開始於位置start並且具有固定的length。對文件的實際訪問由RecordReader完成,即LineRecordReader。所以你必須實現代碼,它不僅會讀取實際的分割,還會讀取文件的頭文件(部分A)。

我認爲,你正在尋找的方法是不切實際的。記錄閱讀器僅訪問位置(開始,開始+長度)的原因是數據局部性。對於非常大的文件,零件AZ將位於兩個不同的節點上。

取決於部分A的大小,更好的想法是將該公共部分存儲在DistributedCache中。通過這種方式,您可以高效地訪問每個映射器中的公共數據。有關更多信息,請參閱javadoc和http://developer.yahoo.com/hadoop/tutorial/module5.html#auxdata

0

這裏是我簡單探討Hadoop MapReduce的工作原理。

假設你有一副撲克牌,我們想按照套裝順序排序,然後按順序排列,就像當你買到一個全新的套牌一樣。

的Hadoop與1映射/ 1減速

你把甲板上,爲了它自己

的Hadoop與1映射/ 2減速齒輪(將映射基於顏色,2種顏色,2個減速)

你拿着套牌,給我所有的黑卡和其他所有的紅卡。我點了我的名片給他們,他也這樣做。你把2放在一起。

的Hadoop與2映射器/ 4減速齒輪(要根據西裝地圖)

你和我一半的甲板分裂甲板。我們每個人都把我們的套牌分成4堆。每個人都會穿上西裝並訂購。 4堆將返回,最後一步將它們分類爲我們想要的。

所以是的,「減速器」部分中的所有數據都必須有一些常見的部分,這是您基於的映射部分。可能映射的東西是白天,或在我的情況下,通過顏色或西裝。

+0

這與OP有關輸入分割和文件開始處常見數據的問題有何關係? – harpun 2013-05-02 15:27:33

+0

我不確定OP的MR系統知識。想象一下,根據OP – 2013-05-03 00:56:37

+0

的任何反饋,我們將開始真正的基礎並從那裏開始構建。感謝以示例形式給出的解釋MR。但是,我一直在尋找有關harpun提供了概述的InputSplit問題。 – 2013-05-03 03:00:17