【Dr.Elephant中文文档-7】自动调优
- 2019 年 12 月 26 日
- 筆記
1.目标
Dr.Elephant
这个项目希望构建一个可以自动优化hadoop mapreduce
相关函数的调优框架。在这种情况下,是为了函数消耗最少的资源来完成作业。我们还希望在未来的版本将作业时间也作为函数资源消耗的参考指标。我们使用迭代算法和粒子群优化算法进行自动调优。这些迭代通过分析作业的多次运行结果来完成,我们已经在15-20次的作业中优化了20-30%的资源。
自动优化从作业的默认参数开始,并且在每次运行之后计算判断当前参数是否适合,并且根据算法建议新的参数。为了与Dr.Elephant
交互,开发了getCurrentRunParameters
新API
,它返回给定作业当前运行的参数。
2.组件
2.1.守护进程
自动调优模块中有以下4个守护进程:
- 基线计算:该
Daemon
通过Dr.Elephant
的历史数据平均值来计算新作业应当消耗的资源和时间 - 作业完成检查器:一旦修改了新的调优参数来执行作业,该
Daemon
将继续轮询作业直到完成。对于Azkaban
调度器则使用Azkaban rest API
- 打分器(
Fitness Computation Daemon
):一旦作业完成(成功/失败),该Daemon
将根据作业消耗的资源和数据大小来评判参数集是否合适 - 参数生成器(
Param Generator
):一旦设置好当前的参数集,该Daemon
就会生成新的参数建议。目前我们使用PSO
算法进行新的参数建议。
2.2.Rest API
有个getCurrentRunParameters
的新API
,它从数据库获取建议的参数并将其返回。目前,这是外部系统和Dr Elephant
之间唯一的自动调优交互。
自动调优的测试版本将支持以下特性:
- 目前支持
Pig Script
优化 - 支持
Azkaban
调度器 - 支持全局开启或关闭自动调优
- 约束应用参数确保不会因为自动调优而导致作业失败
- 如果参数超出允许资源使用/执行时间的限制,则对其进行处罚
我们计划将在未来的版本支持以下特性:
- 支持
Hive
和Spark
- 执行时间优化
- 改进可视化报告
2.3.用于自动调优的表结构
Table 1: tuning_algorithm这张表用于记录优化度量信息(资源,时间)和作业类型(Pig,Hive)的算法。通常情况下,一种作业类型应该有一种算法,但框架也支持一行有多种算法。
Table 2: tuning_parameter此表记录tuning_algorithm
中的每个算法优化的Hadoop参数。例如mapreduce.map.memory.mb
,mapreduce.task.io.sort.mb
等。
Table 3: flow_definition此表记录作业流,可以来自任何调度程序,如Azkaban
,Oozie
,Appworx
等。
Table 4: job_definition此表记录需要优化的作业。还包含除了自动优化信息之外的一般信息。作业信息放在2张表里,因为并不是所有作业都需要开启自动调优。
Table 5: tuning_job_definition此表记录需要优化的作业和仅需要自动调整的信息。
Table 6: flow_execution此表记录作业流的执行步骤。
Table 7: job_execution此表记录作业流中的一次作业。包含自动优化之外的作业执行信息。作业信息放在2张表里,因为并不是所有作业都需要开启自动调优。
Table 8: tuning_job_execution此表记录一次作业流的作业,并包含自动调优相关信息。这次执行对应一组参数。
Table 9: job_saved_state由于优化算法的内部表。存储需要优化的作业的当前状态。
Table 10: job_suggested_param_value记录一次作业的建议参数值。
周末休息了俩天,整理了一下,
dr.elephant
基本概念文档还剩一篇就完结啦,后续会写一些实战问题。