MapReduce

-
record reader读取到输入文件根据指定FileInputFormat格式解析内容并组织输入的(k,v),不同的输入文件的Key代表的含义不一样好比text的hdfs文件key表示的物理文件的字符偏移量,然后对(k,v)进行自定义的map逻辑处理处理完成后交给collector,丢进环形缓冲区。
-
环形缓冲区溢出的数据落盘成文件的同时会伴随索引文件的更新,索引文件记录的是生成的临时文件:文件号(P0、P1):map输出内容物理偏移量。
以下为环形缓冲区落盘的满足条件。-
当环形缓冲区中的数据量达到一定阈值(如128MB)
-
时间窗口到达一定时间
-
触发线程将缓冲区中的数据进行排序和分区,并将每个分区的数据写入临时文件中。
这种环形缓冲区落盘机制能够充分利用内存进行中间结果的存储和排序,减少了磁盘I/O操作,从而提高了整个MapReduce作业的性能和效率。
-
-
maptask全部处理完毕后,会在map端进行一次全局排序(shuffle),将缓冲区生成的临时文件进行排序合并。
-
如果设置了combiner,则会在溢出和合并时运行设定的reduce计算逻辑(前提是计算逻辑支持提前运算),会大大减少网络传输的文件大小,map->reduce过程中会伴随网络IO甚至跨机架。
-
Reduce任务读取分区文件进行处理,最终输出结果。
- 从上游maptask的输出文件拉取属于自己partition的数据,并将拉取过来的数据进行排序合并。
- GroupingComparator是迭代器判断hasNext的重要依据(是否为同一组数据)。


Hive
执行计划:Sql语句->逻辑执行计划->语法优化->物理执行计划。
sql语句
原生sql语句逻辑执行计划
匹配元数据、数据库方言以及数据位置生成逻辑执行计划。语法优化
根据方言语境以及语义针对性优化Sql语法物理执行计划
根据物理执行引擎转化为物理执行计划(MapReduce/Spark/Tez)
