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()方法,对每个key进行处理。
Map数量
hive的Map数量与分片大数量一致,一个分片生成一个Map任务,分片不是数据本身,是记录了数据的位置和长度,长度用于考虑优先运行,位置用于查找数据,一个分片大小的计算取决于使用的Input
Hive MapReduce任务计算原理与优化策略

本文详细解析了Hive中Map任务和Reduce任务的数量计算原理,包括MapReduce的基本步骤,Map任务数量与分片大小的关系,以及Reduce任务数量的估算策略。Hive的Map数量基于输入文件的分片,而Reduce数量则考虑了用户配置和数据输入大小。针对小文件问题,Hive会尝试合并小文件以减少Map任务。在调整任务数量时,需平衡资源利用和任务并发度,避免空文件浪费或小文件过多的问题。
最低0.47元/天 解锁文章
714

被折叠的 条评论
为什么被折叠?



