MapReduce相关问题思考

1、Shuffle的定义是什么?

     每个map task都有一个内存缓冲区,存储着map的输出结果,当缓冲区快满的时候需要将缓冲区的数据以一个临时文件的方式存放到磁盘,当整个map task结束后再对磁盘中这个map task产生的所有临时文件做合并,生成最终的正式输出文件,然后等待reduce task来拉数据。

   2、map task与reduce task的执行是否在不同的节点上?

    大部分map task与reduce task的执行是在不同的节点上。当然很多情况下Reduce执行时需要跨节点去拉取其它节点上的map task结果。

   3、Shuffle产生的意义是什么?

    跨节点拉取数据时,尽可能减少对带宽的不必要消耗。减少磁盘IO对task执行的影响。

   4、每个map task都有一个内存缓冲区,存储着map的输出结果,当缓冲区快满的时候需要将缓冲区的数据该如何处理?

    新开启一个线程将数据溢写到磁盘。

   5、在map task执行时,它是如何读取HDFS的?

    在map task执行时,它的输入数据来源于HDFS的block,当然在MapReduce概念中,map task只读取split。

   6、读取的Split与block的对应关系可能是什么?

    Split与block的对应关系可能是多对一,默认是一对一。

   7、MapReduce提供Partitioner接口,它的作用是什么?

    根据key或value及reduce的数量来决定当前的这对输出数据最终应该交由哪个reduce task处理。默认对key hash后再以reduce task数量取模。默认的取模方式只是为了平均reduce的处理能力,如果用户自己对Partitioner有需求,可以订制并设置到job.set(..)。

   8、溢写是在什么情况下发生?

    当map task 的输出结果大于这个内存缓冲区的阀值是(buffer size * spill percent = 100MB * 0.8 = 80MB)溢写线程启动。

   9、溢写是为什么不影响往缓冲区写map结果的线程?

    1、溢写为新开启线程,

    2、溢写过程中会剩余20M继续写入,对缓存区map的结果无影响

   10、当溢写线程启动后,需要对这80MB空间内的key做排序(Sort)。排序是MapReduce模型默认的行为,这里的排序也是对谁的排序?

    排序是MapReduce模型默认的行为,这里的排序也是对序列化的字节做的排序。

   11、哪些场景才能使用Combiner呢?

    Combiner只应该用于那种 Reduce的输入key/value与输出key/value类型完全一致,且不影响最终结果的场景。比如累加,最大值等。Combiner的使用一定 得慎重,如果用好,它对job执行效率有帮助,反之会影响reduce的最终结果。

   12、Merge的作用是什么?

    每次溢写会在磁盘上产生一个溢写文件,Map 输出结果很大时,会有多次这样的溢写文件到磁盘上,当 Map task 结束完成时,内存缓冲区的数据同样也会溢写到磁盘上,结果磁盘会有一个或多个溢出的文件,同时合并溢出的文件。(如果map输出的结果很少,map完成时,溢出的文件只有一个)合并这个过程就叫做Merge。

    merge是将多个溢写文件合并到一个文件,所以可能也有相同的key存在,在这个过程中如果client设置过Combiner,也会使用Combiner来合并相同的key。

   13、reduce中Copy过程采用是什么协议?

    确认map task是否完成为RPC协议,拷贝文件为HTTP协议

   14、.reduce中merge过程有几种方式,与map有什么相似之处?

    合并后会生成一个文件,可能在内存,也可能在磁盘,默认在磁盘。

    这里和map中内存溢出一样,当内存中的数据达到一定的阀值,就会启动内存到磁盘的溢出....合并Merge。这个过程我们设置Combiner,也会启用的,然后在磁盘中生成很多一些文件。值到map端没有数据才结束。然后启动第三种磁盘到磁盘的merge方式生成最终的那个文件。

   15、溢写过程中如果有很多个key/value对需要发送到某个reduce端去,那么如何处理这些key/value值

    有很多个key/value 对需要发送到某个reduce端去,那么需要将这些key/value值拼接到一块,减少与partition相关的索引记录
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值