@@ -41,26 +41,126 @@ def connect_cm(cm_api, cm_username, cm_password):
4141 return api
4242
4343
44- def get_named_service (cm_host , cluster_name , service_name , user_name = 'admin' , password = 'admin' ):
44+ def get_nameservice (cm_host , cluster_name , service_name , user_name = 'admin' , password = 'admin' ):
4545 request_url = 'http://%s:7180/api/v11/clusters/%s/services/%s/nameservices' % (cm_host ,
4646 cluster_name ,
4747 service_name )
4848 result = requests .get (request_url , auth = (user_name , password ))
49- named_service = ""
49+ nameservice = ""
5050 if result .status_code == 200 :
5151 response = result .json ()
5252 if 'items' in response :
53- named_service = response ['items' ][0 ]['name' ]
54- logging .debug ("Found named service %s for %s" , named_service , service_name )
55- return named_service
53+ nameservice = response ['items' ][0 ]['name' ]
54+ logging .debug ("Found named service %s for %s" , nameservice , service_name )
55+ return nameservice
5656
5757
5858def fill_hadoop_env (env ):
59+ if env ['hadoop_distro' ] == 'CDH' :
60+ fill_hadoop_env_cdh (env )
61+ else :
62+ fill_hadoop_env_hdp (env )
63+
64+ logging .debug (env )
65+
66+ def ambari_request (ambari , uri ):
67+ hadoop_manager_ip = ambari [0 ]
68+ hadoop_manager_username = ambari [1 ]
69+ hadoop_manager_password = ambari [2 ]
70+ if uri .startswith ("http" ):
71+ full_uri = uri
72+ else :
73+ full_uri = 'http://%s:8080/api/v1%s' % (hadoop_manager_ip , uri )
74+
75+ headers = {'X-Requested-By' : hadoop_manager_username }
76+ auth = (hadoop_manager_username , hadoop_manager_password )
77+ return requests .get (full_uri , auth = auth , headers = headers ).json ()
78+
79+ def get_hdfs_hdp (ambari , cluster_name ):
80+ core_site = ambari_request (ambari , '/clusters/%s?fields=Clusters/desired_configs/core-site' % cluster_name )
81+ config_version = core_site ['Clusters' ]['desired_configs' ]['core-site' ]['tag' ]
82+ core_site_config = ambari_request (ambari , '/clusters/%s/configurations/?type=core-site&tag=%s' % (cluster_name , config_version ))
83+ return core_site_config ['items' ][0 ]['properties' ]['fs.defaultFS' ]
84+
85+ def component_host (component_detail ):
86+ host_list = ''
87+ for host_detail in component_detail ['host_components' ]:
88+ if len (host_list ) > 0 :
89+ host_list += ','
90+ host_list += host_detail ['HostRoles' ]['host_name' ]
91+ return host_list
92+
93+ def fill_hadoop_env_hdp (env ):
94+
95+ hadoop_manager_ip = env ['hadoop_manager_host' ]
96+ hadoop_manager_username = env ['hadoop_manager_username' ]
97+ hadoop_manager_password = env ['hadoop_manager_password' ]
98+ ambari = (hadoop_manager_ip , hadoop_manager_username , hadoop_manager_password )
99+ cluster_name = ambari_request (ambari , '/clusters' )['items' ][0 ]['Clusters' ]['cluster_name' ]
100+
101+ logging .debug ('getting service list for %s' , cluster_name )
102+ env ['cm_status_links' ] = {}
103+ nameservice = None
104+
105+ env ['name_node' ] = get_hdfs_hdp (ambari , cluster_name )
106+
107+ services = ambari_request (ambari , '/clusters/%s/services' % cluster_name )['items' ]
108+ for service in services :
109+ service_name = service ['ServiceInfo' ]['service_name' ]
110+ env ['cm_status_links' ]['%s' % service_name ] = 'http://%s:8080/#/main/services/%s/summary' % (hadoop_manager_ip , service_name )
111+ service_components = ambari_request (ambari , service ['href' ] + '/components' )['items' ]
112+
113+ for component in service_components :
114+ component_detail = ambari_request (ambari , component ['href' ])
115+ role_name = component_detail ['ServiceComponentInfo' ]['component_name' ]
116+
117+ if role_name == "NAMENODE" :
118+ env ['webhdfs_host' ] = '%s' % component_host (component_detail ).split (',' )[0 ]
119+ env ['webhdfs_port' ] = '14000'
120+
121+ elif role_name == "RESOURCEMANAGER" :
122+ rm_host = component_host (component_detail )
123+ if len (rm_host .split (',' )) > 1 :
124+ main_rm_host = rm_host .split (',' )[0 ]
125+ backup_rm_host = rm_host .split (',' )[1 ]
126+ else :
127+ main_rm_host = rm_host
128+ backup_rm_host = None
129+ env ['yarn_resource_manager_host' ] = '%s' % main_rm_host
130+ env ['yarn_resource_manager_port' ] = '8088'
131+ env ['yarn_resource_manager_mr_port' ] = '8050'
132+ if backup_rm_host is not None :
133+ env ['yarn_resource_manager_host_backup' ] = '%s' % component_host (component_detail )
134+ env ['yarn_resource_manager_port_backup' ] = '8088'
135+ env ['yarn_resource_manager_mr_port_backup' ] = '8050'
136+
137+ elif role_name == "NODEMANAGER" :
138+ env ['yarn_node_managers' ] = '%s' % component_host (component_detail )
139+
140+ elif role_name == "ZOOKEEPER_SERVER" :
141+ env ['zookeeper_quorum' ] = '%s' % component_host (component_detail )
142+ env ['zookeeper_port' ] = '2181'
143+
144+ elif role_name == "HBASE_MASTER" :
145+ env ['hbase_rest_server' ] = '%s' % component_host (component_detail ).split (',' )[0 ]
146+ env ['hbase_rest_port' ] = '20550'
147+ env ['hbase_thrift_server' ] = '%s' % component_host (component_detail ).split (',' )[0 ]
148+
149+ elif role_name == "OOZIE_SERVER" :
150+ env ['oozie_uri' ] = 'http://%s:11000/oozie' % component_host (component_detail )
151+
152+ elif role_name == "HIVE_SERVER" :
153+ env ['hive_server' ] = '%s' % component_host (component_detail )
154+ env ['hive_port' ] = '10000'
155+
156+ logging .debug (env )
157+
158+ def fill_hadoop_env_cdh (env ):
59159 # pylint: disable=E1103
60160 api = connect_cm (
61- env ['cloudera_manager_host ' ],
62- env ['cloudera_manager_username ' ],
63- env ['cloudera_manager_password ' ])
161+ env ['hadoop_manager_host ' ],
162+ env ['hadoop_manager_username ' ],
163+ env ['hadoop_manager_password ' ])
64164
65165 for cluster_detail in api .get_all_clusters ():
66166 cluster_name = cluster_detail .name
@@ -73,14 +173,14 @@ def fill_hadoop_env(env):
73173 for service in cluster .get_all_services ():
74174 env ['cm_status_links' ]['%s' % service .name ] = service .serviceUrl
75175 if service .type == "HDFS" :
76- named_service = get_named_service (env ['cloudera_manager_host ' ], cluster_name ,
176+ nameservice = get_nameservice (env ['hadoop_manager_host ' ], cluster_name ,
77177 service .name ,
78- user_name = env ['cloudera_manager_username ' ],
79- password = env ['cloudera_manager_password ' ])
80- if named_service :
81- env ['name_node' ] = 'hdfs://%s' % named_service
178+ user_name = env ['hadoop_manager_username ' ],
179+ password = env ['hadoop_manager_password ' ])
180+ if nameservice :
181+ env ['name_node' ] = 'hdfs://%s' % nameservice
82182 for role in service .get_all_roles ():
83- if not named_service and role .type == "NAMENODE" :
183+ if not nameservice and role .type == "NAMENODE" :
84184 env ['name_node' ] = 'hdfs://%s:8020' % api .get_host (role .hostRef .hostId ).hostname
85185 if role .type == "HTTPFS" :
86186 env ['webhdfs_host' ] = '%s' % api .get_host (role .hostRef .hostId ).ipAddress
@@ -151,9 +251,6 @@ def fill_hadoop_env(env):
151251 env ['hue_port' ] = '8888'
152252 break
153253
154- logging .debug (env )
155-
156-
157254def tree (archive_filepath ):
158255 file_handle = file (archive_filepath , 'rb' )
159256 tar_file = tarfile .open (None , 'r' , file_handle )
0 commit comments