mapreduce 工作流程
mapreduce 工作流程
- 数据预处理。在任务开始前,首先调用类库,将输入文件分为多个分片。1
- 任务分配。JobTracker为集群中空闲的节点分配Map任务或者Reduce任务。设集群中有M个Map任务和R个Reduce任务,Reduce任务数通常小于Map任务数。
- Map任务。Mapper读取自己所属的文件分片,将每一条输入数据转换为键值对,使用Map函数对每一个键值对进行处理,得到一个新的键值对,作为中间结果缓存在当前节点。
- 缓存文件定位。Map任务得到的中间结果被周期性地写入Mapper所在的本地硬盘中,并把文件的存储位置信息经由JobTracker传递给Reducer。
- Reducer拉取文件。Reducer通过位置信息到相应的Mapper处拉取这些文件,将同一key对应的所有取值合并,得到键值组。
- Reduce任务。Reducer将所读取到的键值组使用Reduce函数进行计算,得到最终结果并将其输出。
- 结束。当所有的Map任务和Reduce任务运行完毕后,系统会自动结束各个节点上的对应进程并将任务的执行情况反馈给用户。
impala特性
a.没有使用MapReduce作为底层执行计算框架,虽然MapReduce是非常好的并行计算框架,但它更多地是面向批处理模式,而不是面向交互式的SQL执行模式。
b.与MapReduce相比Impala将整个查询分成一批查询计划树,而不是一连串的MapReduce执行任务,在将查询计划分发之后,Impala采用拉链式的方式拉取计算结果,把结果数据组成执行树并进行流式传递汇集。减少了把中间结果写入磁盘的步骤,最后有从磁盘读取数据的开销。
shuffle机制
shuffle机制是MapReduce框架中的一个核心部分,主要负责将Map阶段产生的数据传递