@@ -41,26 +41,126 @@ def connect_cm(cm_api, cm_username, cm_password):
41
41
return api
42
42
43
43
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' ):
45
45
request_url = 'http://%s:7180/api/v11/clusters/%s/services/%s/nameservices' % (cm_host ,
46
46
cluster_name ,
47
47
service_name )
48
48
result = requests .get (request_url , auth = (user_name , password ))
49
- named_service = ""
49
+ nameservice = ""
50
50
if result .status_code == 200 :
51
51
response = result .json ()
52
52
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
56
56
57
57
58
58
def 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 ):
59
159
# pylint: disable=E1103
60
160
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 ' ])
64
164
65
165
for cluster_detail in api .get_all_clusters ():
66
166
cluster_name = cluster_detail .name
@@ -73,14 +173,14 @@ def fill_hadoop_env(env):
73
173
for service in cluster .get_all_services ():
74
174
env ['cm_status_links' ]['%s' % service .name ] = service .serviceUrl
75
175
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 ,
77
177
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
82
182
for role in service .get_all_roles ():
83
- if not named_service and role .type == "NAMENODE" :
183
+ if not nameservice and role .type == "NAMENODE" :
84
184
env ['name_node' ] = 'hdfs://%s:8020' % api .get_host (role .hostRef .hostId ).hostname
85
185
if role .type == "HTTPFS" :
86
186
env ['webhdfs_host' ] = '%s' % api .get_host (role .hostRef .hostId ).ipAddress
@@ -151,9 +251,6 @@ def fill_hadoop_env(env):
151
251
env ['hue_port' ] = '8888'
152
252
break
153
253
154
- logging .debug (env )
155
-
156
-
157
254
def tree (archive_filepath ):
158
255
file_handle = file (archive_filepath , 'rb' )
159
256
tar_file = tarfile .open (None , 'r' , file_handle )
0 commit comments