什么是Tez
MapReduce(下面简称MR)的缺点很明显,性能比较弱,效率不高。 原因在于它只能把Job抽象成为Map, Reduce,但是复杂的任务可以有几十个MR任务,中间可能会有很多重复的任务。 而且MR并不支持对于整个pipeline的任务进行优化。比如说若干个MR任务的组合可以合并成一个来计算,这样就减少了数据的读写,传输的开销。归根结底,是因为Hadoop不支持任务的DAG(有向无环图)描述。
Tez提供了一个可重用,灵活的框架来支持数据流模型。他的主要特点是:
- 用户可以将自己的Job描述成一个DAG,这样可以进行更灵活的优化和配置。
- 提供了灵活的Runtime API。Tez支持在Runtime对DAG的配置进行修改,比如对于partitition的调整。
- 提供了data-locality感知, 资源重用和错误容忍。
术语介绍
首先介绍下Tez中会用到的术语:
- DAG: 有向无环图, 用来表示数据处理的工作流。 而DAG中边的方向就是数据流动的方向。
- Vertex: 有向无环图中的节点代表逻辑上数据处理中的一步。可以是数据的过滤,转换等。
- Logical Vertex: 一个Logical包含一系列的Vertex。
- Task: 一个Vertex对应的逻辑上的处理在实际计算的时候,会被分拆成若干个Tasks并运行在不同机器上。
- Physical DAG: Physical DAG包含了一个Logical Vertex中展开的Tasks. //狗屁不通,修改
- Edge: Logical Vertex中的edge代表了上下游Vertex间的数据依赖。 Tasks之间的edge则代表了不同Tasks之间数据的流动。