一、填空题
1、在MapReduce中, Map 阶段负责将任务分解, Reduce 阶段将任务合并。
2、MapReduce工作流程分为 分片 、 格式化数据源 、 执行Map Task 、 执行Shuffle过程 、 写入文件 。
3、Partitioner组件目的是 将key均匀分布在ReduceTask上 。
二、判断题
1、Map阶段处理数据时,是按照Key的哈希值与ReduceTask数量取模进行分区的规则。(√)
2、分区数量是ReduceTask的数量。(√)
3、在MapReduce程序中,必须开发Map和Reduce相应的业务代码才能执行程序。(×)
三、选择题
1、MapReduce适用于( D )
A、任意应用程序
B、任意可以在Windows Server 2008上的应用程序
C、可以串行处理的应用程序
D、可以并行处理的应用程序
2、下面关于MapReduce模型中Map函数与Reduce函数的描述正确的是( A )
A、一个Map函数就是对一部分原始数据进行指定的操作。
B、一个Map操作就是对每个Reduce所产生的一部分中间结果进行合并操作。
C、Map与Map之间不是相互独立的。
D、Reducee与Reduce之间不是相互独立的。
3、MapReduce自定义排序规则需要重写下列那项方法( B )
A、readFields()
B、 compareTo()
C、 map()
D、reduce()
四、简答题
1、简述HDFS Block与MapReduce split之间的联系。
答:Block:HDFS中最小的数据存储单位,默认是128M;
Split:MapReduce中最小的计算单元,默认与Block一一对应。两者的对应关系是任意的,可有用户控制。
2、简述Shuffle工作流程。
答:(1)map结果写入环形内存缓冲区,当内存不足以存储所有数据时,将数据批量**溢写**到磁盘。为了尽量减少IO消耗,所以在数据写入磁盘之前会先写入缓冲区,待缓冲区达到==阈值(0.8)==后才批量将数据写入磁盘。
(2)partition分区。在数据写入磁盘之前会先进行分区,一个分区对应一个reducer,期望数据在多个reducer之间达到均衡。
(3)排序(sort)和合并(combine)。数据经过分区之后,先按照key进行排序,如果用户指定了Combiner,再进行combine操作。
(4)溢写(spill)。经过排序和合并之后的数据会写入磁盘文件,每次spill都会产生一个文件。一个分区上的文件也叫一个segment。
(5)归并(merge)。一个map最终会生成一个磁盘文件,由于多次spill会产生多个文件,所以需要将这些文件进行merge,最终形成一个有序的大文件。merge过程中有可能遇到相同key的数据,如果用户设置了Combiner,会执行combine操作。
以上1-5是map阶段的shuffle,以下是reduce阶段的shuffle步骤
(1)拷贝(copy)。当某个map完成后,reduce不断拉取map生成的文件到ruduce。和map阶段一样先将数据写入环形内存缓冲区,当达到阈值时,将数据批量溢写到磁盘。
(2)排序(sort)和归并(merge)。sort是伴随copy动作时执行的,由于map的输出是有序的,所以copy是进行sort消耗很低。当溢写数据到磁盘之前,如果用户设置了Combiner会先进行combine,然后将数据写入磁盘文件。当接受完map数据会生成多个溢写磁盘文件,将这些文件归并merge,合并成一个有序的大文件。