一、任務描述
我們有兩個表,雇員表和部門表。
雇員表:
| Name | Empld | DeptName |
|---|---|---|
| Harry | 3415 | 財務 |
| Sally | 2241 | 銷售 |
| George | 3401 | 財務 |
| Harriet | 2202 | 銷售 |
部門表:
| DeptName | Manager |
|---|---|
| 財務 | Gem |
| 銷售 | Hans |
| 生產(chǎn) | Charles |
它們由公共字段DeptName,所以有自然連接條件。
具體做法是,以DeptName相等與否為依據(jù),將雇員表的每一行依次和部門表匹配,每次匹配成功即輸出一行結(jié)果。最終輸出自然連接結(jié)果如下表
| Name | Empld | DeptName | Manager |
|---|---|---|---|
| Harry | 3415 | 財務 | Gem |
| Sally | 2241 | 銷售 | Hans |
| George | 3401 | 財務 | George |
| Harriet | 2202 | 銷售 | Hans |
二、MapReduce實現(xiàn)
1. Split&RR
這里假設(shè)每個表為一個Split(可以拆更多)。然后做RR將關(guān)系表轉(zhuǎn)為鍵值對:表名為key,其他字段組成的元組為value(注意多字段寫入元組,所以還是value而非value list)。
雇員Split&RR結(jié)果
<"雇員表", (("Harry", 3415, "財務"),
("Sally", 2241, "銷售"),
("George", 3401, "財務"),
("Harriet", 2202, "銷售"))>
部門Split&RR結(jié)果
<"部門表", (("財務", Gem),
("銷售", Hans),
("生產(chǎn)", Charles))>
2. Map
將Split&RR結(jié)果輸入Map函數(shù)。因為有兩個Split所以有兩個Map任務。Map的輸出格式為鍵值對,邏輯為:公共字段DeptName為key,value為表名和其他部分組成的元組。
雇員Map結(jié)果
<"財務", ("雇員表", (Harry, 3415))>
<"銷售", ("雇員表", (Sally, 2241))>
<"財務", ("雇員表", (George, 3401))>
<"銷售", ("雇員表", (Harriet, 2202))>
部門Map結(jié)果
<"財務", ("部門表", (Gem))>
<"銷售", ("部門表", (Hans))>
<"生產(chǎn)", ("部門表", (Charles))>
3. Shuffle
將各Map中,有相同key的歸并到一起,輸出<key, value-list>格式。
雇員Shuffle結(jié)果
<"財務", <("雇員表", (Harry, 3415)), ("雇員表", (George, 3401))>>
<"銷售", <("雇員表", (Sally, 2241)), ("雇員表", (Harriet, 2202))>>
部門Shuffle結(jié)果
<"財務", <("部門表", (Gem))>>
<"銷售", <("部門表", (Hans))>>
<"生產(chǎn)", <("部門表", (Charles))>>
4. Reduce
Reduce的邏輯是:輸入中,key相同,但value list中表名項不同value的做連接(注意Reduce是不直接記錄輸入從哪個Map來的,而且原始表可以拆分到更多Map中);輸出的key是新行號(比如這里假設(shè)要求以Empld升序排列),value就是把其他部分的元組和輸入鍵合起來(注意表名只是用于判定,輸出結(jié)果不需要)
<1, (Harriet, 2202, Hans, "銷售")>
<2, (Sally, 2241, Hans, "銷售")>
<3, (George, 3401, Gem, "財務")>
<4, (Harry, 3415, Gem, "財務")>
三、其他常見應用場景
關(guān)系代數(shù)運算(選擇、投影、布爾、連接等)、矩陣運算、分組聚合運算等等。
四、執(zhí)行方式
在Hadoop執(zhí)行MapReduce任務的方式有很多??梢灾苯邮褂胹hell命令,也可以生成jar包,或者編寫Python腳本;另外,Pig和Hive提供類SQL語句,框架可將其自動轉(zhuǎn)換為MapReduce任務。用戶可以酌情選擇。

Reference:
https://www.icourse163.org/learn/XMU-1002335004#/learn/content?type=detail&id=1214310155&sm=1