Tez产生背景与定位
在开源界,当前最广泛使用的计算模型是MapReduce,该模型将计算过程抽象成Map和Reduce两个阶段,并通过shuffle机制将两个阶段连接起来。但在一些应用场景中,为了套用MapReduce模型解决问题,不得不将问题分解成若干个有依赖关系的子问题,每个子问题对应一个MapReduce作业,最终所有这些作业形成一个有向图(DAG,Directed Acyclic Graph),在该DAG中,由于每个节点是一个MapReduce作业,因此它们均会从HDFS上读一次数据和写一次数据(默认写三份),即使中间节点产生的数据仅是临时数据。很显然,这种表达依赖关系作业的方式是低效的,会产生大量不必要的磁盘和网络IO。
为了更高效地运行存在依赖关系的作业(比如Pig和Hive产生的MapReduce作业),减少磁盘和网络IO,Hortonworks开发并开源了DAG计算框架Tez[1]。
在实际大数据处理场景中,很多问题需转化成DAG模型解决,典型的有两类,分别是:
- 用户编写的应用程序:很多场景下,用户编写的多个MapReduce应用程序之间存在依赖关系或者为了使用MapReduce解决一个问题,不得不将问题转化成一系列存在依赖关系的MapReduce作业,而为了表达这些作业的依赖关系,用户通常借助于像Oozie