首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从中获取活动namenode主机名?

如何从中获取活动namenode主机名?
EN

Stack Overflow用户
提问于 2017-11-02 14:57:08
回答 2查看 2.2K关注 0票数 1

我能够访问Cloudera管理器rest。

代码语言:javascript
复制
curl -u username:password http://cmhost:port/api/v10/clusters/clusterName

如何找到活动的名称和资源管理器主机名?

我在API文档中找不到任何相关的东西。

api/apidocs/v 10/index.html

注意:集群配置具有高可用性。

EN

回答 2

Stack Overflow用户

发布于 2017-11-02 20:03:18

您需要使用此端点:

-roleName-..html

然后执行以下操作:

代码语言:javascript
复制
For each Name Node:

$ curl -u username:password \
http://cmhost:port/api/v10/clusters/CLNAME/services/HDFS/roles/NN_NAME

取代:

  • 使用clusterName的CLNAME
  • 带HDFS serviceName的HDFS
  • NN_NAME和您的NameNode name

这将返回apiRole对象,该对象有一个名为haStatus的字段。显示“活动”的是active NameNode。

对于资源管理器,请执行类似的步骤:

代码语言:javascript
复制
For each Resource Manager:

$ curl -u username:password \
http://cmhost:port/api/v10/clusters/CLNAME/services/YARN/roles/RM_NAME

其中:

  • 纱线与你的纱线serviceName
  • RM_NAME与您的资源管理器name

一旦您拥有了正确的NameNode和资源管理器,请使用:

-hostId-..html

hostId映射到主机名。

票数 2
EN

Stack Overflow用户

发布于 2019-09-30 09:54:08

您可以通过使用REST获取主机的大量HDFS相关信息:

代码语言:javascript
复制
$ python build.py username:password cmhost:port
$ cat build.py
import sys
import json
import requests

args = sys.argv
if len(args) != 3:
  print "Usage: python %s login:password host:port" % args[0]
  exit(1)

LP = args[1]
CM = args[2]

host = {}
hosts = requests.get('http://'+LP+'@'+CM+'/api/v10/hosts').json()
for h in hosts['items']:
  host[h['hostId']] = h['hostname']

nameservices = requests.get('http://'+LP+'@'+CM+'/api/v10/clusters/cluster/services/hdfs/nameservices').json()
for ns in nameservices['items']:
  print('hdfs.NS:' + ns['name'])

services = requests.get('http://'+LP+'@'+CM+'/api/v10/clusters/cluster/services').json()
for s in services['items']:
  if (s['name'] == 'hdfs'):
    roles = requests.get('http://'+LP+'@'+CM+'/api/v10/clusters/cluster/services/' + s['name'] + '/roles').json()
    srv = {}
    for r in roles['items']:
      suff = '.' + r.get('haStatus') if r.get('haStatus') else ''
      key = s['name'] + '.' + r['type'] + suff
      srv[key] = srv.get(key) + ',' + host[r['hostRef']['hostId']] if srv.get(key) else host[r['hostRef']['hostId']]
    for s in srv:
      print(s + ":" + ','.join(sorted(srv[s].split(','))))

然后,您将得到类似的内容,只适用于hdfs.NAMENODE.ACTIVE的grep (或者稍微修改python脚本):

代码语言:javascript
复制
hdfs.NS:H1
hdfs.NAMENODE.ACTIVE:h6
hdfs.NAMENODE.STANDBY:h1
hdfs.FAILOVERCONTROLLER:h1,h2,h3
hdfs.DATANODE:h1
hdfs.HTTPFS:h1,h2,h3
hdfs.GATEWAY:h1,h2,h3
hdfs.JOURNALNODE:h4,h5
hdfs.BALANCER:h7
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47078341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档