【Dr.Elephant中文文档-7】自动调优

目标

Dr.Elephant这个项目是希望构建一个可以自动优化hadoop mapreduce相关函数的调优框架。在这种情况下,是为了函数消耗最少的资源来完成作业。我们还希望在未来的版本将作业时间也作为函数资源消耗的参考指标。我们使用迭代算法和粒子群优化算法进行自动调优。这些迭代通过分析作业的多次运行结果来完成,我们已经在15-20次的作业中优化了20-30%的资源。

自动优化从作业的默认参数开始,并且在每次运行之后计算判断当前参数是否适合,并且根据算法建议新的参数。为了与Dr.Elephant交互,开发了getCurrentRunParametersAPI,它返回给定作业当前运行的参数。

组件

守护进程

自动调优模块中有以下4个守护进程:

  • 基线计算:该Daemon通过Dr.Elephant的历史数据平均值来计算新作业应当消耗的资源和时间
  • 作业完成检查器:一旦修改了新的调优参数来执行作业,该Daemon将继续轮询作业直到完成。对于Azkaban调度器则使用Azkaban rest API
  • 打分器(Fitness Computation Daemon):一旦作业完成(成功/失败),该Daemon将根据作业消耗的资源和数据大小来评判参数集是否合适
  • 参数生成器(Param Generator):一旦设置好当前的参数集,该Daemon就会生成新的参数建议。目前我们使用PSO算法进行新的参数建议。

Rest API

有个getCurrentRunParameters的新API,它从数据库获取建议的参数并将其返回。目前,这是外部系统和Dr Elephant之间唯一的自动调优交互。

自动调优的测试版本将支持以下特性:

  • 目前支持Pig Script优化
  • 支持Azkaban调度器
  • 支持全局开启或关闭自动调优
  • 约束应用参数确保不会因为自动调优而导致作业失败
  • 如果参数超出允许资源使用/执行时间的限制,则对其进行处罚

我们计划将在未来的版本支持以下特性:

  • 支持HiveSpark
  • 执行时间优化
  • 改进可视化报告

自动调优架构调整

Table 1: tuning_algorithm
这张表用于记录优化度量信息(资源,时间)和作业类型(Pig,Hive)的算法。通常情况下,一种作业类型应该有一种算法,但框架也支持一行有多种算法。

Table 2: tuning_parameter
此表记录tuning_algorithm中的每个算法优化的Hadoop参数。
例如mapreduce.map.memory.mbmapreduce.task.io.sort.mb等。

Table 3: flow_definition
此表记录作业流,可以来自任何调度程序,如AzkabanOozieAppworx等。

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
记录一次作业的建议参数值。

hyperxu wechat
欢迎您扫一扫上面的二维码,订阅我的公众号!
坚持原创技术分享,您的支持将鼓励我继续创作!