提供自动配置最重要配置项的能力

https://blueprints.launchpad.net/sahara/+spec/recommend-configuration

现在用户需要手动配置大部分重要的 Hadoop 配置。为用户提供集群配置建议会更加友好。

问题描述

现在用户需要手动配置大部分重要的 Hadoop 配置,但需要具备 Hadoop 的高级知识。大多数配置都比较复杂,并非所有用户都了解。我们可以提供集群配置建议,并自动配置一些基本的配置,这将改善用户体验。创建的解决方法未来可以扩展到新的配置和建议。

提议的变更

建议添加一个计算器,该计算器将根据集群规范自动配置最重要的配置:可用磁盘空间、内存、CPU 等。Ambari 中已经实现了类似的计算器(参见 [1] 和 [2]),我们也可以使用它。我们应该能够关闭自动配置,如果用户也手动配置了某些 Hadoop 配置,则自动配置也不会被应用。

以下配置列表将使用来自 [1] 和 [2] 的公式进行配置

  • yarn.nodemanager.resource.memory-mb

  • yarn.scheduler.minimum-allocation-mb

  • yarn.scheduler.maximum-allocation-mb

  • yarn.app.mapreduce.am.resource.mb

  • yarn.app.mapreduce.am.command-opts

  • mapreduce.map.memory.mb

  • mapreduce.reduce.memory.mb

  • mapreduce.map.java.opts

  • mapreduce.reduce.java.opts

  • mapreduce.task.io.sort.mb

此外,作为简单的示例,我们可以在集群验证之前自动配置 dfs.replication,如果 datanodes 的数量少于默认值。

还需要添加新的插件 SPI 方法 recommend_configs,该方法将自动配置集群配置。

替代方案

数据模型影响

需要在数据库中的 cluster、cluster_template、node_group、node_group_template、templates_relations 对象中添加新的列 use_autoconfig。默认情况下,use_autoconfig 将为 True。如果 use_autoconfigFalse,则在创建集群期间将不会使用自动配置。如果以上列表中的任何配置都没有手动配置,并且 use_autoconfigTrue,则将自动配置列表中的配置。相同的行为将用于节点组配置的自动配置。

REST API 影响

需要支持关闭自动配置的功能。

其他最终用户影响

需要支持通过 python-saharaclient 关闭自动配置的功能。

部署者影响

开发者影响

Sahara-image-elements impact

Sahara-dashboard / Horizon 影响

需要在 Horizon 中添加一个新的复选框,以便在创建/扩展集群期间关闭自动配置。如果插件不支持自动配置,则不会显示此复选框。我们可以使用 [3] 中的 _info 字段用于此字段。

实现

负责人

主要负责人

vgridnev

其他贡献者

sreshetniak

工作项

提议的更改将包括以下步骤

  • 实现新的插件 SPI 方法,该方法将提供配置建议;

  • 在以下插件中添加对该方法的支持:CDH、Vanilla 2.6.0、Spark(仅 dfs.replication);

  • 提供通过 UI 开启自动配置的能力;

  • 提供通过 saharaclient 开启自动配置的能力;

  • 更新 WADL 文档,关于新的字段对象。

依赖项

依赖于 Openstack 的需求

测试

将为该功能实现单元测试。Sahara CI 也可以开始使用自动配置。

文档影响

需要记录该功能以及将用于自动配置的所有规则。

参考资料

[1] https://apache.googlesource.com/ambari/+/a940986517cbfeb2ef889f0d8a45579b27adad1c/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/stack_advisor.py [2] https://apache.googlesource.com/ambari/+/a940986517cbfeb2ef889f0d8a45579b27adad1c/ambari-server/src/main/resources/stacks/HDP/2.1/services/stack_advisor.py [3] https://github.com/openstack/sahara/blob/master/sahara/service/api.py#L188