目录
一、Tez简介
1.1 Tez 是支持 DAG 作业的开源计算框架,它可以将多个有依赖的作业转换为一个作业从而大幅提升 DAG 作业的性能。
从本质上讲,Tez 组成非常简单:
- 数据处理管道引擎,其中一个引擎可以输入,处理和输出实现以执行任意数据处理
- 数据处理应用程序的主机,通过它可以将上述任意数据处理“任务”组合到任务 DAG 中,以根据需要处理数据。
- 总的来说MR任务在map和reduce阶段都会产生I/O落盘,但是Tez就不要这一步骤了。
- Tez采用了DAG(有向无环图)来组织MR任务。核心思想:将Map任务和Reduce任务进一步拆分,Map任务拆分为Input-Processor-Sort-Merge-Output,Reduce任务拆分为Input-Shuffer-Sort-Merge-Process-output,Tez将若干小任务灵活重组,形成一个大的DAG作业。
通过允许诸如 Apache Hive 和 Apache Pig (已停止更新)之类的项目运行复杂的 DAG 任务,Tez 可以用于处理数据,该数据以前需要执行多个 MR 作业,而现在在单个 Tez 作业中(图下的绿色圆圈表示为一个作业),如下所示:
1.2 Tez 计算引擎结构更加类似于Spark,但却有所区别,
Tez包含的组件:
- 有向无环图(DAG)——定义整体任务。一个DAG对象对应一个任务。
- 节点(Vertex)——定义用户逻辑以及执行用户逻辑所需的资源和环境。一个节点对应任务中的一个步骤。
- 边(Edge)——定义生产者和消费者节点之间的连接。边需要分配属性,对Tez而言这些属性是必须的,有了它们才能在运行时将逻辑图展开为能够在集群上并行执行的物理任务集合。
Tez对外提供了6种可编程组件,简介如下:
- Input:对输入数据源的抽象,它解析输入数据格式,并吐出一个个Key/value
- Output:对输出数据源的抽象,它将用户程序产生的Key/value写入文件系统
- Paritioner:对数据进行分片,类似于MR中的Partitioner
- Processor:对计算的抽象,它从一个Input中获取数据,经处理后,通过Output输出
- Task:对任务的抽象,每个Task由一个Input、Ouput和Processor组成
- Master :管理各个Task的依赖关系,并按顺依赖关系执行他们
- 除了以上6种组件,Tez还提供了两种算子,分别是Sort(排序)和Shuffle(混洗),为了用户使用方便,它还提供了多种Input、Output、Task和Sort的实现
二、Tez UI界面
Tez UI界面包括应用详情、DAG有向无环图、Vertices信息、任务详情等信息。
应用详情:
DAG图:
Vertices信息:
Task任务信息:
三、Tez 日志
Tez 日志主要关注一下几个:
- syslog 这是 AM 正常启动之前的日志。
- syslog_dag_{yarn_app_id}_{dag_id} 这是每个 DAG 的日志,一般关注Map Reduce Task的分配过程
- syslog_dag_{yarn_app_id}_{dag_id}_post 这是DAG完成后的日志。
- stdout GC日志,一般关注任务运行时AM处理元数据的负载情况。
欢迎关注微信公众号