2013-04-10 62 views
1

我讀了MapReduce維基頁面,我不認爲我完全理解。我知道查詢分爲地圖步驟和縮小步驟。所以要利用這一點,我們應該更多地使用GROUP BY,並將工作從地圖步驟移動到縮小步驟。我不確定這是如何工作的。這似乎很神奇。我想知道一組用於編寫SQL查詢以利用MapReduce的指導原則。如何知道SQL查詢中正在映射的內容以及正在減少的內容?

如何知道哪些子句在地圖步驟或縮小步驟?它背後的理論是什麼?我想理解理論及其內部運作,以便我可以寫出更好的查詢。

回答

0

地圖功能是data preparation stage,其中Mapper可以prepare and filter的數據使它可以通過相同的輸入到reducer function。 Reducer從Mapper獲取輸入,並嘗試減少查詢中指定的數據。 例如reducer將從mapper給出的數據中調整像count,max,min of a column這樣的聚合體。例如我對finding word count for the words not in set a,an and the有要求。

not filtering is done by mapper. 

counting is done by by reducer. 

根據我的理解Hive查詢中的三件事會導致reducer函數。

1.group by 

2.join 

3.multi row function 

其餘大部分將導致Mapper功能。

+0

什麼是多行功能?這與聚合函數相同嗎? – Strawberry 2013-04-12 01:17:42

0

Hive會盡可能根據查詢優化map/reduce的數量(以及map和reduce之間的工作)。如果你想控制map/reduce行爲,你可以在java中編寫自己的map/reduce,Hive的要點是它可以讓你使用熟悉的語法(SQL)來表達你想要得到的結果,創建一個有效的地圖/縮小序列以獲得該結果

出於性能方面的原因,您可能希望在地圖階段儘可能多地進行工作 - 因爲通常有更多的mappers而不是reducers,並且您不需要移動數據周圍。請注意,有時聚合函數可以部分地與合成器在地圖端執行的(雖然我認爲蜂巢處理這種不同) 從Hive site

地圖端聚合的集團通過

hive.map。 aggr控制我們如何進行聚合。默認值是false。 如果設置爲true,則Hive將直接在地圖任務中執行第一級聚合 。這通常會提供更好的效率,但 可能需要更多內存才能成功運行。

set hive.map.aggr = true; (*)FROM table2