天天看點

0036-如何通過CM API優雅的擷取中繼資料庫密碼

溫馨提示:要看高清無碼套圖,請使用手機打開并單擊圖檔放大檢視。

1.問題描述

人啊,上了年紀了,總容易忘記一些事情,比如你一不小心就忘記了CDH叢集Hive,Hue和Sentry服務的中繼資料庫密碼,對于資料庫(MySQL/Oracle/PostgreSQL)管理者來說,可能有自己獨特的一些奇技淫巧來找回密碼。但對于咱普通人,其實Cloudera Manger提供了一種很優雅的方式讓你找回中繼資料庫密碼,那就是神奇的Cloudera Manager API。

2.解決方法

2.1通過HTTP方式

1.擷取Cloudera Manager所有叢集資訊

在浏覽器輸入如下位址,将替換為CM的IP位址

http://<cmserver>:7180/api/v10/clusters/           

輸入CM的賬号密碼

擷取叢集資訊:

{
  "items" : [ {
    "name" : "cluster",
    "displayName" : "Cluster 1",
    "version" : "CDH5",
    "fullVersion" : "5.11.2",
    "maintenanceMode" : false,
    "maintenanceOwners" : [ ],
    "clusterUrl" : "http://ip-172-31-22-86.ap-southeast-1.compute.internal:7180/cmf/clusterRedirect/cluster"
  } ]
}           

2.通過上一步擷取的叢集資訊,擷取指定叢集的Services

在浏覽器輸入如下位址,将替換成CM的IP位址,替換為上一步中擷取到的叢集名稱

http://<cmserver>:7180/api/v10/clusters/<cluster_name>/services/           
{
  "items" : [ …{
    "name" : "hue",
    "type" : "HUE",
    "clusterRef" : {
      "clusterName" : "cluster"
    },
    "serviceUrl" : "http://ip-172-31-22-86.ap-southeast-1.compute.internal:7180/cmf/serviceRedirect/hue",
    "serviceState" : "STARTED",
    "healthSummary" : "GOOD",
    "healthChecks" : [ {
      "name" : "HUE_HUE_SERVERS_HEALTHY",
      "summary" : "GOOD"
    } ],
    "configStalenessStatus" : "FRESH",
    "clientConfigStalenessStatus" : "FRESH",
    "maintenanceMode" : false,
    "maintenanceOwners" : [ ],
    "displayName" : "Hue"
  } …]
}           

以上為擷取到的json資料片段,标紅部分為Services名稱。

3.通過服務名稱擷取,該服務的配置資訊

在浏覽器輸入如下位址,将替換成CM的IP位址,替換為叢集名稱,将替換為指定服務的名稱

http://<cmserver>:7180/api/v10/clusters/<cluster_name>/services/<service_name>/config           
{
  "items" : [ {
    "name" : "database_host",
    "value" : "ip-172-31-22-86.ap-southeast-1.compute.internal"
  }, {
    "name" : "database_password",
    "value" : "password"
  }, {
    "name" : "database_type",
    "value" : "mysql"
  }... ]
}           

這樣就擷取到了相應服務的配置資訊,标紅部分即為該服務的資料庫密碼。

2.2指令行方式

1.擷取叢集資訊

将替換為CM的使用者名,替換為CM對應使用者密碼,替換為CM的IP位址

curl -v -k -X GET -u <cm_admin_user>:<cm_admin_pass> http://<cmserver>:7180/api/v10/clusters/           

指令行執行

[ec2-user@ip-172-31-22-86 ~]$ curl -v -k -X GET -u admin:admin http://ip-172-31-22-86:7180/api/v10/clusters/
...
{
  "items" : [ {
    "name" : "cluster",
    "displayName" : "Cluster 1",
    "version" : "CDH5",
    "fullVersion" : "5.11.2",
    "maintenanceMode" : false,
    "maintenanceOwners" : [ ],
    "clusterUrl" : "http://ip-172-31-22-86.ap-southeast-1.compute.internal:7180/cmf/clusterRedirect/cluster"
  } ]
* Connection #0 to host ip-172-31-22-86 left intact
}
[ec2-user@ip-172-31-22-86 ~]$            

标注部分為擷取到的叢集名稱。

2.擷取指定叢集的Services

将如下指令中相應參數替換,替換為上一步擷取到的叢集名稱

curl -v -k -X GET -u <cm_admin_user>:<cm_admin_pass> http://<cmserver>:7180/api/v10/clusters/<cluster_name>/services/           

指令行執行:

[ec2-user@ip-172-31-22-86 ~]$ curl -v -k -X GET -u admin:admin http://ip-172-31-22-86:7180/api/v10/clusters/cluster/services/
...
{
  "items" : [ {
    "name" : "hive",
    "type" : "HIVE",
    "clusterRef" : {
      "clusterName" : "cluster"
    },
    "serviceUrl" : "http://ip-172-31-22-86.ap-southeast-1.compute.internal:7180/cmf/serviceRedirect/hive",
    "serviceState" : "STARTED",
    "healthSummary" : "GOOD",
    "healthChecks" : [ {
      "name" : "HIVE_HIVEMETASTORES_HEALTHY",
      "summary" : "GOOD"
    }, {
      "name" : "HIVE_HIVESERVER2S_HEALTHY",
      "summary" : "GOOD"
    } ],
    "configStalenessStatus" : "FRESH",
    "clientConfigStalenessStatus" : "FRESH",
    "maintenanceMode" : false,
    "maintenanceOwners" : [ ],
    "displayName" : "Hive"
  } ...]
}
[ec2-user@ip-172-31-22-86 ~]$            

标注部分為服務名稱。

3.根據擷取到的Service名稱,擷取該服務的配置

将一下指令中參數替換為自己環境資訊,替換為上一步擷取到的服務名稱。

curl -v -k -X GET -u <cm_admin_user>: <cm_admin_pass>http://<cmserver>:7180/api/v10/clusters/<cluster_name>/services/<service_name>/config           
[ec2-user@ip-172-31-22-86 ~]$ curl -v -k -X GET -u admin:admin http://ip-172-31-22-86:7180/api/v10/clusters/cluster/services/hive/config
...
{
  "items" : [ {
    "name" : "hive_metastore_database_host",
    "value" : "ip-172-31-22-86.ap-southeast-1.compute.internal"
  }, {
    "name" : "hive_metastore_database_password",
    "value" : "password"
  }, {
    "name" : "mapreduce_yarn_service",
    "value" : "yarn"
  }, {
    "name" : "zookeeper_service",
    "value" : "zookeeper"
  } ]
* Connection #0 to host ip-172-31-22-86 left intact
}
[ec2-user@ip-172-31-22-86 ~]$            

上圖示注部分即為hive服務中繼資料庫的密碼。

3.總結

通過以上兩種方式可以擷取Hue、Hive、Sentry服務中繼資料庫密碼,但不支援擷取Oozie、AM、CM、RM、Navigator等服務的資料庫密碼。注意:以上操作需要使用CM的管理者使用者擷取,非管理者使用者擷取的密碼顯示為“REDACTED”。

更多關于CM的API接口可參考官網:

https://www.cloudera.com/documentation/enterprise/latest/topics/cm_intro_api.html
醉酒鞭名馬,少年多浮誇! 嶺南浣溪沙,嘔吐酒肆下!摯友不肯放,資料玩的花!

推薦關注Hadoop實操,第一時間,分享更多Hadoop幹貨,歡迎轉發和分享。

原創文章,歡迎轉載,轉載請注明:轉載自微信公衆号Hadoop實操