在我的問題我有100TB的數據進行處理。該數據集中的每個文件大約爲1MB,並且可以屬於我們定義的超過10,000個不同「組」中的3個。每組文件都需要一起處理,組中可以有幾個文件到幾百個文件。由於我們有成千上萬個這樣的組織,我們認爲這是MapReduce的一個好選擇。MapReduce:Map-only還是Reduce-only?
我看到的東西兩種可能的方法來建立這個工作(也許還有更多),Hadoop等:
僅映射的:我們存檔按組的文件,因此分裂和隨後的映射是在集團層面完成的。由於每個地圖作業都有整個組,所以它可以自己完成處理,並且我們不需要減少作業。但是我發現這個解決方案存在一些問題。首先,由於文件最多可以存在3個組,除了Hadoop的複製因素之外,按組歸檔可能會導致存儲開銷增加三倍。此外,像這樣歸檔數據會使其在其他處理文件的應用程序中有所不同。
減少,僅:據我瞭解,這種模式意味着一個簡單的「身份」映射和數據密集型減速。在此解決方案中,文件將無序存儲在磁盤上,映射程序將收到一組要處理的文件。然後,映射器將文件讀入內存(至少是它的頭文件信息)以確定它屬於哪個組,然後發出(組,文件)對以減少。減速器將負責處理這些組。但是,我擔心我們可能會失去數據局部性的好處,或者通過走這條路線而導致數據流量太大而導致網絡停滯。
這兩種方法都有效嗎?如果是這樣,哪個會更受歡迎?具體來說,我覺得我很瞭解Map-only解決方案的優點和缺點,但不是僅限於Reduce。我不確定「數據本地」如何減少工作,或者如果認爲在減少任務中執行「繁重工作」是不好的做法。
真棒,這絕對回答了我關於將數據處理卸載到減速器的成本的問題。這聽起來像是,一般來說,你想嘗試在mappers中完成大部分工作,對嗎?確切地說, –
。我總是喜歡在mapper上執行大部分工作,並儘量減少傳遞給reducers的數據。 –