在大数据离线计算平台上每天会有上万个任务在执行,对cpu、内存、存储资源由极大的消耗,那么如何降低资源使用率、提高计算效率,就涉及到计算优化的问题。从系统优化方面来讲:
HBO
1)HBO 是根据任务的历史执行情况优化资源分配
2)HBO方案提出:
① 在Hadoop中map task与reduce task的task个数分配是根据用户提交的任务总数据量和每个map task能处理的数据量决定的。
② 这种方式是一种平均的资源分配方法,但是仔细分析每一个map、reduce任务会发现它们处理的数据量会有很大差距,大部分的任务节点仅仅处理一小部分数据,而有些reduce节点处理的数据量又太多,从而导致整个任务的执行时间被拖慢,浪费了资源。总结成一句话:小数据量任务资源浪费、大数据量任务资源不足。
③ 这些任务都是定时在是计算平台上执行的,由此想到了利用任务历史执行情况更合理的优化资源分配的方法
3)HBO 分配资源方法:
① 核心思想:基础资源评估+加权资源评估
② 基础资源评估:对于map任务的数量根据用户提交任务的数据量和每个map任务期望执行的数据量来估算;对于reduce任务个数由map任务的输入数据量估算或者根据近几天map任务对reduce任务的输出数据量的平均值进行估算。
③ 加权资源评估:通过当前任务近期执行速度与任务预期执行速度作比较,如果小于预期则等比例添加资源,估算出最终的任务数量
CBO
1)基于代价的优化器,根据收集的信息选择代价最小的执行方式
2)CBO组成:
① Meta Manager:优化器在选择优化策略时会使用一些元数据,如数据表元数据,分区元数据,统计信息元数据等。
② Statistics:为优化器提供准确的统计信息,进行优化策略的选择
③ Rule Set:每一条优化规则都是特定场景下的优化点,优化器根据代价模型选择启用哪些规则。规则分为:
+ Substitute Rule:优化了一定好的规则
+ Explore Rule:优化后需要考虑各种因素的规则
+ Build Rule:优化后不能再次优化的规则
④ Volcano Planner Core:把所有信息统一处理,根据代价模型,涉及代价最小的方案
3)Volcano Planner Core:
① planner需要的数据有规则集、统计数据(每个节点元数据、RowCount值、Distinct值等)、代价模型(代价即各种资源,如IO开销、cpu等。根据不同的操作符计算不同的代价,然后选择代价最小的策略)
② Planner的输入是查询语句经过编译后生成的计划树
③ 规则匹配:Planner将计划树的每个节点进行注册,注册的同时会在规则集中匹配所有可以匹配的规则,所有与节点可以匹配到的规则加入到队列中
④ 规则应用:从队列中pop出一个匹配的规则进行优化,优化成功产生新的节点,重复之前的注册和匹配过程。Planner会对队列中所有规则进行优化,包括新产生的节点的规则
⑤ 代价计算:发生在产生的新节点注册阶段,计算规则如下:
+ 如果代价不存在或者子节点的代价还没计算,则忽略
+ 如果有代价,则将本身的代价和子节点的代价相加,若小于目前的最优策略,则认为当前节点是最优的。还会对其父节点的代价进行迭代计算,进而估算整条链路的代价