·完善的错误处理能力:在分布式环境中由于机器数量巨大,单机发生故障的概率非常高,因此容错能力是调度系统的一个重要能力。为了更好的管理机器状态,提前发现故障机器并进行主动规避,DAG 2.0 通过完整的机器状态管理,完善了机器错误的处理能力DAG 2.0 将机器分为多个状态。并根据一系列不同的指标来触发在不 同状态之间的转换。对于不同状态的机器,根据其健康程度,进行主动规避,计算任务迁移,以及计算任务主动重跑等操作。将机器问题造成的作业运行时间拉长,甚至作业失败的可能性降到最低。
另一方面,在一个 DAG 上,当下游读取数据失败时,需要触发上游的重跑,而在发生严重机器问题时,多个任务的链式重跑,会造成作业的长时间延迟,对于基线作业的及时产出造成严重影响。DAG 2.0 上实现了一套基于血缘回溯的主动容错策略,这样的智能血缘回溯,能够避免了层层试探,层层重跑,在集群压力较大时,能够有效的节约运行时间,避免资源浪费。
·灵活的动态逻辑图执行策略--Conditional join分布式 SQL 中,map join 是一个比较常见的优化,其实现原理对小表避免 shuffle,而是直接将其全量数据 broadcast 到每个处理大表的分布式计算节点上,通过在内存中直接建立 hash 表,完成 join 操作。map join 优化能大量减少额外 shuffle和排序开销并避免 shuffle 过程中可能出现的数据倾斜,提升作业运行性能。但是其局限性也同样显著:如果小表无法 fit 进单机内存,那么在试图建立内存中的hash表时就会因为 OOM 而导致整个分布式作业的失败。所以虽然 map join 在正确使用时,可以带来较大的性能提升,但实际上优化器在产生 map join 的 plan 时需要偏保守,导致错失了很多优化机会。而即便是如此,依然没有办法完全避免 map join OOM 的问题。
基于DAG 2.0 的动态逻辑图执行能力,MaxCompute 支持了 conditional join 功能:在对于 join 使用的算法无法被事先确定时,允许优化器提供一个 conditional DAG,这样的 DAG 同时包括使用两种不同 join 的方式对应的不同执行计划支路。在实际执行时,AM 根据上游产出数据量,动态选择一条支路执行 (plan A or plan B)。这样子的动态逻辑图执行流程,能够保证每次作业运行时都能根据实际作业数据特性,选择最优的执行计划。
以上内容摘自《“伏羲”神算》电子书,点击https://developer.aliyun.com/topic/download?id=873
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
MaxCompute(原ODPS)是一项面向分析的大数据计算服务,它以Serverless架构提供快速、全托管的在线数据仓库服务,消除传统数据平台在资源扩展性和弹性方面的限制,最小化用户运维投入,使您经济并高效的分析处理海量数据。