Tez是Apache最新开源的支持DAG作业的计算框架,是Stinger的一部分,它建立在Apache Hadoop 2.0(YARN)之上。 TEZ的核心思想是将Map和Reduce两个操作进一步拆分,即Map被拆分成Input、Processor、Sort、Merge和Output, Reduce被拆分成Input、Shuffle、Sort、Merge、Processor和Output等,这样,这些分解后的元操作可以任意灵活组合,产生新的操作,这些操作经过一些控制程序组装后,可形成一个大的DAG作业。
TEZ提供了一种AppMaster来处理任务定义,通过调用YARN的ResourceManager来分配工作容器并调用YARN的NodeManagers来实际执行所分配容器的工作处理。Tez是从MapReduce计算框架演化而来的通用DAG计算框架,可作为MapReduce/Hive/Pig等系统的底层数据处理引擎,它天生融入Hadoop 2.0中的资源管理平台YARN,且由Hadoop 2.0核心人员精心打造,势必将会成为计算框架中的后起之秀。
Tez是一种建立在Apache Hadoop 2.0(YARN)之上的框架。YARN提供了集群管理和资源分配服务,Tez提供了一种新的AppMaster来处理新的任务定义。如图1是Tez架构图。
图1 Tez架构
Tez将Map task和Reduce task进一步拆分,
图2 Tez任务划分
Tez的task由Input、processor、output阶段组成,可以表达所有复杂的map、reduce操作。
图3 Tez任务执行过程
这样,这些分解后的元操作可以任意灵活组合,产生新的操作单元Task.
Tez新引入的优化机制包括:
(1) 动态确定任务基数
DAG中每个Vertex需启动一定数目的任务并行处理对应的数据,Tez可根据用户设置的策略动态确定每个Vertex需启动的任务数,比如根据数据量、最大并发数等。
(2)解决数据倾斜问题
数据倾斜是分布式计算中影响数据处理效率的最大顽疾之一,很多工作在这方面开展但一直没有非常好的解决方案。目前看来,比较有效的方案是在应用程序层解决,即用户根据实际数据特点编写最有效的应用程序,尽可能避免数据倾斜问题。
数据倾斜的一种典型场景是大批量的数据的key值是相同的,这使得按key划分数据后,大量数据落到一个任务上,从而使得该任务成为“拖后腿”任务,甚至导致运行失败。为了解决该问题,在数据引擎层面,Tez可根据每个任务的处理数据量调整占用的资源,对于那些处理数据量大的任务,可多分配一些资源。
优点
(1) 丰富的数据流编程接口;
(2) 扩展性良好的“Input-Processor-Output”运行模型;
(3) 简化数据部署(充分利用了YARN框架,Tez本身仅是一个客户端编程库,无需事先部署相关服务);
(4) 性能优于MapReduce;
(5)优化的资源管理(直接运行在资源管理系统YARN之上);
(6) 动态生成物理数据流(dataflow);
缺点:无相关资料。
Tez/Stinger为Hive添加了更多的SQL分析能力,但是最关键的方面在于底层基础设施的提升:一个优化的执行引擎,一个列式文件格式,能够避免MapReduce的运行瓶颈。它针对Hadoop的分析应用支持最大程度的SQL语义语法,使得Hive能够成为一个综合和适合的SQL引擎以满足企业级别的需求。
Tez提供了可解决传统map-reduce任务的执行环境,能解决基于DAG的任务,并提供了多种接口,同时提供了Vertex Input、Vertex Output、Sorting、Shuffling、Merging、Data transfer五种基元来支持DAG API。