簡體   English   中英

如何使用cm_api從Cloudera Manager中刪除節點

[英]How do I remove node from Cloudera Manager using cm_api

我正在嘗試使用cm_api 9.0.0從Cloudera Manager 5.3.2刪除主機

我試過了

api.get_cloudera_manager().hosts_decommission([host])
api.get_cluster("cluster").remove_host(host)

但是對於remove_host()有錯誤

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.6/site-packages/cm_api/endpoints/clusters.py", line 218, in remove_host
return self._delete("hosts/" + hostId, ApiHostRef, api_version=3)
  File "/usr/lib/python2.6/site-packages/cm_api/endpoints/types.py", line 352, in _delete
api_version)
  File "/usr/lib/python2.6/site-packages/cm_api/endpoints/types.py", line 380, in _call
api_version)
  File "/usr/lib/python2.6/site-packages/cm_api/endpoints/types.py", line 139, in call
ret = method(path, params=params)
  File "/usr/lib/python2.6/site-packages/cm_api/resource.py", line 124, in delete
return self.invoke("DELETE", relpath, params)
  File "/usr/lib/python2.6/site-packages/cm_api/resource.py", line 63, in invoke
headers=headers)
  File "/usr/lib/python2.6/site-packages/cm_api/http_client.py", line 161, in execute
raise self._exc_class(ex)
cm_api.api_client.ApiException: ip-10-0-8-187.ec2.internal still has roles assigned to it. (error 400)

從集群中刪除主機的正確順序是什么,還是cm_api中有一個命令可以執行此操作?

謝謝

此python腳本有助於從群集中刪除主機。 步驟如下:

  1. 停止和停用主機中的所有角色
  2. 從主機中刪除角色逐一標識並刪除角色
  3. 從群集中刪除主機
  4. 從cloudera管理器中刪除主機

該腳本從aws中運行的cloudera受管群集中刪除主機。 一旦沒有資源需求,就打算從群集中縮減工作節點(節點管理器角色)和網關角色。

您可以根據您的環境相應地更改腳本。

#!/bin/python
import httplib2
import os
import requests
import json
import boto3
import time
from requests.auth import HTTPBasicAuth

os.environ["AWS_ACCESS_KEY_ID"] = "ACCESS_KEY"
os.environ["AWS_SECRET_ACCESS_KEY"] = "SECRET_ACCESS_KEY"
os.environ["AWS_DEFAULT_REGION"] = "us-east-1"

region='us-east-1'
metadata = requests.get(url='http://169.254.169.254/latest/meta-data/instance-id')
instance_id = metadata.text
host = requests.get(url='http://169.254.169.254/latest/meta-data/hostname')
host_id = host.text

username='admin'
password='admin'
cluster_name='cluster001'
scm_protocol='http'
scm_host='host.compute-1.amazonaws.com'
scm_port='7180'
scm_api='v17'



client = boto3.client('autoscaling')
ec2 = boto3.client('autoscaling', region_name=region)

response = client.describe_auto_scaling_instances(InstanceIds=[instance_id,])
state =  response['AutoScalingInstances'][0]['LifecycleState']
print "vm is in " + state 
if state == 'Terminating:Wait':
    print "host decommision started"
    ##decommission host
    service_url = scm_protocol + '://' +  scm_host + ':'  +  scm_port + '/api/' + scm_api + '/cm/commands/hostsDecommission'

    #service_url = scm_protocol + '://' +  scm_host + ':'  +  scm_port + '/api/' + scm_api + '/cm/hostsRecommission'
    #service_url = scm_protocol + '://' +  scm_host + ':'  +  scm_port + '/api/' + scm_api + '/cm/commands/hostsStartRoles'


    print service_url
    headers = {'content-type': 'application/json'}
    req_body = { "items":[ host_id ]}
    print req_body
    req = requests.post(url=service_url, auth=HTTPBasicAuth(username, password), data=json.dumps(req_body), headers=headers)
    print req.text
    time.sleep(120)         

    ##delete roles in a host
    api_url = scm_protocol + '://' + scm_host + ':' + scm_port + '/api/' + scm_api + '/hosts/' + host_id
    req = requests.get(api_url, auth=HTTPBasicAuth(username, password))
    a = json.loads(req.content)

    for i in a['roleRefs']:
        scm_uri='/api/' + scm_api + '/clusters/' + cluster_name + '/services/'+i['serviceName']+'/roles/'+i['roleName']
        scm_url = scm_protocol + '://' +  scm_host + ':'  +  scm_port + scm_uri
        print scm_url
        req = requests.delete(scm_url, auth=HTTPBasicAuth(username, password))
        print req.text
        time.sleep(10)

    ##remove host from cluster
    service_url = scm_protocol + '://' +  scm_host + ':'  +  scm_port + '/api/' + scm_api + '/clusters/' + cluster_name + '/hosts/' + host_id
    print service_url
    req = requests.delete(service_url, auth=HTTPBasicAuth(username, password))
    time.sleep(10)

    ##remove host from cloudera manager
    os.system("/etc/init.d/cloudera-scm-agent stop")    
    service_url = scm_protocol + '://' +  scm_host + ':'  +  scm_port + '/api/' + scm_api + '/hosts/' + host_id
    print service_url
    req = requests.delete(service_url, auth=HTTPBasicAuth(username, password))
    print req.text
    time.sleep(10)

    ##refresh cluster configuration
    service_url = scm_protocol + '://' +  scm_host + ':'  +  scm_port + '/api/' + scm_api + '/clusters/' + 'commands/refresh'
    print service_url
    req = requests.post(service_url, auth=HTTPBasicAuth(username, password))
    print req.text
    time.sleep(10)

    ##deploy client configuration
    service_url = scm_protocol + '://' +  scm_host + ':'  +  scm_port + '/api/' + scm_api + '/clusters/' + 'commands/deployClientConfig'
    print service_url
    req = requests.post(service_url, auth=HTTPBasicAuth(username, password))
    print req.text
    time.sleep(10)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM