将 CM API 库添加到 Sahara

https://blueprints.launchpad.net/sahara/+spec/add-lib-subset-cm-api

本文档提出将 CM API 库添加到 Sahara,以便 Cloudera 插件无需依赖第三方库支持。

问题描述

目前 Cloudera 插件依赖于第三方库 cm_api(由 Cloudera 提供)。该库与 python3 不兼容,并且 Cloudera 没有资源来修复它。因此,很难将此库放入 requirements.txt 文件中。为了解决此问题,我们计划实现 CM API 的一个子集,并将其放入 Sahara 项目中,以便 Cloudera 插件不再依赖第三方库,并且我们可以默认启用此插件。

提议的变更

目前 Cloudera 插件中使用的 CM APIs 包括(可能不包含全部)

  • ApiResource.create_cluster

  • ApiResource.get_cluster

  • ApiResource.get_all_hosts

  • ApiResource.delete_host

  • ApiResource.get_cloudera_manager

  • ClouderaManager.create_mgmt_service

  • ClouderaManager.hosts_start_roles

  • ClouderaManager.get_service

  • ApiCluster.start

  • ApiCluster.remove_host

  • ApiCluster.create_service

  • ApiCluster.get_service

  • ApiCluster.deploy_client_config

  • ApiCluster.first_run

  • ApiService.create_role

  • ApiService.delete_role

  • ApiService.refresh

  • ApiService.deploy_client_config

  • ApiService.start

  • ApiService.restart

  • ApiService.start_roles

  • ApiService.format_hdfs

  • ApiService.create_hdfs_tmp

  • ApiService.create_yarn_job_history_dir

  • ApiService.create_oozie_db

  • ApiService.install_oozie_sharelib

  • ApiService.create_hive_metastore_tables

  • ApiService.create_hive_userdir

  • ApiService.create_hive_warehouse

  • ApiService.create_hbase_root

  • ApiService.update_config

  • ApiServiceSetupInfo.add_role_info

  • ApiRole.update_config

这些 API 是我们需要在我们的 CM APIs 中实现的内容。我们可以在 cdh 目录的 plugin 目录中创建一个 client 目录,并将 lib 文件放在此目录中。

替代方案

数据模型影响

REST API 影响

其他最终用户影响

部署者影响

部署者将不再需要安装 cm_api 包。

开发者影响

当发布新的 CDH 版本时,如果它与当前使用的 client 不兼容,或者使用了一些新的 APIs,开发人员可能需要在添加对新 CDH 版本的支持时更新 client。

Sahara-image-elements impact

Sahara-dashboard / Horizon 影响

实现

负责人

主要负责人

ken chen

其他贡献者

ken chen

工作项

工作内容包括

  • 在 cdh 插件目录中添加一个 client 目录,并将 lib 文件放在此目录下。

  • 将所有当前的 cm_api 导入更改为使用新的 client。

依赖项

测试

CDH 插件的 Sahara 集成测试就足够了。

文档影响

应该修改有关 CDH 插件先决条件和启用方式的文档,因为不再需要 cm_api。

参考资料

https://pypi.python.org/pypi/cm-api/8.0.0