编译原理蒋宗礼pdf_深入剖析Tez原理

本文详细介绍了Apache Tez的产生背景、原理,特别是DAG的概念、Runtime API的输入处理、处理器和输出,以及如何进行Runtime优化。Tez允许在任务运行时动态调整执行计划,例如动态修改Reducer并行度和实现任务的预先启动。此外,文章还讨论了Tez在Hive上的应用及其优缺点,包括避免中间数据写回HDFS以减少执行时间、提高任务模型灵活性以及容器复用机制。
摘要由CSDN通过智能技术生成

916c874a44576691eef4f8954597b27e.png

一、产生背景

  • MR性能差,资源消耗大,如:Hive作业之间的数据不是直接流动的,而是借助HDFS作为共享数据存储系统,即一个作业将处理好的数据写入HDFS,下一个作业再从HDFS重新读取数据进行处理。很明显更高效的方式是,第一个作业直接将数据传递给下游作业。

bcf05cc4b104c10d8638e665fae71e20.png

4cbe7b96ac41686d9ffdbebbe483e2ad.png
  • MR 默认了map和reduce阶段,map会对中间结果进行分区、排序,reduce会进行合并排序,这一过程并不适用于所有场景。
  • 引擎级别的Runtime优化:MR执行计划在编译时已经确定,无法动态调整(?)。然而在执行ETL和Ad-hoc等任务时,根据实际处理的表大小,动态调整join策略、任务并行度将大大缩短任务执行时间。

二、原理

2.1 DAG

https://hortonworks.com/blog/expressing-data-processing-in-apache-tez/ - Vertex: 定义了用户逻辑(如:map/reduce)与相关的资源与环境

  • Edge:定义了上下游Vertex之间的连接方式。
  • Edge相关属性:
    • Data movement:定义了producer与consumer之间数据流动的方式。
      One-To-One: 第i个producer产生的数据,发送给第i个consumer。这种上下游关系属于Spark的窄依赖。
      Broadcast: producer产生的数据路由都下游所有consumer。这种上下游关系也属于Spark的窄依赖。
      Scatter-Gather: producer将产生的数据分块,将第i块数据发送到第i个consumer。这种上下游关系属于Spark的宽依赖。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值