Hive中Map任务和Reduce任务数计算原理
MapReduce原理
-
Map阶段(以
FileInputFormat
为例)
步骤:map, partition, sort, combinerInputFormat
负责计算分片,一个分片对应一个Map任务,InputFormat
而且还负责创建RecordReader
,通过RecordReader
的next()
方法,然后循环调用map()
方法map()
方法的输入为一行文本,处理的结果先是写到内存缓冲区,达到阈值之后,溢写到磁盘,如果多次溢出,则会有多个溢出文件,这些溢出文件经过了分区,排序,而且还可能作过Combiner
,map任务结束之后,多个溢出文件会合并成一个,结果写在本地
-
Reduce阶段
步骤:copy, sort, reduce- reduce阶段先会进行copy,如果copy过来的文件很小,则直接copy到内存中,如果文件较大,则copy到磁盘
- copy完成之后,会进行一个归并,由于在map端已经作过排序,所以,归并其实是在将多个有序的文件合并成一个有序的文件,这个文件中,一个key会生成一条记录,value为这个key对应的数组
- 对归并后的文件循环调用
reduce()