Skip to content

Commit c305399

Browse files
committed
Support for Hortonworks HDP
PNDA-2445
1 parent 2cd2631 commit c305399

File tree

71 files changed

+3085
-188
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

71 files changed

+3085
-188
lines changed

CHANGELOG.md

+9-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
# Change Log
22
All notable changes to this project will be documented in this file.
33

4+
## Unreleased
5+
### Added
6+
- PNDA-2445: Support for Hortonworks HDP hadoop distro
7+
8+
### Changed
9+
- PNDA-2965: Rename `cloudera_*` role grains to `hadoop_*`
10+
411
## [2.0.0] 2017-05-23
512
### Added
613
- PNDA-2375: Isolate PNDA from breaking dependency changes
@@ -9,9 +16,10 @@ All notable changes to this project will be documented in this file.
916
- PNDA-2682: review console backend deployment
1017
- Add a simple jupyter notebook
1118
- Allow salt mine for all interfaces
19+
1220
### Changed
1321
- PNDA-2446: Download java with wget
14-
- PNDA-2517: If Cloudera setup (cm_setup.py) fails, orchestrate can be re-run and cm_setup.py will attempt to continue from where it completed up to last time. Progress is recorded in /root/.CM_SETUP_SUCCESS which can be edited if manual control is required over the point to continue from.
22+
- PNDA-2517: If Cloudera setup (`cm_setup.py`) fails, orchestrate can be re-run and `cm_setup.py` will attempt to continue from where it completed up to last time. Progress is recorded in `/root/.CM_SETUP_SUCCESS` which can be edited if manual control is required over the point to continue from.
1523
- PNDA-2577: Use spur 0.3.20 for cm_setup.py
1624
- PNDA-2596: Stop ingesting internal PNDA testbot topic
1725
- PNDA-2672: Explicitly set CM API version number

pillar/flavors/bmstandard.sls

+3
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212
"cdh.setup_hadoop": {
1313
"template_file": "cfg_bmstandard.py"
1414
},
15+
"hdp.setup_hadoop": {
16+
"template_file": "cfg_bmstandard.py"
17+
},
1518
"curator": {
1619
"days_to_keep": 6
1720
},

pillar/flavors/pico.sls

+3
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515
"cdh.setup_hadoop": {
1616
"template_file": "cfg_pico.py"
1717
},
18+
"hdp.setup_hadoop": {
19+
"template_file": "cfg_pico.py"
20+
},
1821
"curator": {
1922
"days_to_keep": 1
2023
}

pillar/flavors/standard.sls

+3
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515
"cdh.setup_hadoop": {
1616
"template_file": "cfg_standard.py"
1717
},
18+
"hdp.setup_hadoop": {
19+
"template_file": "cfg_standard.py"
20+
},
1821
"curator": {
1922
"days_to_keep": 6
2023
}

pillar/packages/RedHat.sls

+18
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,18 @@
11
acl:
22
package-name: acl
33
version: ""
4+
ambari-agent:
5+
package-name: ambari-agent
6+
version: "2.5.0.3-7"
7+
ambari-server:
8+
package-name: ambari-server
9+
version: "2.5.0.3-7"
410
at:
511
package-name: at
612
version: ""
13+
bzip2:
14+
package-name: bzip2
15+
version: ""
716
cloudera-manager-agent:
817
package-name: cloudera-manager-agent
918
version: "5.9.0-1.cm590.p0.249.el7"
@@ -16,6 +25,12 @@ cloudera-manager-server:
1625
cyrus-sasl-devel:
1726
package-name: cyrus-sasl-devel
1827
version: ""
28+
cyrus-sasl-gssapi:
29+
package-name: cyrus-sasl-gssapi
30+
version: ""
31+
cyrus-sasl-plain:
32+
package-name: cyrus-sasl-plain
33+
version: ""
1934
g++:
2035
package-name: gcc-c++
2136
version: ""
@@ -33,6 +48,9 @@ libssl-dev:
3348
libffi-dev:
3449
package-name: libffi-devel
3550
version: ""
51+
libtirpc-devel:
52+
package-name: libtirpc-devel
53+
version: ""
3654
libsasl:
3755
package-name: libgsasl-devel
3856
version: ""

pillar/packages/Ubuntu.sls

+6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
acl:
22
package-name: acl
33
version: ""
4+
ambari-agent:
5+
package-name: ambari-agent
6+
version: "2.5.0.3-7"
7+
ambari-server:
8+
package-name: ambari-server
9+
version: "2.5.0.3-7"
410
cloudera-manager-agent:
511
package-name: cloudera-manager-agent
612
version: "5.9.0-1.cm590.p0.249~trusty-cm5"

pillar/services.sls

+7-7
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ gobblin:
5858
release_version: 0.1.5
5959

6060
console_frontend:
61-
release_version: 0.2.0
61+
release_version: hdp
6262

6363
console_backend_data_logger:
6464
release_version: 0.4.0
@@ -72,23 +72,23 @@ console_backend_utils:
7272
release_version: 0.4.0
7373

7474
deployment_manager:
75-
release_version: 0.4.0
75+
release_version: hdp
7676

7777
package_repository:
7878
release_version: 0.3.1
7979

8080
data-service:
81-
release_version: 0.2.0
81+
release_version: hdp
8282

8383
hdfs_cleaner:
84-
release_version: 0.2.0
84+
release_version: hdp
8585

8686
platform_testing:
8787
release_directory: /opt/pnda
88-
release_version: 0.3.3
88+
release_version: hdp
8989

9090
platformlib:
91-
release_version: RELEASE_0.1.3
91+
release_version: hdp
9292
target_directory: "/opt/pnda"
9393

9494
jmxproxy:
@@ -102,4 +102,4 @@ anaconda:
102102
java:
103103
version: "jdk-8u131-linux-x64"
104104
version_name: "jdk1.8.0_131"
105-
source_url: "http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz"
105+
source_url: "http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz"

salt/_modules/pnda.py

+70-25
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,75 @@
11
import requests
22

3-
def get_named_service(cm_host, cluster_name, service_name):
4-
""" Returns named service for HA Cluster """
5-
user_name = __salt__['pillar.get']('admin_login:user')
6-
password = __salt__['pillar.get']('admin_login:password')
7-
request_url = 'http://%s:7180/api/v11/clusters/%s/services/%s/nameservices' % (cm_host,
8-
cluster_name,
9-
service_name)
3+
def get_name_service():
4+
""" Returns name service for HA Cluster """
5+
user_name = hadoop_manager_username()
6+
password = hadoop_manager_password()
7+
request_url = 'http://%s:7180/api/v11/clusters/%s/services/%s/nameservices' % (hadoop_manager_ip(), cluster_name(), 'hdfs01')
108
r = requests.get(request_url, auth=(user_name, password))
11-
named_service = ""
9+
name_service = ""
1210
if r.status_code == 200:
1311
response = r.json()
1412
if 'items' in response:
15-
named_service = response['items'][0]['name']
16-
return named_service
13+
name_service = response['items'][0]['name']
14+
return name_service
1715

1816

1917
def cluster_name():
2018
"""Returns PNDA cluster name of the minion"""
2119
cname = __grains__['pnda_cluster']
2220
return cname
2321

24-
def namenodes_ips():
25-
"""Returns hadoop name nodes ip addresses"""
26-
cm_name = cluster_name()
27-
cm_host = cloudera_manager_ip()
28-
service_name = 'hdfs01'
29-
named_service = get_named_service(cm_host, cm_name, service_name)
30-
if named_service:
31-
return [named_service]
32-
return ip_addresses('cloudera_namenode')
33-
34-
def cloudera_manager_ip():
22+
def hadoop_manager_username():
23+
"""Returns username to log into the hadoop cluster manager"""
24+
uname = __salt__['pillar.get']('admin_login:user')
25+
return uname
26+
27+
def hadoop_manager_password():
28+
"""Returns password to log into the hadoop cluster manager"""
29+
pwrd = __salt__['pillar.get']('admin_login:password')
30+
return pwrd
31+
32+
def hadoop_distro():
33+
"""Returns hadoop distro"""
34+
distro = __salt__['pillar.get']('hadoop.distro')
35+
return distro
36+
37+
def ambari_request(uri):
38+
full_uri = 'http://%s:8080/api/v1%s' % (hadoop_manager_ip(), uri)
39+
headers = {'X-Requested-By': hadoop_manager_username()}
40+
auth = (hadoop_manager_username(), hadoop_manager_password())
41+
return requests.get(full_uri, auth=auth, headers=headers).json()
42+
43+
def get_namenode_from_ambari():
44+
"""Returns hadoop namenode IP address"""
45+
core_site = ambari_request('/clusters/%s?fields=Clusters/desired_configs/core-site' % cluster_name())
46+
config_version = core_site['Clusters']['desired_configs']['core-site']['tag']
47+
core_site_config = ambari_request('/clusters/%s/configurations/?type=core-site&tag=%s' % (cluster_name(), config_version))
48+
return core_site_config['items'][0]['properties']['fs.defaultFS']
49+
50+
def hadoop_namenode():
51+
"""Returns the hadoop namenode host or nameservice name in case of HA namenode"""
52+
if hadoop_distro() == 'CDH':
53+
namenode_host = None
54+
name_service = get_name_service()
55+
if name_service:
56+
namenode_host = name_service
57+
else:
58+
namenode_host = cloudera_get_hosts_by_role('hdfs01', 'NAMENODE')[0]
59+
return 'hdfs://%s:8020' % namenode_host
60+
else:
61+
return get_namenode_from_ambari()
62+
63+
def hbase_master_host():
64+
"""Returns host name of an hbase master host"""
65+
if hadoop_distro() == 'CDH':
66+
return 'todo'
67+
else:
68+
return ambari_request('/clusters/%s/services/HBASE/components/HBASE_MASTER' % (cluster_name()))['host_components'][0]['HostRoles']['host_name']
69+
70+
def hadoop_manager_ip():
3571
""" Returns the Cloudera Manager ip address"""
36-
cm = ip_addresses('cloudera_manager')
72+
cm = ip_addresses('hadoop_manager')
3773
if cm is not None and len(cm) > 0:
3874
return cm[0]
3975
else:
@@ -70,9 +106,9 @@ def generate_http_link(role, suffix):
70106
return ''
71107

72108
def cloudera_get_hosts_by_role(service, role_type):
73-
user = __salt__['pillar.get']('admin_login:user')
74-
password = __salt__['pillar.get']('admin_login:password')
75-
endpoint = cloudera_manager_ip() + ':7180'
109+
user = hadoop_manager_username()
110+
password = hadoop_manager_password()
111+
endpoint = hadoop_manager_ip() + ':7180'
76112
cluster = cluster_name()
77113

78114
request_url = 'http://{}/api/v14/clusters/{}/services/{}/roles'.format(endpoint, cluster, service)
@@ -93,3 +129,12 @@ def cloudera_get_hosts_by_role(service, role_type):
93129
hosts_ips.append(ip_address)
94130

95131
return hosts_ips
132+
133+
def ambari_get_hosts_by_role(service, role_type):
134+
return [host['HostRoles']['host_name'] for host in ambari_request('/clusters/%s/services/%s/components/%s' % (cluster_name(),service,role_type))['host_components']]
135+
136+
def get_hosts_by_role(service, role_type):
137+
if hadoop_distro() == 'CDH':
138+
return cloudera_get_hosts_by_role(service, role_type)
139+
else:
140+
return ambari_get_hosts_by_role(service, role_type)

salt/ambari/agent.sls

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
{%- set ambari_server_host = salt['pnda.ip_addresses']('hadoop_manager')[0] -%}
2+
3+
ambari-agent-user:
4+
user.present:
5+
- name: ambari
6+
- groups:
7+
- root
8+
9+
{% if grains['os'] == 'RedHat' %}
10+
ambari-agent-libtirpc:
11+
pkg.installed:
12+
- name: {{ pillar['libtirpc-devel']['package-name'] }}
13+
- version: {{ pillar['libtirpc-devel']['version'] }}
14+
- ignore_epoch: True
15+
{%- endif %}
16+
17+
ambari-agent-pkg:
18+
pkg.installed:
19+
- name: {{ pillar['ambari-agent']['package-name'] }}
20+
- version: {{ pillar['ambari-agent']['version'] }}
21+
- ignore_epoch: True
22+
23+
ambari-agent-properties:
24+
file.managed:
25+
- name: /etc/ambari-agent/conf/ambari-agent.ini
26+
- source: salt://ambari/templates/ambari-agent.ini.tpl
27+
- template: jinja
28+
- permission: 0644
29+
- defaults:
30+
ambari_server_host: {{ ambari_server_host }}
31+
32+
ambari-agent-create_log_dir:
33+
file.directory:
34+
- name: /var/log/pnda/ambari/
35+
- makedirs: True
36+
37+
{% if grains['os'] == 'RedHat' %}
38+
ambari-agent-systemctl_reload:
39+
cmd.run:
40+
- name: /bin/systemctl daemon-reload; /bin/systemctl enable ambari-agent
41+
{%- endif %}
42+
43+
ambari-agent-start_service:
44+
cmd.run:
45+
- name: 'service ambari-agent stop || echo already stopped; service ambari-agent start'
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
2+
# Copyright 2011 The Apache Software Foundation
3+
#
4+
# Licensed to the Apache Software Foundation (ASF) under one
5+
# or more contributor license agreements. See the NOTICE file
6+
# distributed with this work for additional information
7+
# regarding copyright ownership. The ASF licenses this file
8+
# to you under the Apache License, Version 2.0 (the
9+
# "License"); you may not use this file except in compliance
10+
# with the License. You may obtain a copy of the License at
11+
#
12+
# http://www.apache.org/licenses/LICENSE-2.0
13+
#
14+
# Unless required by applicable law or agreed to in writing, software
15+
# distributed under the License is distributed on an "AS IS" BASIS,
16+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17+
# See the License for the specific language governing permissions and
18+
# limitations under the License.
19+
20+
# This file is managed by Salt
21+
22+
# Define some default values that can be overridden by system properties
23+
# Root logger option
24+
ambari.log.dir=/var/log/pnda/ambari/
25+
ambari.log.file=ambari-server.log
26+
ambari.config-changes.file=ambari-config-changes.log
27+
ambari.alerts.file=ambari-alerts.log
28+
29+
log4j.rootLogger=INFO,file
30+
31+
# Direct log messages to a log file
32+
log4j.appender.file=org.apache.log4j.RollingFileAppender
33+
log4j.appender.file.File=/var/log/pnda/ambari/ambari-server.log
34+
log4j.appender.file.MaxFileSize=80MB
35+
log4j.appender.file.MaxBackupIndex=60
36+
log4j.appender.file.layout=org.apache.log4j.PatternLayout
37+
log4j.appender.file.layout.ConversionPattern=%d{DATE} %5p [%t] %c{1}:%L - %m%n
38+
39+
# Log config changes
40+
log4j.logger.configchange=INFO,configchange
41+
log4j.additivity.configchange=false
42+
log4j.appender.configchange=org.apache.log4j.FileAppender
43+
log4j.appender.configchange.File=/var/log/pnda/ambari/ambari-server-config-changes.log
44+
log4j.appender.configchange.layout=org.apache.log4j.PatternLayout
45+
log4j.appender.configchange.layout.ConversionPattern=%d{ISO8601} %5p - %m%n
46+
47+
# Log alert state changes
48+
log4j.logger.alerts=INFO,alerts
49+
log4j.additivity.alerts=false
50+
log4j.appender.alerts=org.apache.log4j.FileAppender
51+
log4j.appender.alerts.File=/var/log/pnda/ambari/ambari-alerts.log
52+
log4j.appender.alerts.layout=org.apache.log4j.PatternLayout
53+
log4j.appender.alerts.layout.ConversionPattern=%d{ISO8601} %m%n
54+
55+
log4j.logger.org.apache.hadoop.yarn.client=WARN
56+
log4j.logger.org.apache.slider.common.tools.SliderUtils=WARN
57+
log4j.logger.org.apache.ambari.server.security.authorization=WARN

0 commit comments

Comments
 (0)