Merge pull request #63 from haifeiWu/patch-2

Update ch10.md
This commit is contained in:
Feng Ruohang 2020-10-23 22:39:47 +08:00 committed by GitHub
commit 0bdbdc46d4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -281,7 +281,7 @@ top5.each{|count, url| puts "#{count} #{url}" } # 5
Hadoop的各种高级工具如Pig 【30】Hive 【31】Cascading 【32】Crunch 【33】和FlumeJava 【34】也能自动布线组装多个MapReduce阶段生成合适的工作流。
### Reduce连接与分组
### Reduce连接与分组
我们在[第2章](ch2.md)中讨论了数据模型和查询语言的联接,但是我们还没有深入探讨连接是如何实现的。现在是我们再次捡起这条线索的时候了。
@ -363,7 +363,7 @@ top5.each{|count, url| puts "#{count} #{url}" } # 5
### Map连接
### Map连接
上一节描述的连接算法在Reducer中执行实际的连接逻辑因此被称为Reduce端连接。Mapper扮演着预处理输入数据的角色从每个输入记录中提取键值将键值对分配给Reducer分区并按键排序。
@ -395,13 +395,13 @@ top5.each{|count, url| puts "#{count} #{url}" } # 5
分区散列连接在Hive中称为**Map端桶连接bucketed map joins【37】**。
#### Map合并连接
#### Map合并连接
如果输入数据集不仅以相同的方式进行分区,而且还基于相同的键进行**排序**则可适用另一种Map端联接的变体。在这种情况下输入是否小到能放入内存并不重要因为这时候Mapper同样可以执行归并操作通常由Reducer执行的归并操作按键递增的顺序依次读取两个输入文件将具有相同键的记录配对。
如果能进行Map端合并连接这通常意味着前一个MapReduce作业可能一开始就已经把输入数据做了分区并进行了排序。原则上这个连接就可以在前一个作业的Reduce阶段进行。但使用独立的仅Map作业有时也是合适的例如分好区且排好序的中间数据集可能还会用于其他目的。
#### MapReduce工作流与Map连接
#### MapReduce工作流与Map连接
当下游作业使用MapReduce连接的输出时选择Map端连接或Reduce端连接会影响输出的结构。Reduce端连接的输出是按照**连接键**进行分区和排序的而Map端连接的输出则按照与较大输入相同的方式进行分区和排序因为无论是使用分区连接还是广播连接连接较大输入端的每个文件块都会启动一个Map任务