Tez动态图重构详解

原文链接: https://hortonworks.com/blog/apache-tez-dynamic-graph-reconfiguration/

案例研究:自动减少并行性
分布式数据处理本质上是动态的,静态的确定最优并发和数据迁移方法是非常困难的。在运行时可以获得更多的信息,比如数据样本和大小,这可能帮助我们进一步优化执行计划。我们也承认,Tez本身不能总是有智慧的执行这些动态优化。Tez的设计包括支持从Task收集相关信息的可插拔顶点管理模块和在运行时调整数据流图优化性能和资源使用。该图展示了如何通过观察实际数据输出和每个Reduce任务的负载,在Mapreduce作业中确定适当数量的Reducer数量。
Tez动态图重构详解_第1张图片
性能与效率动态图重构
Tez设想的可能给集群或前一步计算结果提供资源最有效利用和高性能方法的运行技术。此功能是使用几个基本构件构建的。
  • 可插拔Vertex管理模块:Tez控制流结构包含一个per-vertex可插拔模块,用于深刻理解数据和计算的用户逻辑。vertex状态机在状态重要转变(如vertex开始、源任务结束等)时调用用户模块。在这点上用户逻辑可以检查运行时状态并给主Tez执行引擎提供关于属性建议(如vertex作业并行)。
  • 事件流体系架构:Tez定义了一组由vertices、Tasks等组成的事件,它们彼此之间可以相互通信。这些事件从源到目标组件路由依赖于在Tez控制平面上一个明确的路由单元。这样的一个是VertexManager事件可以用来发送任何用户自定义的负载到给定顶点的一个VertexManager。
案例研究:减少任务并行和减少slow-start
对Mapreduce作业确定减少Reduce任务的正确数目是一个长期存在的问题。Map任务产生的输出不是事先知道的,因此很难在作业执行之前确定。当有几个计算阶段,每个阶段都需要确定减少并行时,这就变得更加困难了。我们把它作为一个案例研究来证明Tez的图重构能力。
减少任务并行
Tez有一个ShuffleVertexManager,理解基于分区完成了被用于Mapreduce的shuffle传输的哈希语义。Tez定义了一个VertexManager事件可以用来发送任意用户负载到给定vertex的VertexManager,分区任务(Map任务)使用这个event发送分区产生的输出大小等统计值到ShuffleVertexManager,Manager收到这些事件尝试对所有任务生成的最终输出统计数据进行建模,然后,它可以建议vertex state machine减少节点(如果需要),这个想法是先进行分区然后在运行时确认一个正确值,vertex controller可以取消额外的任务并照常执行。
Tez动态图重构详解_第2张图片
减少Slow-start/Pre-launch
slow-start是MapReduce的一个功能,在所有map完成之前启动Reudce。假设Reduce可以开始获取已经完成的Map输出,直到剩余的Map全部完成,确定何时启动Reduce是比较棘手的,因为它依赖于Map输出的数据,如此早的运行Reduce是不高效的,因为Reduce获取完数据同时等待剩余的Map运行完成将处于空闲状态。在Tez中,slow-start逻辑是嵌套在ShuffleVertexManager中,当源任务完成时vertex state controller告诉manager,Manager使用这些信息确定何时pre-launch Reduce任务和pre-launch多少个,然后它建议vertex controller。
Tez动态图重构详解_第3张图片


你可能感兴趣的:(tez)