使用 first_run 一步启动集群¶
https://blueprints.launchpad.net/sahara/+spec/first-run-api-usage
本文档建议在 Sahara 的 CDH 插件中使用 cm_api 方法 first_run 来启动集群,而不是当前的一系列方法。
问题描述¶
目前在 CDH 插件的 start_cluster 方法中,使用了 cloudera_utils.py 中定义的大量方法来配置/准备要启动的服务。这些方法在其主体中包含 cm_api 方法,并检查返回值状态。例如,cu.format_namenode 会调用 cm_api ApiService.format_hdfs。
然而,Cloudera 不推荐这种方式。更简单的方法是使用单个方法 first_run 来完成大部分工作。事实上,在 Cloudera Manager 中,first_run 也被用于执行集群部署的最后一步。
将当前的 start_cluster 代码更改为使用 first_run 方法将带来以下好处:
将工作交给 Cloudera Manager 自己处理,而不是手动完成。
简化添加更多服务支持的工作。
避免未来 CM 变更可能产生的错误。
提议的变更¶
实现方式是将 start_cluster 修改为调用 first_run,并从方法主体中移除 first_run 可以完成的其他工作。
具体来说,将类似于以下情况:
在 deploy.py 中,可能的 start_cluster 方法可能如下所示:
def start_cluster(cluster):
cm_cluster = cu.get_cloudera_cluster(cluster)
""" some pre codes """
cu.first_run(cluster)
""" some post codes """
用于配置 CDH 组件的当前方法,例如 _configure_spark、_install_extjs 以及 start_cluster 主体的大部分内容都可以移除。
在 cloudera_utils.py 中,first_run 可以定义为(仅供示例):
@cloudera_cmd
def first_run(cluster):
cm_cluster = get_cloudera_cluster(cluster)
yield cm_cluster.first_run()
用于配置 CDH 组件的方法,例如 create_yarn_job_history_dir、create_oozie_db、install_oozie_sharelib、create_hive_metastore_db、create_hive_dirs 可以移除。
替代方案¶
当前方式目前可行,但它增加了向 CDH 插件添加更多服务支持的编码工作复杂性。而且,当 CM 在未来升级时,无法保证当前代码的正确性。最终,Cloudera 推荐使用 first_run 方法来启动服务。
数据模型影响¶
无
REST API 影响¶
无
其他最终用户影响¶
无
部署者影响¶
无
开发者影响¶
这将使开发人员更容易添加更多 CDH 服务支持。
Sahara-image-elements impact¶
无
Sahara-dashboard / Horizon 影响¶
无
实现¶
负责人¶
- 主要负责人
ken chen
- 其他贡献者
ken chen
工作项¶
工作内容将是
按照上述方式修改当前的 deploy.py 和 cloudera_utils.py。
测试和评估更改。
依赖项¶
无
测试¶
进行集成测试以创建一个集群。
文档影响¶
无
参考资料¶
无