面试该岗位,主要问了以下几个问题:
1、MapReduce 的shuffle过程
回答:map线程数据首先会复制到一个环形缓冲区,在环形缓冲区中进行分区和排序,当环形缓冲区达到一个阈值时数据会溢写到磁盘,这个过程可能会有conbine操作,最终每个分区的数据生成一个数据已经排序的文件。之后是reduce的shuffle过程,reduce线程将磁盘中每个分区的数据复制到内存缓冲区,进行排序,按照key进行聚合,然后输出数据作为reduce线程的输入数据,经过reduce计算之后生成文件存放到hdfs上。
2、1G的文件256m的分片大小,最终分成几个map线程;map和reduce线程数量控制;
回答:通过mapred.reduce.task或者mapred.max.split.size参数控制;
通过设置mapred.reduce.task来控制reduce数
3、yarn container的内存区域
回答:这个不是很清楚。
4、有没有看过大数据组件的源码
回答:看过yarnchild启动过程部分源码,曾经做过numa绑定yarnchild线程的优化;
5、map的分区可以怎么设计
回答:mapreduce程序partition方法可以指定分区方式,可以对某个key做哈希计算进行分区。