Как получить имя узла имени узла с помощью Ambari?

Библиотека python-ambariclient имеет API для получения host_components:

ambari.services(service_name).components(component_name).host_components

Как я могу извлечь name_node для кластера IBM Analytics Engine?

Я думаю, что мне нужно сделать звонок:

GET https://xxxx.bi.services.us-south.bluemix.net:9443/api/v1/clusters/AnalyticsEngine/services/HDFS/components/NAMENODE?fields=host_components

Который извлекает следующую информацию:

{
  "href" : "https://xxxx.bi.services.us-south.bluemix.net:9443/api/v1/clusters/AnalyticsEngine/services/HDFS/components/NAMENODE?fields=host_components",
  "ServiceComponentInfo" : {
    "cluster_name" : "AnalyticsEngine",
    "component_name" : "NAMENODE",
    "service_name" : "HDFS"
  },
  "host_components" : [
    {
      "href" : "https://xxxx.bi.services.us-south.bluemix.net:9443/api/v1/clusters/AnalyticsEngine/hosts/xxxx.bi.services.us-south.bluemix.net/host_components/NAMENODE",
      "HostRoles" : {
        "cluster_name" : "AnalyticsEngine",
        "component_name" : "NAMENODE",
        "host_name" : "xxxx.bi.services.us-south.bluemix.net"
      }
    }
  ]
}

2 ответа

Решение

Я создал библиотеку для извлечения этой информации. Установить с помощью:

pip install --quiet --upgrade git+https://github.com/snowch/ibm-analytics-engine-python@master

Затем запустите:

from ibm_analytics_engine import AmbariOperations
ambari_ops = AmbariOperations(vcap_filename='./vcap.json')
ambari_ops.get_namenode_hostname()

Сначала установите python-ambariclient библиотека:

! pip install --quiet python-ambariclient

Далее вы можете использовать следующее для получения имени узла имени узла:

from future.standard_library import install_aliases
install_aliases()
from urllib.parse import urlparse

import json
vcap = json.load(open('./vcap.json'))

USER         = vcap['cluster']['user']
PASSWORD     = vcap['cluster']['password']
AMBARI_URL   = vcap['cluster']['service_endpoints']['ambari_console']
CLUSTER_ID   = vcap['cluster']['cluster_id']

url = urlparse(AMBARI_URL)

HOST = url.hostname
PORT = url.port
PROTOCOL = url.scheme

from ambariclient.client import Ambari
ambari = Ambari(HOST, port=PORT, username=USER, password=PASSWORD, protocol=PROTOCOL)

CLUSTER_NAME = ambari.clusters.next().cluster_name # gets first cluster - there will only be one

namenode_hc = ambari.clusters(CLUSTER_NAME).services('HDFS').components('NAMENODE').host_components

namenode_host_name = [hc.host_name for hc in namenode_hc if hc.host_name][0]

print(namenode_host_name)
Другие вопросы по тегам