| ''' |
| Licensed to the Apache Software Foundation (ASF) under one |
| or more contributor license agreements. See the NOTICE file |
| distributed with this work for additional information |
| regarding copyright ownership. The ASF licenses this file |
| to you under the Apache License, Version 2.0 (the |
| "License"); you may not use this file except in compliance |
| with the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| ''' |
| |
| import json |
| import os |
| import socket |
| from unittest import TestCase |
| from mock.mock import patch, MagicMock |
| |
| class TestHDP25StackAdvisor(TestCase): |
| |
| def setUp(self): |
| import imp |
| self.maxDiff = None |
| self.testDirectory = os.path.dirname(os.path.abspath(__file__)) |
| stackAdvisorPath = os.path.join(self.testDirectory, '../../../../../main/resources/stacks/stack_advisor.py') |
| hdp206StackAdvisorPath = os.path.join(self.testDirectory, '../../../../../main/resources/stacks/HDP/2.0.6/services/stack_advisor.py') |
| hdp21StackAdvisorPath = os.path.join(self.testDirectory, '../../../../../main/resources/stacks/HDP/2.1/services/stack_advisor.py') |
| hdp22StackAdvisorPath = os.path.join(self.testDirectory, '../../../../../main/resources/stacks/HDP/2.2/services/stack_advisor.py') |
| hdp23StackAdvisorPath = os.path.join(self.testDirectory, '../../../../../main/resources/stacks/HDP/2.3/services/stack_advisor.py') |
| hdp24StackAdvisorPath = os.path.join(self.testDirectory, '../../../../../main/resources/stacks/HDP/2.4/services/stack_advisor.py') |
| hdp25StackAdvisorPath = os.path.join(self.testDirectory, '../../../../../main/resources/stacks/HDP/2.5/services/stack_advisor.py') |
| hdp25StackAdvisorClassName = 'HDP25StackAdvisor' |
| |
| with open(stackAdvisorPath, 'rb') as fp: |
| imp.load_module('stack_advisor', fp, stackAdvisorPath, ('.py', 'rb', imp.PY_SOURCE)) |
| with open(hdp206StackAdvisorPath, 'rb') as fp: |
| imp.load_module('stack_advisor_impl', fp, hdp206StackAdvisorPath, ('.py', 'rb', imp.PY_SOURCE)) |
| with open(hdp21StackAdvisorPath, 'rb') as fp: |
| imp.load_module('stack_advisor_impl', fp, hdp21StackAdvisorPath, ('.py', 'rb', imp.PY_SOURCE)) |
| with open(hdp22StackAdvisorPath, 'rb') as fp: |
| imp.load_module('stack_advisor_impl', fp, hdp22StackAdvisorPath, ('.py', 'rb', imp.PY_SOURCE)) |
| with open(hdp23StackAdvisorPath, 'rb') as fp: |
| imp.load_module('stack_advisor_impl', fp, hdp23StackAdvisorPath, ('.py', 'rb', imp.PY_SOURCE)) |
| with open(hdp24StackAdvisorPath, 'rb') as fp: |
| imp.load_module('stack_advisor_impl', fp, hdp24StackAdvisorPath, ('.py', 'rb', imp.PY_SOURCE)) |
| with open(hdp25StackAdvisorPath, 'rb') as fp: |
| stack_advisor_impl = imp.load_module('stack_advisor_impl', fp, hdp25StackAdvisorPath, ('.py', 'rb', imp.PY_SOURCE)) |
| clazz = getattr(stack_advisor_impl, hdp25StackAdvisorClassName) |
| self.stackAdvisor = clazz() |
| |
| # substitute method in the instance |
| self.get_system_min_uid_real = self.stackAdvisor.get_system_min_uid |
| self.stackAdvisor.get_system_min_uid = self.get_system_min_uid_magic |
| |
| # setup for 'test_recommendYARNConfigurations' |
| self.hosts = { |
| "items": [ |
| { |
| "Hosts": { |
| "cpu_count": 6, |
| "total_mem": 50331648, |
| "disk_info": [ |
| {"mountpoint": "/"}, |
| {"mountpoint": "/dev/shm"}, |
| {"mountpoint": "/vagrant"}, |
| {"mountpoint": "/"}, |
| {"mountpoint": "/dev/shm"}, |
| {"mountpoint": "/vagrant"} |
| ], |
| "public_host_name": "c6401.ambari.apache.org", |
| "host_name": "c6401.ambari.apache.org" |
| }, |
| }, { |
| "Hosts": { |
| "cpu_count": 6, |
| "total_mem": 50331648, |
| "disk_info": [ |
| {"mountpoint": "/"}, |
| {"mountpoint": "/dev/shm"}, |
| {"mountpoint": "/vagrant"}, |
| {"mountpoint": "/"}, |
| {"mountpoint": "/dev/shm"}, |
| {"mountpoint": "/vagrant"} |
| ], |
| "public_host_name": "c6402.ambari.apache.org", |
| "host_name": "c6402.ambari.apache.org" |
| }, |
| }, { |
| "Hosts": { |
| "cpu_count": 6, |
| "total_mem": 50331648, |
| "disk_info": [ |
| {"mountpoint": "/"}, |
| {"mountpoint": "/dev/shm"}, |
| {"mountpoint": "/vagrant"}, |
| {"mountpoint": "/"}, |
| {"mountpoint": "/dev/shm"}, |
| {"mountpoint": "/vagrant"} |
| ], |
| "public_host_name": "c6403.ambari.apache.org", |
| "host_name": "c6403.ambari.apache.org" |
| }, |
| }, { |
| "Hosts": { |
| "cpu_count": 6, |
| "total_mem": 50331648, |
| "disk_info": [ |
| {"mountpoint": "/"}, |
| {"mountpoint": "/dev/shm"}, |
| {"mountpoint": "/vagrant"}, |
| {"mountpoint": "/"}, |
| {"mountpoint": "/dev/shm"}, |
| {"mountpoint": "/vagrant"} |
| ], |
| "public_host_name": "c6404.ambari.apache.org", |
| "host_name": "c6404.ambari.apache.org" |
| }, |
| }, { |
| "Hosts": { |
| "cpu_count": 6, |
| "total_mem": 50331648, |
| "disk_info": [ |
| {"mountpoint": "/"}, |
| {"mountpoint": "/dev/shm"}, |
| {"mountpoint": "/vagrant"}, |
| {"mountpoint": "/"}, |
| {"mountpoint": "/dev/shm"}, |
| {"mountpoint": "/vagrant"} |
| ], |
| "public_host_name": "c6405.ambari.apache.org", |
| "host_name": "c6405.ambari.apache.org" |
| }, |
| } |
| ] |
| } |
| |
| # Expected config outputs. |
| |
| # Expected capacity-scheduler with 'llap' (size:20) and 'default' queue at root level. |
| self.expected_capacity_scheduler_llap_queue_size_20 = { |
| "properties": { |
| "capacity-scheduler": 'yarn.scheduler.capacity.root.default.maximum-capacity=80\n' |
| 'yarn.scheduler.capacity.root.accessible-node-labels=*\n' |
| 'yarn.scheduler.capacity.root.capacity=100\n' |
| 'yarn.scheduler.capacity.root.queues=default,llap\n' |
| 'yarn.scheduler.capacity.maximum-applications=10000\n' |
| 'yarn.scheduler.capacity.root.default.user-limit-factor=1\n' |
| 'yarn.scheduler.capacity.root.default.state=RUNNING\n' |
| 'yarn.scheduler.capacity.maximum-am-resource-percent=1\n' |
| 'yarn.scheduler.capacity.root.default.acl_submit_applications=*\n' |
| 'yarn.scheduler.capacity.root.default.capacity=80\n' |
| 'yarn.scheduler.capacity.root.acl_administer_queue=*\n' |
| 'yarn.scheduler.capacity.node-locality-delay=40\n' |
| 'yarn.scheduler.capacity.queue-mappings-override.enable=false\n' |
| 'yarn.scheduler.capacity.root.llap.user-limit-factor=1\n' |
| 'yarn.scheduler.capacity.root.llap.state=RUNNING\n' |
| 'yarn.scheduler.capacity.root.llap.ordering-policy=fifo\n' |
| 'yarn.scheduler.capacity.root.llap.minimum-user-limit-percent=100\n' |
| |
| 'yarn.scheduler.capacity.root.llap.maximum-capacity=20\n' |
| 'yarn.scheduler.capacity.root.llap.capacity=20\n' |
| 'yarn.scheduler.capacity.root.llap.acl_submit_applications=hive\n' |
| 'yarn.scheduler.capacity.root.llap.acl_administer_queue=hive\n' |
| 'yarn.scheduler.capacity.root.llap.maximum-am-resource-percent=1' |
| |
| } |
| } |
| |
| # Expected capacity-scheduler with 'llap' (size:40) and 'default' queue at root level. |
| self.expected_capacity_scheduler_llap_queue_size_40 = { |
| "properties": { |
| "capacity-scheduler": 'yarn.scheduler.capacity.root.default.maximum-capacity=60\n' |
| 'yarn.scheduler.capacity.root.accessible-node-labels=*\n' |
| 'yarn.scheduler.capacity.root.capacity=100\n' |
| 'yarn.scheduler.capacity.root.queues=default,llap\n' |
| 'yarn.scheduler.capacity.maximum-applications=10000\n' |
| 'yarn.scheduler.capacity.root.default.user-limit-factor=1\n' |
| 'yarn.scheduler.capacity.root.default.state=RUNNING\n' |
| 'yarn.scheduler.capacity.maximum-am-resource-percent=1\n' |
| 'yarn.scheduler.capacity.root.default.acl_submit_applications=*\n' |
| 'yarn.scheduler.capacity.root.default.capacity=60\n' |
| 'yarn.scheduler.capacity.root.acl_administer_queue=*\n' |
| 'yarn.scheduler.capacity.node-locality-delay=40\n' |
| 'yarn.scheduler.capacity.queue-mappings-override.enable=false\n' |
| 'yarn.scheduler.capacity.root.llap.user-limit-factor=1\n' |
| 'yarn.scheduler.capacity.root.llap.state=RUNNING\n' |
| 'yarn.scheduler.capacity.root.llap.ordering-policy=fifo\n' |
| 'yarn.scheduler.capacity.root.llap.minimum-user-limit-percent=100\n' |
| 'yarn.scheduler.capacity.root.llap.maximum-capacity=40\n' |
| 'yarn.scheduler.capacity.root.llap.capacity=40\n' |
| 'yarn.scheduler.capacity.root.llap.acl_submit_applications=hive\n' |
| 'yarn.scheduler.capacity.root.llap.acl_administer_queue=hive\n' |
| 'yarn.scheduler.capacity.root.llap.maximum-am-resource-percent=1' |
| |
| } |
| } |
| |
| # Expected capacity-scheduler with 'llap' state = STOPPED, cap = 0 % and 'default' queue cap to 100%. |
| self.expected_capacity_scheduler_llap_Stopped_size_0 = { |
| "properties": { |
| "capacity-scheduler": 'yarn.scheduler.capacity.root.default.maximum-capacity=100\n' |
| 'yarn.scheduler.capacity.root.accessible-node-labels=*\n' |
| 'yarn.scheduler.capacity.root.capacity=100\n' |
| 'yarn.scheduler.capacity.root.queues=default,llap\n' |
| 'yarn.scheduler.capacity.maximum-applications=10000\n' |
| 'yarn.scheduler.capacity.root.default.user-limit-factor=1\n' |
| 'yarn.scheduler.capacity.root.default.state=RUNNING\n' |
| 'yarn.scheduler.capacity.maximum-am-resource-percent=1\n' |
| 'yarn.scheduler.capacity.root.default.acl_submit_applications=*\n' |
| 'yarn.scheduler.capacity.root.default.capacity=100\n' |
| 'yarn.scheduler.capacity.root.acl_administer_queue=*\n' |
| 'yarn.scheduler.capacity.node-locality-delay=40\n' |
| 'yarn.scheduler.capacity.queue-mappings-override.enable=false\n' |
| 'yarn.scheduler.capacity.root.llap.user-limit-factor=1\n' |
| 'yarn.scheduler.capacity.root.llap.state=STOPPED\n' |
| 'yarn.scheduler.capacity.root.llap.ordering-policy=fifo\n' |
| 'yarn.scheduler.capacity.root.llap.minimum-user-limit-percent=100\n' |
| 'yarn.scheduler.capacity.root.llap.maximum-capacity=0\n' |
| 'yarn.scheduler.capacity.root.llap.capacity=0\n' |
| 'yarn.scheduler.capacity.root.llap.acl_submit_applications=hive\n' |
| 'yarn.scheduler.capacity.root.llap.acl_administer_queue=hive\n' |
| 'yarn.scheduler.capacity.root.llap.maximum-am-resource-percent=1' |
| |
| } |
| } |
| |
| # Expected capacity-scheduler with only 'default' queue. |
| self.expected_capacity_scheduler_with_default_queue_only = { |
| "properties": { |
| "capacity-scheduler": 'yarn.scheduler.capacity.root.accessible-node-labels=*\n' |
| 'yarn.scheduler.capacity.maximum-am-resource-percent=1\n' |
| 'yarn.scheduler.capacity.root.capacity=100\n' |
| 'yarn.scheduler.capacity.root.default.state=RUNNING\n' |
| 'yarn.scheduler.capacity.node-locality-delay=40\n' |
| 'yarn.scheduler.capacity.root.queues=default\n' |
| 'yarn.scheduler.capacity.maximum-applications=10000\n' |
| 'yarn.scheduler.capacity.root.default.user-limit-factor=1\n' |
| 'yarn.scheduler.capacity.root.acl_administer_queue=*\n' |
| 'yarn.scheduler.capacity.root.default.acl_submit_applications=*\n' |
| 'yarn.scheduler.capacity.root.default.capacity=100\n' |
| "yarn.scheduler.capacity.root.default.maximum-capacity=100\n" |
| 'yarn.scheduler.capacity.queue-mappings-override.enable=false\n' |
| } |
| } |
| |
| # Expected capacity-scheduler as empty. |
| self.expected_capacity_scheduler_empty = { |
| "properties": { |
| } |
| } |
| |
| # Expected 'hive_interactive_site' with (1). 'hive.llap.daemon.queue.name' set to 'llap' queue, and |
| # (2). 'hive.llap.daemon.queue.name' property_attributes set to : default and llap. |
| self.expected_hive_interactive_site_llap = { |
| "hive-interactive-site": { |
| "properties": { |
| "hive.llap.daemon.queue.name": "llap" |
| }, |
| "property_attributes": { |
| "hive.llap.daemon.queue.name": { |
| "entries": [ |
| { |
| "value": "default", |
| "label": "default" |
| }, |
| { |
| "value": "llap", |
| "label": "llap" |
| } |
| ] |
| } |
| } |
| } |
| } |
| |
| |
| # Expected 'hive_interactive_site' with 'hive.llap.daemon.queue.name' property_attributes set to : 'a1', 'b' and llap. |
| self.expected_hive_interactive_site_prop_attr_as_a1_b_llap = { |
| "hive-interactive-site": { |
| "property_attributes": { |
| "hive.llap.daemon.queue.name": { |
| "entries": [ |
| { |
| "value": "a1", |
| "label": "a1" |
| }, |
| { |
| "value": "b", |
| "label": "b" |
| }, |
| { |
| "value": "llap", |
| "label": "llap" |
| } |
| ] |
| } |
| } |
| } |
| } |
| |
| |
| # Expected 'hive_interactive_site' with (1). 'hive.llap.daemon.queue.name' set to 'default' queue, and |
| # (2). 'hive.llap.daemon.queue.name' property_attributes set to : default. |
| self.expected_hive_interactive_site_default = { |
| "hive-interactive-site": { |
| "properties": { |
| "hive.server2.tez.default.queues": "default", |
| "hive.llap.daemon.queue.name": "default" |
| }, |
| "property_attributes": { |
| "hive.llap.daemon.queue.name": { |
| "entries": [ |
| { |
| "value": "default", |
| "label": "default" |
| } |
| ] |
| } |
| } |
| } |
| } |
| |
| # Expected 'hive_interactive_site' when no modifications are done. |
| self.expected_hive_interactive_site_empty = { |
| "hive-interactive-site": { |
| "properties": { |
| } |
| } |
| } |
| |
| # Expected 'hive_interactive_site' when no modifications are done. |
| self.expected_hive_interactive_env_empty = { |
| "hive-interactive-env": { |
| "properties": { |
| } |
| } |
| } |
| |
| self.expected_hive_interactive_site_only_memory = { |
| "hive-interactive-site": { |
| "properties": { |
| 'hive.llap.daemon.yarn.container.mb': '341' |
| } |
| } |
| } |
| |
| # Expected 'hive_interactive_env' with 'llap_queue_capacity' set to 20. |
| self.expected_llap_queue_capacity_20 = '20' |
| |
| # Expected 'hive_interactive_env' with 'llap_queue_capacity' set to 40. |
| self.expected_llap_queue_capacity_40 = '40' |
| |
| |
| # expected vals. |
| self.expected_visibility_false = {'visible': 'false'} |
| self.expected_visibility_true = {'visible': 'true'} |
| |
| def test_recommendSPARK2Configurations(self): |
| configurations = {} |
| services = {"configurations": configurations} |
| services['services'] = [ |
| { |
| "StackServices": { |
| "service_name": "SPARK2" |
| }, |
| } |
| ] |
| clusterData = { |
| "cpu": 4, |
| "containers": 5, |
| "ramPerContainer": 256 |
| } |
| expected = { |
| "spark2-defaults": { |
| "properties": { |
| "spark.yarn.queue": "default" |
| } |
| }, |
| "spark2-thrift-sparkconf": { |
| "properties": { |
| "spark.yarn.queue": "default" |
| } |
| } |
| } |
| |
| self.stackAdvisor.recommendSpark2Configurations(configurations, clusterData, services, None) |
| self.assertEquals(configurations, expected) |
| |
| def load_json(self, filename): |
| file = os.path.join(self.testDirectory, filename) |
| with open(file, 'rb') as f: |
| data = json.load(f) |
| return data |
| |
| def prepareHosts(self, hostsNames): |
| hosts = { "items": [] } |
| for hostName in hostsNames: |
| nextHost = {"Hosts":{"host_name" : hostName}} |
| hosts["items"].append(nextHost) |
| return hosts |
| |
| @patch('__builtin__.open') |
| @patch('os.path.exists') |
| def get_system_min_uid_magic(self, exists_mock, open_mock): |
| class MagicFile(object): |
| def read(self): |
| return """ |
| #test line UID_MIN 200 |
| UID_MIN 500 |
| """ |
| |
| def __exit__(self, exc_type, exc_val, exc_tb): |
| pass |
| |
| def __enter__(self): |
| return self |
| |
| exists_mock.return_value = True |
| open_mock.return_value = MagicFile() |
| return self.get_system_min_uid_real() |
| |
| |
| def __getHosts(self, componentsList, componentName): |
| return [component["StackServiceComponents"] for component in componentsList if component["StackServiceComponents"]["component_name"] == componentName][0] |
| |
| |
| def test_getComponentLayoutValidations_one_hsi_host(self): |
| |
| hosts = self.load_json("host-3-hosts.json") |
| services = self.load_json("services-normal-his-2-hosts.json") |
| |
| validations = self.stackAdvisor.getComponentLayoutValidations(services, hosts) |
| expected = {'component-name': 'HIVE_SERVER_INTERACTIVE', 'message': 'Between 0 and 1 HiveServer2 Interactive components should be installed in cluster.', 'type': 'host-component', 'level': 'ERROR'} |
| self.assertEquals(validations[0], expected) |
| |
| |
| def test_validateYarnConfigurations(self): |
| properties = {'enable_hive_interactive': 'true', |
| 'hive_server_interactive_host': 'c6401.ambari.apache.org', |
| 'hive.tez.container.size': '2048'} |
| recommendedDefaults = {'enable_hive_interactive': 'true', |
| "hive_server_interactive_host": "c6401.ambari.apache.org"} |
| configurations = { |
| "hive-interactive-env": { |
| "properties": {'enable_hive_interactive': 'true', "hive_server_interactive_host": "c6401.ambari.apache.org"} |
| }, |
| "hive-site": { |
| "properties": {"hive.security.authorization.enabled": "true", 'hive.tez.java.opts': '-server -Djava.net.preferIPv4Stack=true'} |
| }, |
| "hive-env": { |
| "properties": {"hive_security_authorization": "None"} |
| }, |
| "yarn-site": { |
| "properties": {"yarn.resourcemanager.work-preserving-recovery.enabled": "false"} |
| } |
| } |
| services = self.load_json("services-normal-his-valid.json") |
| |
| res_expected = [ |
| {'config-type': 'yarn-site', 'message': 'While enabling HIVE_SERVER_INTERACTIVE it is recommended that you enable work preserving restart in YARN.', 'type': 'configuration', 'config-name': 'yarn.resourcemanager.work-preserving-recovery.enabled', 'level': 'WARN'} |
| ] |
| res = self.stackAdvisor.validateYarnConfigurations(properties, recommendedDefaults, configurations, services, {}) |
| self.assertEquals(res, res_expected) |
| pass |
| |
| def test_validateHiveInteractiveEnvConfigurations(self): |
| properties = {'enable_hive_interactive': 'true', |
| 'hive_server_interactive_host': 'c6401.ambari.apache.org', |
| 'hive.tez.container.size': '2048'} |
| recommendedDefaults = {'enable_hive_interactive': 'true', |
| "hive_server_interactive_host": "c6401.ambari.apache.org"} |
| configurations = { |
| "hive-interactive-env": { |
| "properties": {'enable_hive_interactive': 'true', 'hive_server_interactive_host': 'c6401.ambari.apache.org'} |
| }, |
| "hive-site": { |
| "properties": {"hive.security.authorization.enabled": "true", 'hive.tez.java.opts': '-server -Djava.net.preferIPv4Stack=true'} |
| }, |
| "hive-env": { |
| "properties": {"hive_security_authorization": "None"} |
| }, |
| "yarn-site": { |
| "properties": {"yarn.resourcemanager.work-preserving-recovery.enabled": "true"} |
| } |
| } |
| configurations2 = { |
| "hive-interactive-env": { |
| "properties": {'enable_hive_interactive': 'false'} |
| }, |
| "hive-site": { |
| "properties": {"hive.security.authorization.enabled": "true", 'hive.tez.java.opts': '-server -Djava.net.preferIPv4Stack=true'} |
| }, |
| "hive-env": { |
| "properties": {"hive_security_authorization": "None"} |
| }, |
| "yarn-site": { |
| "properties": {"yarn.resourcemanager.work-preserving-recovery.enabled": "true"} |
| } |
| } |
| configurations3 = { |
| "hive-interactive-env": { |
| "properties": {'enable_hive_interactive': 'true', "hive_server_interactive_host": "c6402.ambari.apache.org"} |
| }, |
| "hive-site": { |
| "properties": {"hive.security.authorization.enabled": "true", 'hive.tez.java.opts': '-server -Djava.net.preferIPv4Stack=true'} |
| }, |
| "hive-env": { |
| "properties": {"hive_security_authorization": "None"} |
| }, |
| "yarn-site": { |
| "properties": {"yarn.resourcemanager.work-preserving-recovery.enabled": "true"} |
| } |
| } |
| services = self.load_json("services-normal-his-valid.json") |
| |
| res_expected = [ |
| ] |
| # the above error is not what we are checking for - just to keep test happy without having to test |
| res = self.stackAdvisor.validateHiveInteractiveEnvConfigurations(properties, recommendedDefaults, configurations, services, {}) |
| self.assertEquals(res, res_expected) |
| |
| res_expected = [ |
| {'config-type': 'hive-interactive-env', 'message': 'HIVE_SERVER_INTERACTIVE requires enable_hive_interactive in hive-interactive-env set to true.', 'type': 'configuration', 'config-name': 'enable_hive_interactive', 'level': 'ERROR'}, |
| {'config-type': 'hive-interactive-env', 'message': 'HIVE_SERVER_INTERACTIVE requires hive_server_interactive_host in hive-interactive-env set to its host name.', 'type': 'configuration', 'config-name': 'hive_server_interactive_host', 'level': 'ERROR'} |
| ] |
| res = self.stackAdvisor.validateHiveInteractiveEnvConfigurations(properties, recommendedDefaults, configurations2, services, {}) |
| self.assertEquals(res, res_expected) |
| |
| res_expected = [ |
| {'config-type': 'hive-interactive-env', 'message': 'HIVE_SERVER_INTERACTIVE requires hive_server_interactive_host in hive-interactive-env set to its host name.', 'type': 'configuration', 'config-name': 'hive_server_interactive_host', 'level': 'ERROR'} |
| ] |
| res = self.stackAdvisor.validateHiveInteractiveEnvConfigurations(properties, recommendedDefaults, configurations3, services, {}) |
| self.assertEquals(res, res_expected) |
| pass |
| |
| |
| """ |
| Tests validations for Hive Server Interactive site. |
| """ |
| def test_validateHiveInteractiveSiteConfigurations(self): |
| # Performing setup |
| |
| hosts = { |
| "items": [ |
| { |
| "Hosts": { |
| "cpu_count": 6, |
| "total_mem": 50331648, |
| "disk_info": [ |
| {"mountpoint": "/"}, |
| {"mountpoint": "/dev/shm"}, |
| {"mountpoint": "/vagrant"}, |
| {"mountpoint": "/"}, |
| {"mountpoint": "/dev/shm"}, |
| {"mountpoint": "/vagrant"} |
| ], |
| "public_host_name": "c6402.ambari.apache.org", |
| "host_name": "c6402.ambari.apache.org" |
| }, |
| } |
| ] |
| } |
| |
| |
| # Test A : When selected queue capacity is < than the minimum required for LLAP app to run |
| # Expected : Error telling about the current size compared to minimum required size. |
| services1 = self.load_json("services-normal-his-valid.json") |
| res_expected1 = [ |
| {'config-type': 'hive-interactive-site', 'message': "Selected queue 'llap' capacity (49%) is less than minimum required " |
| "capacity (50%) for LLAP app to run", 'type': 'configuration', 'config-name': 'hive.llap.daemon.queue.name', 'level': 'ERROR'}, |
| ] |
| res1 = self.stackAdvisor.validateHiveInteractiveSiteConfigurations({}, {}, {}, services1, hosts) |
| self.assertEquals(res1, res_expected1) |
| |
| |
| |
| # Test B : When selected queue capacity is < than the minimum required for LLAP app to run |
| # and selected queue current state is "STOPPED". |
| # Expected : 1. Error telling about the current size compared to minimum required size. |
| # 2. Error telling about current state can't be STOPPED. Expected : RUNNING. |
| # 3. Error telling about config 'hive.server2.enable.doAs' to be false at all times. |
| # 4. Error telling about config 'hive.server2.tez.sessions.per.default.queue' that its consuming more |
| # than 50% of queue capacity for LLAP. |
| services2 = self.load_json("services-normal-his-2-hosts.json") |
| res_expected2 = [ |
| {'config-type': 'hive-interactive-site', 'message': "Selected queue 'llap' capacity (49%) is less than minimum required " |
| "capacity (50%) for LLAP app to run", 'type': 'configuration', 'config-name': 'hive.llap.daemon.queue.name', 'level': 'ERROR'}, |
| {'config-type': 'hive-interactive-site', 'message': "Selected queue 'llap' current state is : 'STOPPED'. It is required to be in " |
| "'RUNNING' state for LLAP to run", 'type': 'configuration', 'config-name': 'hive.llap.daemon.queue.name', 'level': 'ERROR'}, |
| {'config-type': 'hive-interactive-site', 'message': "Value should be set to 'false' for Hive2.", 'type': 'configuration', 'config-name': 'hive.server2.enable.doAs', 'level': 'ERROR'}, |
| {'config-type': 'hive-interactive-site', 'message': " Reducing the 'Maximum Total Concurrent Queries' (value: 32) is advisable as it is consuming more than 50% of 'llap' queue for " |
| "LLAP.", 'type': 'configuration', 'config-name': 'hive.server2.tez.sessions.per.default.queue', 'level': 'WARN'} |
| ] |
| res2 = self.stackAdvisor.validateHiveInteractiveSiteConfigurations({}, {}, {}, services2, hosts) |
| self.assertEquals(res2, res_expected2) |
| |
| |
| # Test C : When selected queue capacity is >= the minimum required for LLAP app to run, using the passed in configurations. |
| # Expected : No error. |
| configurations = { |
| "yarn-site": { |
| "properties": { |
| "yarn.nodemanager.resource.memory-mb":"10240", |
| "yarn.scheduler.minimum-allocation-mb":"341" |
| } |
| }, |
| "hive-site": { |
| "properties": { |
| "hive.tez.container.size" : "341", |
| "tez.am.resource.memory.mb" : "341" |
| } |
| }, |
| "tez-site": { |
| "properties": { |
| "tez.am.resource.memory.mb" : "341" |
| } |
| } |
| } |
| res_expected3 = [] |
| res3 = self.stackAdvisor.validateHiveInteractiveSiteConfigurations({}, {}, configurations, services1, hosts) |
| self.assertEquals(res3, res_expected3) |
| |
| |
| # Test D : When remaining available capacity is less than 512M (designated for running service checks), using the passed in configurations. |
| # Expected : WARN error as 'Service checks may not run as remaining available capacity is less than 512M'. |
| # With current configs passed in, also getting selected queue capacity is < than the minimum required for LLAP app to run. |
| configurations = { |
| "yarn-site": { |
| "properties": { |
| "yarn.nodemanager.resource.memory-mb":"512", |
| "yarn.scheduler.minimum-allocation-mb":"341" |
| } |
| }, |
| "hive-site": { |
| "properties": { |
| "hive.tez.container.size" : "341", |
| "tez.am.resource.memory.mb" : "341" |
| } |
| }, |
| "tez-site": { |
| "properties": { |
| "tez.am.resource.memory.mb" : "341" |
| } |
| }, |
| } |
| res_expected4 = [ |
| {'config-type': 'hive-interactive-site', 'message': "Selected queue 'llap' capacity (49%) is less than minimum required capacity (200%) for LLAP app to run", |
| 'type': 'configuration', 'config-name': 'hive.llap.daemon.queue.name', 'level': 'ERROR'}, |
| {'config-type': 'hive-interactive-site', 'message': "Capacity used by 'llap' queue is '250.88'. Service checks may not run as remaining available capacity " |
| "(261.12) in cluster is less than 512 MB.", 'type': 'configuration', 'config-name': 'hive.llap.daemon.queue.name', 'level': 'WARN'}] |
| res4 = self.stackAdvisor.validateHiveInteractiveSiteConfigurations({}, {}, configurations, services1, hosts) |
| |
| self.assertEquals(res4, res_expected4) |
| pass |
| |
| |
| |
| |
| |
| |
| # Tests related to 'recommendYARNConfigurations()' |
| |
| |
| # Test 1 : (1). Only default queue exists in capacity-scheduler and 'capacity-scheduler' configs are passed-in as |
| # single "/n" separated string (2). enable_hive_interactive' is 'On' and 'llap_queue_capacity is 0. |
| def test_recommendYARNConfigurations_create_llap_queue_1(self): |
| |
| services = { |
| "Versions": { |
| "parent_stack_version": "2.4", |
| "stack_name": "HDP", |
| "stack_version": "2.5", |
| "stack_hierarchy": { |
| "stack_name": "HDP", |
| "stack_versions": ["2.4", "2.3", "2.2", "2.1", "2.0.6"] |
| } |
| }, |
| "services": [{ |
| "StackServices": { |
| "service_name": "YARN", |
| }, |
| "components": [ |
| { |
| "StackServiceComponents": { |
| "component_name": "NODEMANAGER", |
| "hostnames": ["c6401.ambari.apache.org"] |
| }, |
| } |
| ] |
| }, { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE", |
| "StackServices": { |
| "service_name": "HIVE", |
| "service_version": "1.2.1.2.5", |
| "stack_name": "HDP", |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE/components/HIVE_SERVER_INTERACTIVE", |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "bulk_commands_display_name": "", |
| "bulk_commands_master_component_name": "", |
| "cardinality": "0-1", |
| "component_category": "MASTER", |
| "component_name": "HIVE_SERVER_INTERACTIVE", |
| "custom_commands": ["RESTART_LLAP"], |
| "decommission_allowed": "false", |
| "display_name": "HiveServer2 Interactive", |
| "has_bulk_commands_definition": "false", |
| "is_client": "false", |
| "is_master": "true", |
| "reassign_allowed": "false", |
| "recovery_enabled": "false", |
| "service_name": "HIVE", |
| "stack_name": "HDP", |
| "stack_version": "2.5", |
| "hostnames": ["c6401.ambari.apache.org"] |
| }, |
| "dependencies": [] |
| } |
| ] |
| } |
| ], |
| "changed-configurations": [ |
| { |
| u'old_value': u'', |
| u'type': u'', |
| u'name': u'' |
| } |
| ], |
| "configurations": { |
| "capacity-scheduler": { |
| "properties": { |
| "capacity-scheduler": "yarn.scheduler.capacity.root.queues=default\n" |
| "yarn.scheduler.capacity.root.default.user-limit-factor=1\n" |
| "yarn.scheduler.capacity.root.default.state=RUNNING\n" |
| "yarn.scheduler.capacity.root.default.maximum-capacity=100\n" |
| "yarn.scheduler.capacity.root.default.capacity=100\n" |
| "yarn.scheduler.capacity.root.default.acl_submit_applications=*\n" |
| "yarn.scheduler.capacity.root.capacity=100\n" |
| "yarn.scheduler.capacity.root.acl_administer_queue=*\n" |
| "yarn.scheduler.capacity.root.accessible-node-labels=*\n" |
| "yarn.scheduler.capacity.node-locality-delay=40\n" |
| "yarn.scheduler.capacity.maximum-applications=10000\n" |
| "yarn.scheduler.capacity.maximum-am-resource-percent=1\n" |
| "yarn.scheduler.capacity.queue-mappings-override.enable=false\n" |
| } |
| }, |
| "hive-interactive-env": |
| { |
| 'properties': { |
| 'enable_hive_interactive': 'true', |
| 'llap_queue_capacity':'0' |
| } |
| }, |
| "yarn-site": { |
| "properties": { |
| "yarn.scheduler.minimum-allocation-mb": "682", |
| "yarn.nodemanager.resource.memory-mb": "10240", |
| "yarn.nodemanager.resource.cpu-vcores": "1" |
| } |
| }, |
| "hive-interactive-site": |
| { |
| 'properties': { |
| 'hive.llap.daemon.queue.name':'default' |
| } |
| }, |
| "tez-site": { |
| "properties": { |
| "tez.am.resource.memory.mb": "341" |
| } |
| }, |
| "hive-env": |
| { |
| 'properties': { |
| 'hive_user': 'hive' |
| } |
| }, |
| "hive-site": |
| { |
| 'properties': { |
| 'hive.tez.container.size': '341' |
| } |
| }, |
| } |
| } |
| |
| clusterData = { |
| "cpu": 4, |
| "mapMemory": 30000, |
| "amMemory": 20000, |
| "reduceMemory": 20560, |
| "containers": 30, |
| "ramPerContainer": 512, |
| "referenceNodeManagerHost" : { |
| "total_mem" : 10240 * 1024 |
| } |
| } |
| |
| configurations = { |
| } |
| self.stackAdvisor.recommendYARNConfigurations(configurations, clusterData, services, self.hosts) |
| # Check output |
| self.assertEquals(configurations['hive-interactive-site']['properties']['hive.llap.daemon.queue.name'], |
| self.expected_hive_interactive_site_llap['hive-interactive-site']['properties']['hive.llap.daemon.queue.name']) |
| self.assertEquals(configurations['hive-interactive-site']['property_attributes']['hive.llap.daemon.queue.name'], |
| self.expected_hive_interactive_site_llap['hive-interactive-site']['property_attributes']['hive.llap.daemon.queue.name']) |
| self.assertEquals(configurations['hive-interactive-env']['properties']['llap_queue_capacity'], |
| self.expected_llap_queue_capacity_20) |
| |
| cap_sched_output_dict = convertToDict(configurations['capacity-scheduler']['properties']['capacity-scheduler']) |
| cap_sched_expected_dict = convertToDict(self.expected_capacity_scheduler_llap_queue_size_20['properties']['capacity-scheduler']) |
| self.assertEqual(cap_sched_output_dict, cap_sched_expected_dict) |
| self.assertEquals(configurations['hive-interactive-env']['property_attributes']['llap_queue_capacity'], |
| {'maximum': '100', 'minimum': '20', 'visible': 'true'}) |
| |
| |
| |
| |
| |
| # Test 2 : (1). Only default queue exists in capacity-scheduler and capacity-scheduler is passed-in as a dictionary, |
| # and services['configurations']["capacity-scheduler"]["properties"]["capacity-scheduler"] is set to value "null" |
| # (2). enable_hive_interactive' is 'On' and 'llap_queue_capacity is set a -ve value (-10). |
| def test_recommendYARNConfigurations_create_llap_queue_2(self): |
| |
| services = { |
| "services": [{ |
| "StackServices": { |
| "service_name": "YARN", |
| }, |
| "Versions": { |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "StackServiceComponents": { |
| "component_name": "NODEMANAGER", |
| "hostnames": ["c6401.ambari.apache.org"] |
| }, |
| } |
| ] |
| }, { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE", |
| "StackServices": { |
| "service_name": "HIVE", |
| "service_version": "1.2.1.2.5", |
| "stack_name": "HDP", |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE/components/HIVE_SERVER_INTERACTIVE", |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "bulk_commands_display_name": "", |
| "bulk_commands_master_component_name": "", |
| "cardinality": "0-1", |
| "component_category": "MASTER", |
| "component_name": "HIVE_SERVER_INTERACTIVE", |
| "custom_commands": ["RESTART_LLAP"], |
| "decommission_allowed": "false", |
| "display_name": "HiveServer2 Interactive", |
| "has_bulk_commands_definition": "false", |
| "is_client": "false", |
| "is_master": "true", |
| "reassign_allowed": "false", |
| "recovery_enabled": "false", |
| "service_name": "HIVE", |
| "stack_name": "HDP", |
| "stack_version": "2.5", |
| "hostnames": ["c6401.ambari.apache.org"] |
| }, |
| "dependencies": [] |
| } |
| ] |
| } |
| ], |
| "changed-configurations": [ |
| { |
| u'old_value': u'', |
| u'type': u'', |
| u'name': u'' |
| } |
| ], |
| "configurations": { |
| "capacity-scheduler" : { |
| "properties" : { |
| "capacity-scheduler" : "null", |
| "yarn.scheduler.capacity.root.accessible-node-labels" : "*", |
| "yarn.scheduler.capacity.maximum-am-resource-percent" : "1", |
| "yarn.scheduler.capacity.root.acl_administer_queue" : "*", |
| 'yarn.scheduler.capacity.queue-mappings-override.enable' : 'false', |
| "yarn.scheduler.capacity.root.default.capacity" : "100", |
| "yarn.scheduler.capacity.root.default.user-limit-factor" : "1", |
| "yarn.scheduler.capacity.root.queues" : "default", |
| "yarn.scheduler.capacity.root.capacity" : "100", |
| "yarn.scheduler.capacity.root.default.acl_submit_applications" : "*", |
| "yarn.scheduler.capacity.root.default.maximum-capacity" : "100", |
| "yarn.scheduler.capacity.node-locality-delay" : "40", |
| "yarn.scheduler.capacity.maximum-applications" : "10000", |
| "yarn.scheduler.capacity.root.default.state" : "RUNNING" |
| } |
| }, |
| "hive-interactive-env": |
| { |
| 'properties': { |
| 'enable_hive_interactive': 'true', |
| 'llap_queue_capacity':'-10' |
| } |
| }, |
| "yarn-site": { |
| "properties": { |
| "yarn.scheduler.minimum-allocation-mb": "682", |
| "yarn.nodemanager.resource.memory-mb": "10240", |
| "yarn.nodemanager.resource.cpu-vcores": "1" |
| } |
| }, |
| "hive-interactive-site": |
| { |
| 'properties': { |
| 'hive.llap.daemon.queue.name':'default' |
| } |
| }, |
| "tez-site": { |
| "properties": { |
| "tez.am.resource.memory.mb": "341" |
| } |
| }, |
| "hive-env": |
| { |
| 'properties': { |
| 'hive_user': 'hive' |
| } |
| }, |
| "hive-site": |
| { |
| 'properties': { |
| 'hive.tez.container.size': '341' |
| } |
| }, |
| } |
| } |
| |
| clusterData = { |
| "cpu": 4, |
| "mapMemory": 30000, |
| "amMemory": 20000, |
| "reduceMemory": 20560, |
| "containers": 30, |
| "ramPerContainer": 512, |
| "referenceNodeManagerHost" : { |
| "total_mem" : 10240 * 1024 |
| } |
| } |
| |
| |
| configurations = { |
| } |
| |
| self.stackAdvisor.recommendYARNConfigurations(configurations, clusterData, services, self.hosts) |
| # Check output |
| |
| self.assertEquals(configurations['hive-interactive-site']['properties']['hive.llap.daemon.queue.name'], |
| self.expected_hive_interactive_site_llap['hive-interactive-site']['properties']['hive.llap.daemon.queue.name']) |
| self.assertEquals(configurations['hive-interactive-site']['property_attributes']['hive.llap.daemon.queue.name'], |
| self.expected_hive_interactive_site_llap['hive-interactive-site']['property_attributes']['hive.llap.daemon.queue.name']) |
| self.assertEquals(configurations['hive-interactive-env']['properties']['llap_queue_capacity'], |
| self.expected_llap_queue_capacity_20) |
| |
| cap_sched_output_dict = configurations['capacity-scheduler']['properties'] |
| self.assertTrue(isinstance(cap_sched_output_dict, dict)) |
| cap_sched_expected_dict = convertToDict(self.expected_capacity_scheduler_llap_queue_size_20['properties']['capacity-scheduler']) |
| self.assertEqual(cap_sched_output_dict, cap_sched_expected_dict) |
| self.assertEquals(configurations['hive-interactive-env']['property_attributes']['llap_queue_capacity'], |
| {'maximum': '100', 'minimum': '20', 'visible': 'true'}) |
| |
| |
| # Test 3 : (1). Only default queue exists in capacity-scheduler and capacity-scheduler is passed-in as a dictionary, |
| # and services['configurations']["capacity-scheduler"]["properties"]["capacity-scheduler"] is set to value "null" |
| # (2). enable_hive_interactive' is 'On' and 'llap_queue_capacity is set a value grater than upper bound 100 (=101). |
| def test_recommendYARNConfigurations_create_llap_queue_3(self): |
| |
| services = { |
| "services": [{ |
| "StackServices": { |
| "service_name": "YARN", |
| }, |
| "Versions": { |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "StackServiceComponents": { |
| "component_name": "NODEMANAGER", |
| "hostnames": ["c6401.ambari.apache.org"] |
| }, |
| } |
| ] |
| }, { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE", |
| "StackServices": { |
| "service_name": "HIVE", |
| "service_version": "1.2.1.2.5", |
| "stack_name": "HDP", |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE/components/HIVE_SERVER_INTERACTIVE", |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "bulk_commands_display_name": "", |
| "bulk_commands_master_component_name": "", |
| "cardinality": "0-1", |
| "component_category": "MASTER", |
| "component_name": "HIVE_SERVER_INTERACTIVE", |
| "custom_commands": ["RESTART_LLAP"], |
| "decommission_allowed": "false", |
| "display_name": "HiveServer2 Interactive", |
| "has_bulk_commands_definition": "false", |
| "is_client": "false", |
| "is_master": "true", |
| "reassign_allowed": "false", |
| "recovery_enabled": "false", |
| "service_name": "HIVE", |
| "stack_name": "HDP", |
| "stack_version": "2.5", |
| "hostnames": ["c6401.ambari.apache.org"] |
| }, |
| "dependencies": [] |
| } |
| ] |
| } |
| ], |
| "changed-configurations": [ |
| { |
| u'old_value': u'', |
| u'type': u'', |
| u'name': u'' |
| } |
| ], |
| "configurations": { |
| "capacity-scheduler" : { |
| "properties" : { |
| "capacity-scheduler" : "null", |
| "yarn.scheduler.capacity.root.accessible-node-labels" : "*", |
| "yarn.scheduler.capacity.maximum-am-resource-percent" : "1", |
| "yarn.scheduler.capacity.root.acl_administer_queue" : "*", |
| 'yarn.scheduler.capacity.queue-mappings-override.enable' : 'false', |
| "yarn.scheduler.capacity.root.default.capacity" : "100", |
| "yarn.scheduler.capacity.root.default.user-limit-factor" : "1", |
| "yarn.scheduler.capacity.root.queues" : "default", |
| "yarn.scheduler.capacity.root.capacity" : "100", |
| "yarn.scheduler.capacity.root.default.acl_submit_applications" : "*", |
| "yarn.scheduler.capacity.root.default.maximum-capacity" : "100", |
| "yarn.scheduler.capacity.node-locality-delay" : "40", |
| "yarn.scheduler.capacity.maximum-applications" : "10000", |
| "yarn.scheduler.capacity.root.default.state" : "RUNNING" |
| } |
| }, |
| "hive-interactive-env": |
| { |
| 'properties': { |
| 'enable_hive_interactive': 'true', |
| 'llap_queue_capacity':'-101' |
| } |
| }, |
| "yarn-site": { |
| "properties": { |
| "yarn.scheduler.minimum-allocation-mb": "682", |
| "yarn.nodemanager.resource.memory-mb": "10240", |
| "yarn.nodemanager.resource.cpu-vcores": "1" |
| } |
| }, |
| "hive-interactive-site": |
| { |
| 'properties': { |
| 'hive.llap.daemon.queue.name':'default' |
| } |
| }, |
| "tez-site": { |
| "properties": { |
| "tez.am.resource.memory.mb": "341" |
| } |
| }, |
| "hive-env": |
| { |
| 'properties': { |
| 'hive_user': 'hive' |
| } |
| }, |
| "hive-site": |
| { |
| 'properties': { |
| 'hive.tez.container.size': '341' |
| } |
| }, |
| } |
| } |
| |
| clusterData = { |
| "cpu": 4, |
| "mapMemory": 30000, |
| "amMemory": 20000, |
| "reduceMemory": 20560, |
| "containers": 30, |
| "ramPerContainer": 512, |
| "referenceNodeManagerHost" : { |
| "total_mem" : 10240 * 1024 |
| } |
| } |
| |
| |
| configurations = { |
| } |
| self.stackAdvisor.recommendYARNConfigurations(configurations, clusterData, services, self.hosts) |
| # Check output |
| |
| self.assertEquals(configurations['hive-interactive-site']['properties']['hive.llap.daemon.queue.name'], |
| self.expected_hive_interactive_site_llap['hive-interactive-site']['properties']['hive.llap.daemon.queue.name']) |
| self.assertEquals(configurations['hive-interactive-site']['property_attributes']['hive.llap.daemon.queue.name'], |
| self.expected_hive_interactive_site_llap['hive-interactive-site']['property_attributes']['hive.llap.daemon.queue.name']) |
| self.assertEquals(configurations['hive-interactive-env']['properties']['llap_queue_capacity'], |
| self.expected_llap_queue_capacity_20) |
| |
| cap_sched_output_dict = configurations['capacity-scheduler']['properties'] |
| self.assertTrue(isinstance(cap_sched_output_dict, dict)) |
| cap_sched_expected_dict = convertToDict(self.expected_capacity_scheduler_llap_queue_size_20['properties']['capacity-scheduler']) |
| self.assertEqual(cap_sched_output_dict, cap_sched_expected_dict) |
| |
| |
| |
| # Test 4: (1). Only default queue exists in capacity-scheduler and 'capacity-scheduler' configs are passed-in as |
| # single "/n" separated string (2). enable_hive_interactive' is 'On' and 'llap_queue_capacity is 40. |
| def test_recommendYARNConfigurations_create_llap_queue_4(self): |
| services = { |
| "services": [{ |
| "StackServices": { |
| "service_name": "YARN", |
| }, |
| "Versions": { |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "StackServiceComponents": { |
| "component_name": "NODEMANAGER", |
| "hostnames": ["c6401.ambari.apache.org"] |
| } |
| } |
| ] |
| }, { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE", |
| "StackServices": { |
| "service_name": "HIVE", |
| "service_version": "1.2.1.2.5", |
| "stack_name": "HDP", |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE/components/HIVE_SERVER_INTERACTIVE", |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "bulk_commands_display_name": "", |
| "bulk_commands_master_component_name": "", |
| "cardinality": "0-1", |
| "component_category": "MASTER", |
| "component_name": "HIVE_SERVER_INTERACTIVE", |
| "custom_commands": ["RESTART_LLAP"], |
| "decommission_allowed": "false", |
| "display_name": "HiveServer2 Interactive", |
| "has_bulk_commands_definition": "false", |
| "is_client": "false", |
| "is_master": "true", |
| "reassign_allowed": "false", |
| "recovery_enabled": "false", |
| "service_name": "HIVE", |
| "stack_name": "HDP", |
| "stack_version": "2.5", |
| "hostnames": ["c6401.ambari.apache.org"] |
| }, |
| "dependencies": [] |
| } |
| ] |
| } |
| ], |
| "changed-configurations": [ |
| { |
| u'old_value': u'', |
| u'type': u'', |
| u'name': u'' |
| } |
| ], |
| "configurations": { |
| "capacity-scheduler": { |
| "properties": { |
| "capacity-scheduler": "yarn.scheduler.capacity.root.queues=default\n" |
| "yarn.scheduler.capacity.root.default.user-limit-factor=1\n" |
| "yarn.scheduler.capacity.root.default.state=RUNNING\n" |
| "yarn.scheduler.capacity.root.default.maximum-capacity=100\n" |
| "yarn.scheduler.capacity.root.default.capacity=100\n" |
| "yarn.scheduler.capacity.root.default.acl_submit_applications=*\n" |
| "yarn.scheduler.capacity.root.capacity=100\n" |
| "yarn.scheduler.capacity.root.acl_administer_queue=*\n" |
| "yarn.scheduler.capacity.root.accessible-node-labels=*\n" |
| "yarn.scheduler.capacity.node-locality-delay=40\n" |
| "yarn.scheduler.capacity.maximum-applications=10000\n" |
| "yarn.scheduler.capacity.maximum-am-resource-percent=1\n" |
| "yarn.scheduler.capacity.queue-mappings-override.enable=false\n" |
| } |
| }, |
| "hive-interactive-env": |
| { |
| 'properties': { |
| 'enable_hive_interactive': 'true', |
| 'llap_queue_capacity':'40' |
| } |
| }, |
| "yarn-site": { |
| "properties": { |
| "yarn.scheduler.minimum-allocation-mb": "682", |
| "yarn.nodemanager.resource.memory-mb": "2048", |
| "yarn.nodemanager.resource.cpu-vcores": "1" |
| } |
| }, |
| "hive-interactive-site": |
| { |
| 'properties': { |
| 'hive.llap.daemon.queue.name':'default', |
| } |
| }, |
| "tez-site": { |
| "properties": { |
| "tez.am.resource.memory.mb": "341" |
| } |
| }, |
| "hive-env": |
| { |
| 'properties': { |
| 'hive_user': 'hive' |
| } |
| }, |
| "hive-site": |
| { |
| 'properties': { |
| 'hive.tez.container.size': '341' |
| } |
| }, |
| } |
| } |
| |
| clusterData = { |
| "cpu": 4, |
| "mapMemory": 30000, |
| "amMemory": 20000, |
| "reduceMemory": 20560, |
| "containers": 30, |
| "ramPerContainer": 512, |
| "referenceNodeManagerHost" : { |
| "total_mem" : 10240 * 1024 |
| } |
| } |
| |
| configurations = { |
| } |
| |
| self.stackAdvisor.recommendYARNConfigurations(configurations, clusterData, services, self.hosts) |
| |
| # Check output |
| self.assertEquals(configurations['hive-interactive-site']['properties']['hive.llap.daemon.queue.name'], |
| self.expected_hive_interactive_site_llap['hive-interactive-site']['properties']['hive.llap.daemon.queue.name']) |
| self.assertEquals(configurations['hive-interactive-site']['property_attributes']['hive.llap.daemon.queue.name'], |
| self.expected_hive_interactive_site_llap['hive-interactive-site']['property_attributes']['hive.llap.daemon.queue.name']) |
| self.assertTrue('llap_queue_capacity' not in configurations['hive-interactive-env']['properties']) |
| |
| cap_sched_output_dict = convertToDict(configurations['capacity-scheduler']['properties']['capacity-scheduler']) |
| cap_sched_expected_dict = convertToDict(self.expected_capacity_scheduler_llap_queue_size_40['properties']['capacity-scheduler']) |
| self.assertEqual(cap_sched_output_dict, cap_sched_expected_dict) |
| self.assertEquals(configurations['hive-interactive-env']['property_attributes']['llap_queue_capacity'], |
| {'maximum': '100', 'minimum': '100', 'visible': 'true'}) |
| |
| |
| |
| # Test 5: (1). Only default queue exists in capacity-scheduler and capacity-scheduler is passed-in as a dictionary |
| # and services['configurations']["capacity-scheduler"]["properties"]["capacity-scheduler"] is null |
| # (2). enable_hive_interactive' is 'On' and 'llap_queue_capacity is 40. |
| def test_recommendYARNConfigurations_create_llap_queue_5(self): |
| services = { |
| "services": [{ |
| "StackServices": { |
| "service_name": "YARN", |
| }, |
| "Versions": { |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "StackServiceComponents": { |
| "component_name": "NODEMANAGER", |
| "hostnames": ["c6401.ambari.apache.org"] |
| } |
| } |
| ] |
| }, { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE", |
| "StackServices": { |
| "service_name": "HIVE", |
| "service_version": "1.2.1.2.5", |
| "stack_name": "HDP", |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE/components/HIVE_SERVER_INTERACTIVE", |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "bulk_commands_display_name": "", |
| "bulk_commands_master_component_name": "", |
| "cardinality": "0-1", |
| "component_category": "MASTER", |
| "component_name": "HIVE_SERVER_INTERACTIVE", |
| "custom_commands": ["RESTART_LLAP"], |
| "decommission_allowed": "false", |
| "display_name": "HiveServer2 Interactive", |
| "has_bulk_commands_definition": "false", |
| "is_client": "false", |
| "is_master": "true", |
| "reassign_allowed": "false", |
| "recovery_enabled": "false", |
| "service_name": "HIVE", |
| "stack_name": "HDP", |
| "stack_version": "2.5", |
| "hostnames": ["c6401.ambari.apache.org"] |
| }, |
| "dependencies": [] |
| } |
| ] |
| } |
| ], |
| "changed-configurations": [ |
| { |
| u'old_value': u'', |
| u'type': u'', |
| u'name': u'' |
| } |
| ], |
| "configurations": { |
| "capacity-scheduler" : { |
| "properties" : { |
| "capacity-scheduler" : None, |
| "yarn.scheduler.capacity.root.accessible-node-labels" : "*", |
| "yarn.scheduler.capacity.maximum-am-resource-percent" : "1", |
| "yarn.scheduler.capacity.root.acl_administer_queue" : "*", |
| 'yarn.scheduler.capacity.queue-mappings-override.enable' : 'false', |
| "yarn.scheduler.capacity.root.default.capacity" : "100", |
| "yarn.scheduler.capacity.root.default.user-limit-factor" : "1", |
| "yarn.scheduler.capacity.root.queues" : "default", |
| "yarn.scheduler.capacity.root.capacity" : "100", |
| "yarn.scheduler.capacity.root.default.acl_submit_applications" : "*", |
| "yarn.scheduler.capacity.root.default.maximum-capacity" : "100", |
| "yarn.scheduler.capacity.node-locality-delay" : "40", |
| "yarn.scheduler.capacity.maximum-applications" : "10000", |
| "yarn.scheduler.capacity.root.default.state" : "RUNNING" |
| } |
| }, |
| "hive-interactive-env": |
| { |
| 'properties': { |
| 'enable_hive_interactive': 'true', |
| 'llap_queue_capacity':'40' |
| } |
| }, |
| "yarn-site": { |
| "properties": { |
| "yarn.scheduler.minimum-allocation-mb": "682", |
| "yarn.nodemanager.resource.memory-mb": "8192", |
| "yarn.nodemanager.resource.cpu-vcores": "1" |
| } |
| }, |
| "hive-interactive-site": |
| { |
| 'properties': { |
| 'hive.llap.daemon.queue.name':'default', |
| } |
| }, |
| "tez-site": { |
| "properties": { |
| "tez.am.resource.memory.mb": "341" |
| } |
| }, |
| "hive-env": |
| { |
| 'properties': { |
| 'hive_user': 'hive' |
| } |
| }, |
| "hive-site": |
| { |
| 'properties': { |
| 'hive.tez.container.size': '341' |
| } |
| }, |
| } |
| } |
| |
| |
| clusterData = { |
| "cpu": 4, |
| "mapMemory": 30000, |
| "amMemory": 20000, |
| "reduceMemory": 20560, |
| "containers": 30, |
| "ramPerContainer": 512, |
| "referenceNodeManagerHost" : { |
| "total_mem" : 10240 * 1024 |
| } |
| } |
| |
| configurations = { |
| } |
| |
| self.stackAdvisor.recommendYARNConfigurations(configurations, clusterData, services, self.hosts) |
| # Check output |
| self.assertEquals(configurations['hive-interactive-site']['properties']['hive.llap.daemon.queue.name'], |
| self.expected_hive_interactive_site_llap['hive-interactive-site']['properties']['hive.llap.daemon.queue.name']) |
| self.assertEquals(configurations['hive-interactive-site']['property_attributes']['hive.llap.daemon.queue.name'], |
| self.expected_hive_interactive_site_llap['hive-interactive-site']['property_attributes']['hive.llap.daemon.queue.name']) |
| self.assertTrue('llap_queue_capacity' not in configurations['hive-interactive-env']['properties']) |
| |
| cap_sched_output_dict = configurations['capacity-scheduler']['properties'] |
| self.assertTrue(isinstance(cap_sched_output_dict, dict)) |
| cap_sched_expected_dict = convertToDict(self.expected_capacity_scheduler_llap_queue_size_40['properties']['capacity-scheduler']) |
| self.assertEqual(cap_sched_output_dict, cap_sched_expected_dict) |
| self.assertEquals(configurations['hive-interactive-env']['property_attributes']['llap_queue_capacity'], |
| {'maximum': '100', 'minimum': '25', 'visible': 'true'}) |
| |
| |
| # Test 6: (1). 'llap' (0%) and 'default' (100%) queues exists at leaf level in capacity-scheduler and 'capacity-scheduler' |
| # configs are passed-in as single "/n" separated string |
| # (2). llap is state = STOPPED, (3). llap_queue_capacity = 0, and (4). enable_hive_interactive' is 'ON'. |
| # Expected : llap queue state = RUNNING, llap_queue_capacity = 20 |
| def test_recommendYARNConfigurations_update_llap_queue_1(self): |
| services = { |
| "services": [{ |
| "StackServices": { |
| "service_name": "YARN", |
| }, |
| "Versions": { |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "StackServiceComponents": { |
| "component_name": "NODEMANAGER", |
| "hostnames": ["c6401.ambari.apache.org"] |
| } |
| } |
| ] |
| }, { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE", |
| "StackServices": { |
| "service_name": "HIVE", |
| "service_version": "1.2.1.2.5", |
| "stack_name": "HDP", |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE/components/HIVE_SERVER_INTERACTIVE", |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "bulk_commands_display_name": "", |
| "bulk_commands_master_component_name": "", |
| "cardinality": "0-1", |
| "component_category": "MASTER", |
| "component_name": "HIVE_SERVER_INTERACTIVE", |
| "custom_commands": ["RESTART_LLAP"], |
| "decommission_allowed": "false", |
| "display_name": "HiveServer2 Interactive", |
| "has_bulk_commands_definition": "false", |
| "is_client": "false", |
| "is_master": "true", |
| "reassign_allowed": "false", |
| "recovery_enabled": "false", |
| "service_name": "HIVE", |
| "stack_name": "HDP", |
| "stack_version": "2.5", |
| "hostnames": ["c6401.ambari.apache.org"] |
| }, |
| "dependencies": [] |
| } |
| ] |
| } |
| ], |
| "changed-configurations": [ |
| { |
| u'old_value': u'off', |
| u'type': u'hive-interactive-env', |
| u'name': u'enable_hive_interactive' |
| } |
| ], |
| "configurations": { |
| "capacity-scheduler": { |
| "properties": { |
| "capacity-scheduler": "yarn.scheduler.capacity.root.accessible-node-labels=*\n" |
| "yarn.scheduler.capacity.root.capacity=100\n" |
| "yarn.scheduler.capacity.root.queues=default,llap\n" |
| "yarn.scheduler.capacity.maximum-applications=10000\n" |
| "yarn.scheduler.capacity.root.default.user-limit-factor=1\n" |
| "yarn.scheduler.capacity.root.default.state=RUNNING\n" |
| "yarn.scheduler.capacity.maximum-am-resource-percent=1\n" |
| "yarn.scheduler.capacity.root.default.acl_submit_applications=*\n" |
| "yarn.scheduler.capacity.root.default.capacity=100\n" |
| "yarn.scheduler.capacity.root.acl_administer_queue=*\n" |
| "yarn.scheduler.capacity.node-locality-delay=40\n" |
| "yarn.scheduler.capacity.queue-mappings-override.enable=false\n" |
| "yarn.scheduler.capacity.root.llap.user-limit-factor=1\n" |
| "yarn.scheduler.capacity.root.llap.state=STOPPED\n" |
| "yarn.scheduler.capacity.root.llap.ordering-policy=fifo\n" |
| "yarn.scheduler.capacity.root.llap.minimum-user-limit-percent=100\n" |
| "yarn.scheduler.capacity.root.llap.maximum-capacity=0\n" |
| "yarn.scheduler.capacity.root.default.maximum-capacity=100\n" |
| "yarn.scheduler.capacity.root.llap.capacity=0\n" |
| "yarn.scheduler.capacity.root.llap.acl_submit_applications=hive\n" |
| "yarn.scheduler.capacity.root.llap.acl_administer_queue=hive\n" |
| "yarn.scheduler.capacity.root.llap.maximum-am-resource-percent=1\n" |
| } |
| }, |
| "hive-interactive-env": |
| { |
| 'properties': { |
| 'enable_hive_interactive': 'true', |
| 'llap_queue_capacity':'0' |
| } |
| }, |
| "yarn-site": { |
| "properties": { |
| "yarn.scheduler.minimum-allocation-mb": "341", |
| "yarn.nodemanager.resource.memory-mb": "20000", |
| "yarn.nodemanager.resource.cpu-vcores": '1' |
| } |
| }, |
| "hive-interactive-site": |
| { |
| 'properties': { |
| 'hive.llap.daemon.queue.name':'llap', |
| 'hive.server2.tez.sessions.per.default.queue' : '1' |
| } |
| }, |
| "tez-site": { |
| "properties": { |
| "tez.am.resource.memory.mb": "341" |
| } |
| }, |
| "hive-env": |
| { |
| 'properties': { |
| 'hive_user': 'hive' |
| } |
| }, |
| "hive-site": |
| { |
| 'properties': { |
| 'hive.tez.container.size': '341' |
| } |
| }, |
| } |
| } |
| |
| |
| clusterData = { |
| "cpu": 4, |
| "mapMemory": 30000, |
| "amMemory": 20000, |
| "reduceMemory": 20560, |
| "containers": 30, |
| "ramPerContainer": 512, |
| "referenceNodeManagerHost" : { |
| "total_mem" : 10240 * 1024 |
| } |
| } |
| |
| |
| configurations = { |
| } |
| |
| self.stackAdvisor.recommendYARNConfigurations(configurations, clusterData, services, self.hosts) |
| |
| # Check output |
| self.assertEquals(configurations['hive-interactive-site']['properties']['hive.llap.daemon.queue.name'], |
| self.expected_hive_interactive_site_llap['hive-interactive-site']['properties']['hive.llap.daemon.queue.name']) |
| self.assertEquals(configurations['hive-interactive-site']['property_attributes']['hive.llap.daemon.queue.name'], |
| self.expected_hive_interactive_site_llap['hive-interactive-site']['property_attributes']['hive.llap.daemon.queue.name']) |
| self.assertEquals(configurations['hive-interactive-env']['properties']['llap_queue_capacity'], |
| self.expected_llap_queue_capacity_20) |
| |
| cap_sched_output_dict = convertToDict(configurations['capacity-scheduler']['properties']['capacity-scheduler']) |
| cap_sched_expected_dict = convertToDict(self.expected_capacity_scheduler_llap_queue_size_20['properties']['capacity-scheduler']) |
| self.assertEqual(cap_sched_output_dict, cap_sched_expected_dict) |
| self.assertEquals(configurations['hive-interactive-env']['property_attributes']['llap_queue_capacity'], |
| {'maximum': '100', 'minimum': '20', 'visible': 'false'}) |
| |
| |
| |
| # Test 7: (1). 'llap' (20%) and 'default' (80%) queues exists at leaf level in capacity-scheduler and 'capacity-scheduler' |
| # configs are passed-in as single "/n" separated string |
| # (2). llap is state = STOPPED, (3). llap_queue_capacity = 40, and (4). enable_hive_interactive' is 'ON'. |
| # Expected : llap state goes RUNNING. |
| def test_recommendYARNConfigurations_update_llap_queue_2(self): |
| services = { |
| "services": [{ |
| "StackServices": { |
| "service_name": "YARN", |
| }, |
| "Versions": { |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "StackServiceComponents": { |
| "component_name": "NODEMANAGER", |
| "hostnames": ["c6401.ambari.apache.org"] |
| } |
| } |
| ] |
| }, { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE", |
| "StackServices": { |
| "service_name": "HIVE", |
| "service_version": "1.2.1.2.5", |
| "stack_name": "HDP", |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE/components/HIVE_SERVER_INTERACTIVE", |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "bulk_commands_display_name": "", |
| "bulk_commands_master_component_name": "", |
| "cardinality": "0-1", |
| "component_category": "MASTER", |
| "component_name": "HIVE_SERVER_INTERACTIVE", |
| "custom_commands": ["RESTART_LLAP"], |
| "decommission_allowed": "false", |
| "display_name": "HiveServer2 Interactive", |
| "has_bulk_commands_definition": "false", |
| "is_client": "false", |
| "is_master": "true", |
| "reassign_allowed": "false", |
| "recovery_enabled": "false", |
| "service_name": "HIVE", |
| "stack_name": "HDP", |
| "stack_version": "2.5", |
| "hostnames": ["c6401.ambari.apache.org"] |
| }, |
| "dependencies": [] |
| } |
| ] |
| } |
| ], |
| "changed-configurations": [ |
| { |
| u'old_value': u'', |
| u'type': u'', |
| u'name': u'' |
| } |
| ], |
| "configurations": { |
| "capacity-scheduler": { |
| "properties": { |
| "capacity-scheduler": "yarn.scheduler.capacity.root.accessible-node-labels=*\n" |
| "yarn.scheduler.capacity.root.capacity=100\n" |
| "yarn.scheduler.capacity.root.queues=default,llap\n" |
| "yarn.scheduler.capacity.maximum-applications=10000\n" |
| "yarn.scheduler.capacity.root.default.user-limit-factor=1\n" |
| "yarn.scheduler.capacity.root.default.state=RUNNING\n" |
| "yarn.scheduler.capacity.maximum-am-resource-percent=1\n" |
| "yarn.scheduler.capacity.root.default.acl_submit_applications=*\n" |
| "yarn.scheduler.capacity.root.default.capacity=80\n" |
| "yarn.scheduler.capacity.root.acl_administer_queue=*\n" |
| "yarn.scheduler.capacity.node-locality-delay=40\n" |
| "yarn.scheduler.capacity.queue-mappings-override.enable=false\n" |
| "yarn.scheduler.capacity.root.llap.user-limit-factor=1\n" |
| "yarn.scheduler.capacity.root.llap.state=RUNNING\n" |
| "yarn.scheduler.capacity.root.llap.ordering-policy=fifo\n" |
| "yarn.scheduler.capacity.root.llap.minimum-user-limit-percent=100\n" |
| "yarn.scheduler.capacity.root.llap.maximum-capacity=20\n" |
| "yarn.scheduler.capacity.root.default.maximum-capacity=80\n" |
| "yarn.scheduler.capacity.root.llap.capacity=20\n" |
| "yarn.scheduler.capacity.root.llap.acl_submit_applications=hive\n" |
| "yarn.scheduler.capacity.root.llap.acl_administer_queue=hive\n" |
| "yarn.scheduler.capacity.root.llap.maximum-am-resource-percent=1\n" |
| } |
| }, |
| "hive-interactive-env": |
| { |
| 'properties': { |
| 'enable_hive_interactive': 'true', |
| 'llap_queue_capacity':'40' |
| } |
| }, |
| "hive-interactive-site": |
| { |
| 'properties': { |
| 'hive.llap.daemon.queue.name':'llap' |
| } |
| }, |
| "tez-site": { |
| "properties": { |
| "tez.am.resource.memory.mb": "341" |
| } |
| }, |
| "yarn-site": { |
| "properties": { |
| "yarn.scheduler.minimum-allocation-mb": "341", |
| "yarn.nodemanager.resource.memory-mb": "20000", |
| "yarn.nodemanager.resource.cpu-vcores": '1' |
| } |
| }, |
| "hive-env": |
| { |
| 'properties': { |
| 'hive_user': 'hive' |
| } |
| }, |
| "hive-site": |
| { |
| 'properties': { |
| 'hive.tez.container.size': '341' |
| } |
| }, |
| } |
| } |
| |
| |
| clusterData = { |
| "cpu": 4, |
| "mapMemory": 30000, |
| "amMemory": 20000, |
| "reduceMemory": 20560, |
| "containers": 30, |
| "ramPerContainer": 512, |
| "referenceNodeManagerHost" : { |
| "total_mem" : 10240 * 1024 |
| } |
| } |
| |
| configurations = { |
| } |
| |
| |
| self.stackAdvisor.recommendYARNConfigurations(configurations, clusterData, services, self.hosts) |
| |
| # Check output |
| self.assertEquals(configurations['hive-interactive-site']['properties']['hive.llap.daemon.queue.name'], |
| self.expected_hive_interactive_site_llap['hive-interactive-site']['properties']['hive.llap.daemon.queue.name']) |
| self.assertEquals(configurations['hive-interactive-site']['property_attributes']['hive.llap.daemon.queue.name'], |
| self.expected_hive_interactive_site_llap['hive-interactive-site']['property_attributes']['hive.llap.daemon.queue.name']) |
| self.assertTrue('llap_queue_capacity' not in configurations['hive-interactive-env']['properties']) |
| |
| cap_sched_output_dict = convertToDict(configurations['capacity-scheduler']['properties']['capacity-scheduler']) |
| cap_sched_expected_dict = convertToDict(self.expected_capacity_scheduler_llap_queue_size_40['properties']['capacity-scheduler']) |
| self.assertEqual(cap_sched_output_dict, cap_sched_expected_dict) |
| self.assertEquals(configurations['hive-interactive-env']['property_attributes']['llap_queue_capacity'], |
| {'maximum': '100', 'minimum': '20', 'visible': 'true'}) |
| |
| |
| |
| |
| # Test 8: (1). 'llap' (20%) and 'default' (60%) queues exists at leaf level in capacity-scheduler and 'capacity-scheduler' |
| # configs are passed-in as single "/n" separated string |
| # (2). llap is state = RUNNING, (3). llap_queue_capacity = 40, and (4). enable_hive_interactive' is 'ON'. |
| # Expected : Existing llap queue's capacity in capacity-scheduler set to 40. |
| def test_recommendYARNConfigurations_update_llap_queue_3(self): |
| services = { |
| "services": [{ |
| "StackServices": { |
| "service_name": "YARN", |
| }, |
| "Versions": { |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "StackServiceComponents": { |
| "component_name": "NODEMANAGER", |
| "hostnames": ["c6401.ambari.apache.org"] |
| } |
| } |
| ] |
| }, { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE", |
| "StackServices": { |
| "service_name": "HIVE", |
| "service_version": "1.2.1.2.5", |
| "stack_name": "HDP", |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE/components/HIVE_SERVER_INTERACTIVE", |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "bulk_commands_display_name": "", |
| "bulk_commands_master_component_name": "", |
| "cardinality": "0-1", |
| "component_category": "MASTER", |
| "component_name": "HIVE_SERVER_INTERACTIVE", |
| "custom_commands": ["RESTART_LLAP"], |
| "decommission_allowed": "false", |
| "display_name": "HiveServer2 Interactive", |
| "has_bulk_commands_definition": "false", |
| "is_client": "false", |
| "is_master": "true", |
| "reassign_allowed": "false", |
| "recovery_enabled": "false", |
| "service_name": "HIVE", |
| "stack_name": "HDP", |
| "stack_version": "2.5", |
| "hostnames": ["c6401.ambari.apache.org"] |
| }, |
| "dependencies": [] |
| } |
| ] |
| } |
| ], |
| "changed-configurations": [ |
| { |
| u'old_value': u'', |
| u'type': u'', |
| u'name': u'' |
| } |
| ], |
| "configurations": { |
| "capacity-scheduler": { |
| "properties": { |
| "capacity-scheduler": "yarn.scheduler.capacity.root.accessible-node-labels=*\n" |
| "yarn.scheduler.capacity.root.capacity=100\n" |
| "yarn.scheduler.capacity.root.queues=default,llap\n" |
| "yarn.scheduler.capacity.maximum-applications=10000\n" |
| "yarn.scheduler.capacity.root.default.user-limit-factor=1\n" |
| "yarn.scheduler.capacity.root.default.state=RUNNING\n" |
| "yarn.scheduler.capacity.maximum-am-resource-percent=1\n" |
| "yarn.scheduler.capacity.root.default.acl_submit_applications=*\n" |
| "yarn.scheduler.capacity.root.default.capacity=80\n" |
| "yarn.scheduler.capacity.root.acl_administer_queue=*\n" |
| "yarn.scheduler.capacity.node-locality-delay=40\n" |
| "yarn.scheduler.capacity.queue-mappings-override.enable=false\n" |
| "yarn.scheduler.capacity.root.llap.user-limit-factor=1\n" |
| "yarn.scheduler.capacity.root.llap.state=RUNNING\n" |
| "yarn.scheduler.capacity.root.llap.ordering-policy=fifo\n" |
| "yarn.scheduler.capacity.root.llap.minimum-user-limit-percent=100\n" |
| "yarn.scheduler.capacity.root.llap.maximum-capacity=20\n" |
| "yarn.scheduler.capacity.root.default.maximum-capacity=80\n" |
| "yarn.scheduler.capacity.root.llap.capacity=20\n" |
| "yarn.scheduler.capacity.root.llap.acl_submit_applications=hive\n" |
| "yarn.scheduler.capacity.root.llap.acl_administer_queue=hive\n" |
| "yarn.scheduler.capacity.root.llap.maximum-am-resource-percent=1\n" |
| } |
| }, |
| "hive-interactive-env": |
| { |
| 'properties': { |
| 'enable_hive_interactive': 'true', |
| 'llap_queue_capacity':'40' |
| } |
| }, |
| "hive-interactive-site": |
| { |
| 'properties': { |
| 'hive.llap.daemon.queue.name':'llap' |
| } |
| }, |
| "tez-site": { |
| "properties": { |
| "tez.am.resource.memory.mb": "341" |
| } |
| }, |
| "yarn-site": { |
| "properties": { |
| "yarn.scheduler.minimum-allocation-mb": "341", |
| "yarn.nodemanager.resource.memory-mb": "20000", |
| "yarn.nodemanager.resource.cpu-vcores": '1' |
| } |
| }, |
| "hive-env": |
| { |
| 'properties': { |
| 'hive_user': 'hive' |
| } |
| }, |
| "hive-site": |
| { |
| 'properties': { |
| 'hive.tez.container.size': '341' |
| } |
| }, |
| } |
| } |
| |
| |
| clusterData = { |
| "cpu": 4, |
| "mapMemory": 30000, |
| "amMemory": 20000, |
| "reduceMemory": 20560, |
| "containers": 30, |
| "ramPerContainer": 512, |
| "referenceNodeManagerHost" : { |
| "total_mem" : 10240 * 1024 |
| } |
| } |
| |
| |
| configurations = { |
| } |
| |
| self.stackAdvisor.recommendYARNConfigurations(configurations, clusterData, services, self.hosts) |
| |
| # Check output |
| self.assertEquals(configurations['hive-interactive-site']['properties']['hive.llap.daemon.queue.name'], |
| self.expected_hive_interactive_site_llap['hive-interactive-site']['properties']['hive.llap.daemon.queue.name']) |
| self.assertEquals(configurations['hive-interactive-site']['property_attributes']['hive.llap.daemon.queue.name'], |
| self.expected_hive_interactive_site_llap['hive-interactive-site']['property_attributes']['hive.llap.daemon.queue.name']) |
| self.assertTrue('llap_queue_capacity' not in configurations['hive-interactive-env']['properties']) |
| |
| cap_sched_output_dict = convertToDict(configurations['capacity-scheduler']['properties']['capacity-scheduler']) |
| cap_sched_expected_dict = convertToDict(self.expected_capacity_scheduler_llap_queue_size_40['properties']['capacity-scheduler']) |
| self.assertEqual(cap_sched_output_dict, cap_sched_expected_dict) |
| self.assertEquals(configurations['hive-interactive-env']['property_attributes']['llap_queue_capacity'], |
| {'maximum': '100', 'minimum': '20', 'visible': 'true'}) |
| |
| |
| |
| |
| # Test 9: (1). Only default queue exists in capacity-scheduler and 'capacity-scheduler' configs are passed-in as |
| # single "/n" separated string (2). enable_hive_interactive' is 'Off' and |
| # 'llap_queue_capacity is 0. |
| # Expected : No changes |
| def test_recommendYARNConfigurations_no_update_to_llap_queue_1(self): |
| services = { |
| "services": [{ |
| "StackServices": { |
| "service_name": "YARN", |
| }, |
| "Versions": { |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "StackServiceComponents": { |
| "component_name": "NODEMANAGER", |
| "hostnames": ["c6401.ambari.apache.org"] |
| } |
| } |
| ] |
| }, { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE", |
| "StackServices": { |
| "service_name": "HIVE", |
| "service_version": "1.2.1.2.5", |
| "stack_name": "HDP", |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE/components/HIVE_SERVER_INTERACTIVE", |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "bulk_commands_display_name": "", |
| "bulk_commands_master_component_name": "", |
| "cardinality": "0-1", |
| "component_category": "MASTER", |
| "component_name": "HIVE_SERVER_INTERACTIVE", |
| "custom_commands": ["RESTART_LLAP"], |
| "decommission_allowed": "false", |
| "display_name": "HiveServer2 Interactive", |
| "has_bulk_commands_definition": "false", |
| "is_client": "false", |
| "is_master": "true", |
| "reassign_allowed": "false", |
| "recovery_enabled": "false", |
| "service_name": "HIVE", |
| "stack_name": "HDP", |
| "stack_version": "2.5", |
| "hostnames": ["c6401.ambari.apache.org"] |
| }, |
| "dependencies": [] |
| } |
| ] |
| } |
| ], |
| "changed-configurations": [ |
| { |
| u'old_value': u'', |
| u'type': u'', |
| u'name': u'' |
| } |
| ], |
| "configurations": { |
| "capacity-scheduler": { |
| "properties": { |
| "capacity-scheduler": "yarn.scheduler.capacity.root.queues=default\n" |
| "yarn.scheduler.capacity.root.default.user-limit-factor=1\n" |
| "yarn.scheduler.capacity.root.default.state=RUNNING\n" |
| "yarn.scheduler.capacity.root.default.maximum-capacity=100\n" |
| "yarn.scheduler.capacity.root.default.capacity=100\n" |
| "yarn.scheduler.capacity.root.default.acl_submit_applications=*\n" |
| "yarn.scheduler.capacity.root.capacity=100\n" |
| "yarn.scheduler.capacity.root.acl_administer_queue=*\n" |
| "yarn.scheduler.capacity.root.accessible-node-labels=*\n" |
| "yarn.scheduler.capacity.node-locality-delay=40\n" |
| "yarn.scheduler.capacity.maximum-applications=10000\n" |
| "yarn.scheduler.capacity.maximum-am-resource-percent=1\n" |
| "yarn.scheduler.capacity.queue-mappings-override.enable=false\n" |
| } |
| }, |
| "hive-interactive-env": |
| { |
| 'properties': { |
| 'enable_hive_interactive': 'false', |
| 'llap_queue_capacity':'0' |
| } |
| }, |
| "yarn-site": { |
| "properties": { |
| "yarn.scheduler.minimum-allocation-mb": "682", |
| "yarn.nodemanager.resource.memory-mb": "2048" |
| } |
| }, |
| "tez-interactive-site": { |
| "properties": { |
| "tez.am.resource.memory.mb": "341" |
| } |
| }, |
| "hive-env": |
| { |
| 'properties': { |
| 'hive_user': 'hive' |
| } |
| } |
| } |
| } |
| |
| clusterData = { |
| "cpu": 4, |
| "mapMemory": 30000, |
| "amMemory": 20000, |
| "reduceMemory": 20560, |
| "containers": 30, |
| "ramPerContainer": 512, |
| "referenceNodeManagerHost" : { |
| "total_mem" : 10240 * 1024 |
| } |
| } |
| |
| |
| configurations = { |
| } |
| |
| self.stackAdvisor.recommendYARNConfigurations(configurations, clusterData, services, self.hosts) |
| |
| # Check output |
| self.assertTrue('hive.llap.daemon.queue.name' not in configurations['hive-interactive-site']['properties']) |
| self.assertTrue('property_attributes' not in configurations['hive-interactive-site']) |
| self.assertTrue('hive-interactive-env' not in configurations) |
| self.assertEquals(configurations['capacity-scheduler']['properties'],self.expected_capacity_scheduler_empty['properties']) |
| |
| |
| # Test 10: (1). 'default' and 'llap' (State : RUNNING) queue exists at root level in capacity-scheduler and |
| # 'capacity-scheduler' configs are passed-in as single "/n" separated string , and |
| # (2). enable_hive_interactive' is 'off'. |
| # Expected : 'default' queue set to Size 100, 'llap' queue state set to STOPPED and sized to 0. |
| def test_recommendYARNConfigurations_llap_queue_set_to_stopped_1(self): |
| services = { |
| "services": [{ |
| "StackServices": { |
| "service_name": "YARN", |
| }, |
| "Versions": { |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "StackServiceComponents": { |
| "component_name": "NODEMANAGER", |
| "hostnames": ["c6401.ambari.apache.org"] |
| } |
| } |
| ] |
| }, { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE", |
| "StackServices": { |
| "service_name": "HIVE", |
| "service_version": "1.2.1.2.5", |
| "stack_name": "HDP", |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE/components/HIVE_SERVER_INTERACTIVE", |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "bulk_commands_display_name": "", |
| "bulk_commands_master_component_name": "", |
| "cardinality": "0-1", |
| "component_category": "MASTER", |
| "component_name": "HIVE_SERVER_INTERACTIVE", |
| "custom_commands": ["RESTART_LLAP"], |
| "decommission_allowed": "false", |
| "display_name": "HiveServer2 Interactive", |
| "has_bulk_commands_definition": "false", |
| "is_client": "false", |
| "is_master": "true", |
| "reassign_allowed": "false", |
| "recovery_enabled": "false", |
| "service_name": "HIVE", |
| "stack_name": "HDP", |
| "stack_version": "2.5", |
| "hostnames": ["c6401.ambari.apache.org"] |
| }, |
| "dependencies": [] |
| } |
| ] |
| } |
| ], |
| "changed-configurations": [ |
| { |
| u'old_value': u'', |
| u'type': u'', |
| u'name': u'' |
| } |
| ], |
| "configurations": { |
| "capacity-scheduler": { |
| "properties": { |
| "capacity-scheduler": "yarn.scheduler.capacity.root.accessible-node-labels=*\n" |
| "yarn.scheduler.capacity.root.capacity=100\n" |
| "yarn.scheduler.capacity.root.queues=default,llap\n" |
| "yarn.scheduler.capacity.maximum-applications=10000\n" |
| "yarn.scheduler.capacity.root.default.user-limit-factor=1\n" |
| "yarn.scheduler.capacity.root.default.state=RUNNING\n" |
| "yarn.scheduler.capacity.maximum-am-resource-percent=1\n" |
| "yarn.scheduler.capacity.root.default.acl_submit_applications=*\n" |
| "yarn.scheduler.capacity.root.default.capacity=80\n" |
| "yarn.scheduler.capacity.root.acl_administer_queue=*\n" |
| "yarn.scheduler.capacity.node-locality-delay=40\n" |
| "yarn.scheduler.capacity.queue-mappings-override.enable=false\n" |
| "yarn.scheduler.capacity.root.llap.user-limit-factor=1\n" |
| "yarn.scheduler.capacity.root.llap.state=RUNNING\n" |
| "yarn.scheduler.capacity.root.llap.ordering-policy=fifo\n" |
| "yarn.scheduler.capacity.root.llap.minimum-user-limit-percent=100\n" |
| "yarn.scheduler.capacity.root.llap.maximum-capacity=20\n" |
| "yarn.scheduler.capacity.root.default.maximum-capacity=100\n" |
| "yarn.scheduler.capacity.root.llap.capacity=20\n" |
| "yarn.scheduler.capacity.root.llap.acl_submit_applications=hive\n" |
| "yarn.scheduler.capacity.root.llap.acl_administer_queue=hive\n" |
| "yarn.scheduler.capacity.root.llap.maximum-am-resource-percent=1\n" |
| } |
| }, |
| "hive-interactive-env": |
| { |
| 'properties': { |
| 'enable_hive_interactive': 'false' |
| } |
| }, |
| "hive-interactive-site": |
| { |
| 'properties': { |
| 'hive.llap.daemon.queue.name':'default' |
| } |
| }, |
| "yarn-site": { |
| "properties": { |
| "yarn.scheduler.minimum-allocation-mb": "682", |
| "yarn.nodemanager.resource.memory-mb": "2048" |
| }, |
| "tez-interactive-site": { |
| "properties": { |
| "tez.am.resource.memory.mb": "341" |
| } |
| }, |
| }, |
| "hive-env": |
| { |
| 'properties': { |
| 'hive_user': 'hive' |
| } |
| } |
| } |
| } |
| |
| clusterData = { |
| "cpu": 4, |
| "mapMemory": 30000, |
| "amMemory": 20000, |
| "reduceMemory": 20560, |
| "containers": 30, |
| "ramPerContainer": 512, |
| "referenceNodeManagerHost" : { |
| "total_mem" : 10240 * 1024 |
| } |
| } |
| |
| configurations = { |
| } |
| |
| self.stackAdvisor.recommendYARNConfigurations(configurations, clusterData, services, self.hosts) |
| |
| # Check output |
| self.assertEquals(configurations['hive-interactive-site']['properties']['hive.llap.daemon.queue.name'], |
| self.expected_hive_interactive_site_default['hive-interactive-site']['properties']['hive.llap.daemon.queue.name']) |
| self.assertFalse('property_attributes' in configurations['hive-interactive-site']) |
| self.assertFalse('hive-interactive-env' in configurations) |
| |
| cap_sched_output_dict = convertToDict(configurations['capacity-scheduler']['properties']['capacity-scheduler']) |
| cap_sched_expected_dict = convertToDict(self.expected_capacity_scheduler_llap_Stopped_size_0['properties']['capacity-scheduler']) |
| self.assertEqual(cap_sched_output_dict, cap_sched_expected_dict) |
| |
| |
| |
| |
| # Test 11: (1). More than 2 queues at leaf level exists in capacity-scheduler (no queue is named 'llap') and |
| # 'capacity-scheduler' configs are passed-in as single "/n" separated string |
| # (2). enable_hive_interactive' is 'off'. |
| # Expected : No changes. |
| def test_recommendYARNConfigurations_no_update_to_llap_queue_2(self): |
| services= { |
| "services": [{ |
| "StackServices": { |
| "service_name": "YARN", |
| }, |
| "Versions": { |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "StackServiceComponents": { |
| "component_name": "NODEMANAGER", |
| "hostnames": ["c6401.ambari.apache.org"] |
| } |
| } |
| ] |
| }, { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE", |
| "StackServices": { |
| "service_name": "HIVE", |
| "service_version": "1.2.1.2.5", |
| "stack_name": "HDP", |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE/components/HIVE_SERVER_INTERACTIVE", |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "bulk_commands_display_name": "", |
| "bulk_commands_master_component_name": "", |
| "cardinality": "0-1", |
| "component_category": "MASTER", |
| "component_name": "HIVE_SERVER_INTERACTIVE", |
| "custom_commands": ["RESTART_LLAP"], |
| "decommission_allowed": "false", |
| "display_name": "HiveServer2 Interactive", |
| "has_bulk_commands_definition": "false", |
| "is_client": "false", |
| "is_master": "true", |
| "reassign_allowed": "false", |
| "recovery_enabled": "false", |
| "service_name": "HIVE", |
| "stack_name": "HDP", |
| "stack_version": "2.5", |
| "hostnames": ["c6401.ambari.apache.org"] |
| }, |
| "dependencies": [] |
| } |
| ] |
| } |
| ], |
| "changed-configurations": [ |
| { |
| u'old_value': u'', |
| u'type': u'', |
| u'name': u'' |
| } |
| ], |
| "configurations": { |
| "capacity-scheduler": { |
| "properties": { |
| "capacity-scheduler": "yarn.scheduler.capacity.maximum-am-resource-percent=0.2\n" |
| "yarn.scheduler.capacity.maximum-applications=10000\n" |
| "yarn.scheduler.capacity.node-locality-delay=40\n" |
| "yarn.scheduler.capacity.queue-mappings-override.enable=false\n" |
| "yarn.scheduler.capacity.resource-calculator=org.apache.hadoop.yarn.util.resource.DefaultResourceCalculator\n" |
| "yarn.scheduler.capacity.root.accessible-node-labels=*\n" |
| "yarn.scheduler.capacity.root.acl_administer_queue=*\n" |
| "yarn.scheduler.capacity.root.capacity=100\n" |
| "yarn.scheduler.capacity.root.default.a.a1.acl_administer_queue=*\n" |
| "yarn.scheduler.capacity.root.default.a.a1.acl_submit_applications=*\n" |
| "yarn.scheduler.capacity.root.default.a.a1.capacity=75\n" |
| "yarn.scheduler.capacity.root.default.a.a1.maximum-capacity=100\n" |
| "yarn.scheduler.capacity.root.default.a.a1.minimum-user-limit-percent=100\n" |
| "yarn.scheduler.capacity.root.default.a.a1.ordering-policy=fifo\n" |
| "yarn.scheduler.capacity.root.default.a.a1.state=RUNNING\n" |
| "yarn.scheduler.capacity.root.default.a.a1.user-limit-factor=1\n" |
| "yarn.scheduler.capacity.root.default.a.a2.acl_administer_queue=*\n" |
| "yarn.scheduler.capacity.root.default.a.a2.acl_submit_applications=*\n" |
| "yarn.scheduler.capacity.root.default.a.a2.capacity=25\n" |
| "yarn.scheduler.capacity.root.default.a.a2.maximum-capacity=25\n" |
| "yarn.scheduler.capacity.root.default.a.a2.minimum-user-limit-percent=100\n" |
| "yarn.scheduler.capacity.root.default.a.a2.ordering-policy=fifo\n" |
| "yarn.scheduler.capacity.root.default.a.a2.state=RUNNING\n" |
| "yarn.scheduler.capacity.root.default.a.a2.user-limit-factor=1\n" |
| "yarn.scheduler.capacity.root.default.a.acl_administer_queue=*\n" |
| "yarn.scheduler.capacity.root.default.a.acl_submit_applications=*\n" |
| "yarn.scheduler.capacity.root.default.a.capacity=50\n" |
| "yarn.scheduler.capacity.root.default.a.maximum-capacity=100\n" |
| "yarn.scheduler.capacity.root.default.a.minimum-user-limit-percent=100\n" |
| "yarn.scheduler.capacity.root.default.a.ordering-policy=fifo\n" |
| "yarn.scheduler.capacity.root.default.a.queues=a1,a2\n" |
| "yarn.scheduler.capacity.root.default.a.state=RUNNING\n" |
| "yarn.scheduler.capacity.root.default.a.user-limit-factor=1\n" |
| "yarn.scheduler.capacity.root.default.acl_submit_applications=*\n" |
| "yarn.scheduler.capacity.root.default.b.acl_administer_queue=*\n" |
| "yarn.scheduler.capacity.root.default.b.acl_submit_applications=*\n" |
| "yarn.scheduler.capacity.root.default.b.capacity=50\n" |
| "yarn.scheduler.capacity.root.default.b.maximum-capacity=50\n" |
| "yarn.scheduler.capacity.root.default.b.minimum-user-limit-percent=100\n" |
| "yarn.scheduler.capacity.root.default.b.ordering-policy=fifo\n" |
| "yarn.scheduler.capacity.root.default.b.state=RUNNING\n" |
| "yarn.scheduler.capacity.root.default.b.user-limit-factor=1\n" |
| "yarn.scheduler.capacity.root.default.capacity=100\n" |
| "yarn.scheduler.capacity.root.default.maximum-capacity=100\n" |
| "yarn.scheduler.capacity.root.default.queues=a,b\n" |
| "yarn.scheduler.capacity.root.default.state=RUNNING\n" |
| "yarn.scheduler.capacity.root.default.user-limit-factor=1\n" |
| "yarn.scheduler.capacity.root.queues=default" |
| } |
| }, |
| "hive-interactive-env": |
| { |
| 'properties': { |
| 'enable_hive_interactive': 'false', |
| 'llap_queue_capacity':'0' |
| } |
| }, |
| "tez-interactive-site": { |
| "properties": { |
| "tez.am.resource.memory.mb": "341" |
| } |
| }, |
| "hive-env": |
| { |
| 'properties': { |
| 'hive_user': 'hive' |
| } |
| } |
| } |
| } |
| |
| |
| clusterData = { |
| "cpu": 4, |
| "mapMemory": 30000, |
| "amMemory": 20000, |
| "reduceMemory": 20560, |
| "containers": 30, |
| "ramPerContainer": 512, |
| "referenceNodeManagerHost" : { |
| "total_mem" : 10240 * 1024 |
| } |
| } |
| |
| |
| configurations = { |
| } |
| |
| self.stackAdvisor.recommendYARNConfigurations(configurations, clusterData, services, self.hosts) |
| |
| # Check output |
| self.assertEquals(configurations['hive-interactive-site']['properties'], |
| self.expected_hive_interactive_site_empty['hive-interactive-site']['properties']) |
| self.assertEquals(configurations['capacity-scheduler']['properties'], |
| self.expected_capacity_scheduler_empty['properties']) |
| self.assertFalse('hive-interactive-env' in configurations) |
| |
| |
| |
| |
| # Test 12: (1). More than 2 queues at leaf level exists in capacity-scheduler (one queue is named 'llap') and |
| # 'capacity-scheduler' configs are passed-in as single "/n" separated string |
| # (2). enable_hive_interactive' is 'off'. |
| # Expected : No changes. |
| def test_recommendYARNConfigurations_no_update_to_llap_queue_3(self): |
| services= { |
| "services": [{ |
| "StackServices": { |
| "service_name": "YARN", |
| }, |
| "Versions": { |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "StackServiceComponents": { |
| "component_name": "NODEMANAGER", |
| "hostnames": ["c6401.ambari.apache.org"] |
| } |
| } |
| ] |
| }, { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE", |
| "StackServices": { |
| "service_name": "HIVE", |
| "service_version": "1.2.1.2.5", |
| "stack_name": "HDP", |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE/components/HIVE_SERVER_INTERACTIVE", |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "bulk_commands_display_name": "", |
| "bulk_commands_master_component_name": "", |
| "cardinality": "0-1", |
| "component_category": "MASTER", |
| "component_name": "HIVE_SERVER_INTERACTIVE", |
| "custom_commands": ["RESTART_LLAP"], |
| "decommission_allowed": "false", |
| "display_name": "HiveServer2 Interactive", |
| "has_bulk_commands_definition": "false", |
| "is_client": "false", |
| "is_master": "true", |
| "reassign_allowed": "false", |
| "recovery_enabled": "false", |
| "service_name": "HIVE", |
| "stack_name": "HDP", |
| "stack_version": "2.5", |
| "hostnames": ["c6401.ambari.apache.org"] |
| }, |
| "dependencies": [] |
| } |
| ] |
| } |
| ], |
| "changed-configurations": [ |
| { |
| u'old_value': u'', |
| u'type': u'', |
| u'name': u'' |
| } |
| ], |
| "configurations": { |
| "capacity-scheduler": { |
| "properties": { |
| "capacity-scheduler": "yarn.scheduler.capacity.maximum-am-resource-percent=0.2\n" |
| "yarn.scheduler.capacity.maximum-applications=10000\n" |
| "yarn.scheduler.capacity.node-locality-delay=40\n" |
| "yarn.scheduler.capacity.queue-mappings-override.enable=false\n" |
| "yarn.scheduler.capacity.resource-calculator=org.apache.hadoop.yarn.util.resource.DefaultResourceCalculator\n" |
| "yarn.scheduler.capacity.root.accessible-node-labels=*\n" |
| "yarn.scheduler.capacity.root.acl_administer_queue=*\n" |
| "yarn.scheduler.capacity.root.capacity=100\n" |
| "yarn.scheduler.capacity.root.default.a.a1.acl_administer_queue=*\n" |
| "yarn.scheduler.capacity.root.default.a.a1.acl_submit_applications=*\n" |
| "yarn.scheduler.capacity.root.default.a.a1.capacity=75\n" |
| "yarn.scheduler.capacity.root.default.a.a1.maximum-capacity=100\n" |
| "yarn.scheduler.capacity.root.default.a.a1.minimum-user-limit-percent=100\n" |
| "yarn.scheduler.capacity.root.default.a.a1.ordering-policy=fifo\n" |
| "yarn.scheduler.capacity.root.default.a.a1.state=RUNNING\n" |
| "yarn.scheduler.capacity.root.default.a.a1.user-limit-factor=1\n" |
| "yarn.scheduler.capacity.root.default.a.llap.acl_administer_queue=*\n" |
| "yarn.scheduler.capacity.root.default.a.llap.acl_submit_applications=*\n" |
| "yarn.scheduler.capacity.root.default.a.llap.capacity=25\n" |
| "yarn.scheduler.capacity.root.default.a.llap.maximum-capacity=25\n" |
| "yarn.scheduler.capacity.root.default.a.llap.minimum-user-limit-percent=100\n" |
| "yarn.scheduler.capacity.root.default.a.llap.ordering-policy=fifo\n" |
| "yarn.scheduler.capacity.root.default.a.llap.state=RUNNING\n" |
| "yarn.scheduler.capacity.root.default.a.llap.user-limit-factor=1\n" |
| "yarn.scheduler.capacity.root.default.a.acl_administer_queue=*\n" |
| "yarn.scheduler.capacity.root.default.a.acl_submit_applications=*\n" |
| "yarn.scheduler.capacity.root.default.a.capacity=50\n" |
| "yarn.scheduler.capacity.root.default.a.maximum-capacity=100\n" |
| "yarn.scheduler.capacity.root.default.a.minimum-user-limit-percent=100\n" |
| "yarn.scheduler.capacity.root.default.a.ordering-policy=fifo\n" |
| "yarn.scheduler.capacity.root.default.a.queues=a1,llap\n" |
| "yarn.scheduler.capacity.root.default.a.state=RUNNING\n" |
| "yarn.scheduler.capacity.root.default.a.user-limit-factor=1\n" |
| "yarn.scheduler.capacity.root.default.acl_submit_applications=*\n" |
| "yarn.scheduler.capacity.root.default.b.acl_administer_queue=*\n" |
| "yarn.scheduler.capacity.root.default.b.acl_submit_applications=*\n" |
| "yarn.scheduler.capacity.root.default.b.capacity=50\n" |
| "yarn.scheduler.capacity.root.default.b.maximum-capacity=50\n" |
| "yarn.scheduler.capacity.root.default.b.minimum-user-limit-percent=100\n" |
| "yarn.scheduler.capacity.root.default.b.ordering-policy=fifo\n" |
| "yarn.scheduler.capacity.root.default.b.state=RUNNING\n" |
| "yarn.scheduler.capacity.root.default.b.user-limit-factor=1\n" |
| "yarn.scheduler.capacity.root.default.capacity=100\n" |
| "yarn.scheduler.capacity.root.default.maximum-capacity=100\n" |
| "yarn.scheduler.capacity.root.default.queues=a,b\n" |
| "yarn.scheduler.capacity.root.default.state=RUNNING\n" |
| "yarn.scheduler.capacity.root.default.user-limit-factor=1\n" |
| "yarn.scheduler.capacity.root.queues=default" |
| } |
| }, |
| "hive-interactive-env": |
| { |
| 'properties': { |
| 'enable_hive_interactive': 'false', |
| 'llap_queue_capacity':'0' |
| } |
| }, |
| "hive-env": |
| { |
| 'properties': { |
| 'hive_user': 'hive' |
| } |
| } |
| } |
| } |
| |
| clusterData = { |
| "cpu": 4, |
| "mapMemory": 30000, |
| "amMemory": 20000, |
| "reduceMemory": 20560, |
| "containers": 30, |
| "ramPerContainer": 512, |
| "referenceNodeManagerHost" : { |
| "total_mem" : 10240 * 1024 |
| } |
| } |
| |
| configurations = { |
| } |
| |
| self.stackAdvisor.recommendYARNConfigurations(configurations, clusterData, services, self.hosts) |
| |
| # Check output |
| self.assertEquals(configurations['hive-interactive-site']['properties'], |
| self.expected_hive_interactive_site_empty['hive-interactive-site']['properties']) |
| self.assertEquals(configurations['capacity-scheduler']['properties'], |
| self.expected_capacity_scheduler_empty['properties']) |
| self.assertFalse('hive-interactive-env' in configurations) |
| |
| |
| |
| |
| # Test 13: (1). 'llap' (Cap: 0%, State: STOPPED) and 'default' (100%) queues exists at leaf level |
| # in capacity-scheduler and 'capacity-scheduler' configs are passed-in as single "/n" separated string |
| # (2). enable_hive_interactive' is 'off'. |
| # Expected : No changes. |
| def test_recommendYARNConfigurations_no_update_to_llap_queue_4(self): |
| services = { |
| "services": [{ |
| "StackServices": { |
| "service_name": "YARN", |
| }, |
| "Versions": { |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "StackServiceComponents": { |
| "component_name": "NODEMANAGER", |
| "hostnames": ["c6401.ambari.apache.org"] |
| } |
| } |
| ] |
| }, { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE", |
| "StackServices": { |
| "service_name": "HIVE", |
| "service_version": "1.2.1.2.5", |
| "stack_name": "HDP", |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE/components/HIVE_SERVER_INTERACTIVE", |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "bulk_commands_display_name": "", |
| "bulk_commands_master_component_name": "", |
| "cardinality": "0-1", |
| "component_category": "MASTER", |
| "component_name": "HIVE_SERVER_INTERACTIVE", |
| "custom_commands": ["RESTART_LLAP"], |
| "decommission_allowed": "false", |
| "display_name": "HiveServer2 Interactive", |
| "has_bulk_commands_definition": "false", |
| "is_client": "false", |
| "is_master": "true", |
| "reassign_allowed": "false", |
| "recovery_enabled": "false", |
| "service_name": "HIVE", |
| "stack_name": "HDP", |
| "stack_version": "2.5", |
| "hostnames": ["c6401.ambari.apache.org"] |
| }, |
| "dependencies": [] |
| } |
| ] |
| } |
| ], |
| "changed-configurations": [ |
| { |
| u'old_value': u'', |
| u'type': u'', |
| u'name': u'' |
| } |
| ], |
| "configurations": { |
| "capacity-scheduler": { |
| "properties": { |
| "capacity-scheduler": "yarn.scheduler.capacity.root.accessible-node-labels=*\n" |
| "yarn.scheduler.capacity.root.capacity=100\n" |
| "yarn.scheduler.capacity.root.queues=default,llap\n" |
| "yarn.scheduler.capacity.maximum-applications=10000\n" |
| "yarn.scheduler.capacity.root.default.user-limit-factor=1\n" |
| "yarn.scheduler.capacity.root.default.state=RUNNING\n" |
| "yarn.scheduler.capacity.maximum-am-resource-percent=1\n" |
| "yarn.scheduler.capacity.root.default.acl_submit_applications=*\n" |
| "yarn.scheduler.capacity.root.default.capacity=100\n" |
| "yarn.scheduler.capacity.root.acl_administer_queue=*\n" |
| "yarn.scheduler.capacity.node-locality-delay=40\n" |
| "yarn.scheduler.capacity.queue-mappings-override.enable=false\n" |
| "yarn.scheduler.capacity.root.llap.user-limit-factor=1\n" |
| "yarn.scheduler.capacity.root.llap.state=STOPPED\n" |
| "yarn.scheduler.capacity.root.llap.ordering-policy=fifo\n" |
| "yarn.scheduler.capacity.root.llap.minimum-user-limit-percent=100\n" |
| "yarn.scheduler.capacity.root.llap.maximum-capacity=0\n" |
| "yarn.scheduler.capacity.root.default.maximum-capacity=100\n" |
| "yarn.scheduler.capacity.root.llap.capacity=0\n" |
| "yarn.scheduler.capacity.root.llap.acl_submit_applications=hive\n" |
| "yarn.scheduler.capacity.root.llap.acl_administer_queue=hive\n" |
| "yarn.scheduler.capacity.root.llap.maximum-am-resource-percent=1\n" |
| } |
| }, |
| "hive-interactive-env": |
| { |
| 'properties': { |
| 'enable_hive_interactive': 'false' |
| } |
| }, |
| "hive-env": |
| { |
| 'properties': { |
| 'hive_user': 'hive' |
| } |
| } |
| } |
| } |
| |
| clusterData = { |
| "cpu": 4, |
| "mapMemory": 30000, |
| "amMemory": 20000, |
| "reduceMemory": 20560, |
| "containers": 30, |
| "ramPerContainer": 512, |
| "referenceNodeManagerHost" : { |
| "total_mem" : 10240 * 1024 |
| } |
| } |
| |
| |
| configurations = { |
| } |
| |
| self.stackAdvisor.recommendYARNConfigurations(configurations, clusterData, services, self.hosts) |
| |
| # Check output |
| self.assertEquals(configurations['hive-interactive-site']['properties'], |
| self.expected_hive_interactive_site_empty['hive-interactive-site']['properties']) |
| self.assertEquals(configurations['capacity-scheduler']['properties'], |
| self.expected_capacity_scheduler_empty['properties']) |
| self.assertFalse('hive-interactive-env' in configurations) |
| |
| |
| |
| # Test 14: YARN service with : (1). 'capacity scheduler' having 'llap' (state:stopped) and 'default' queue at |
| # root level and and 'capacity-scheduler' configs are passed-in as single "/n" separated string |
| # (2). 'enable_hive_interactive' is ON and (3). 'hive.llap.daemon.queue.name' == 'default' |
| def test_recommendYARNConfigurations_no_update_to_llap_queue_5(self): |
| services_15 = { |
| "services": [{ |
| "StackServices": { |
| "service_name": "YARN", |
| }, |
| "Versions": { |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "StackServiceComponents": { |
| "component_name": "NODEMANAGER", |
| "hostnames": ["c6401.ambari.apache.org"] |
| } |
| } |
| ] |
| }, { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE", |
| "StackServices": { |
| "service_name": "HIVE", |
| "service_version": "1.2.1.2.5", |
| "stack_name": "HDP", |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE/components/HIVE_SERVER_INTERACTIVE", |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "bulk_commands_display_name": "", |
| "bulk_commands_master_component_name": "", |
| "cardinality": "0-1", |
| "component_category": "MASTER", |
| "component_name": "HIVE_SERVER_INTERACTIVE", |
| "custom_commands": ["RESTART_LLAP"], |
| "decommission_allowed": "false", |
| "display_name": "HiveServer2 Interactive", |
| "has_bulk_commands_definition": "false", |
| "is_client": "false", |
| "is_master": "true", |
| "reassign_allowed": "false", |
| "recovery_enabled": "false", |
| "service_name": "HIVE", |
| "stack_name": "HDP", |
| "stack_version": "2.5", |
| "hostnames": ["c6401.ambari.apache.org"] |
| }, |
| "dependencies": [] |
| }, |
| { |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "cardinality": "1+", |
| "component_category": "SLAVE", |
| "component_name": "NODEMANAGER", |
| "display_name": "NodeManager", |
| "is_client": "false", |
| "is_master": "false", |
| "hostnames": [ |
| "c6403.ambari.apache.org" |
| ] |
| }, |
| "dependencies": [] |
| }, |
| ] |
| } |
| ], |
| "changed-configurations": [ |
| { |
| u'old_value': u'0', |
| u'type': u'hive-interactive-env', |
| u'name': u'llap_queue_capacity' |
| } |
| ], |
| "configurations": { |
| "capacity-scheduler": { |
| "properties": { |
| "capacity-scheduler": 'yarn.scheduler.capacity.root.default.maximum-capacity=60\n' |
| 'yarn.scheduler.capacity.root.accessible-node-labels=*\n' |
| 'yarn.scheduler.capacity.root.capacity=100\n' |
| 'yarn.scheduler.capacity.root.queues=default,llap\n' |
| 'yarn.scheduler.capacity.maximum-applications=10000\n' |
| 'yarn.scheduler.capacity.root.default.user-limit-factor=1\n' |
| 'yarn.scheduler.capacity.root.default.state=RUNNING\n' |
| 'yarn.scheduler.capacity.maximum-am-resource-percent=1\n' |
| 'yarn.scheduler.capacity.root.default.acl_submit_applications=*\n' |
| 'yarn.scheduler.capacity.root.default.capacity=60\n' |
| 'yarn.scheduler.capacity.root.acl_administer_queue=*\n' |
| 'yarn.scheduler.capacity.node-locality-delay=40\n' |
| 'yarn.scheduler.capacity.queue-mappings-override.enable=false\n' |
| 'yarn.scheduler.capacity.root.llap.user-limit-factor=1\n' |
| 'yarn.scheduler.capacity.root.llap.state=STOPPED\n' |
| 'yarn.scheduler.capacity.root.llap.ordering-policy=fifo\n' |
| 'yarn.scheduler.capacity.root.llap.minimum-user-limit-percent=100\n' |
| 'yarn.scheduler.capacity.root.llap.maximum-capacity=40\n' |
| 'yarn.scheduler.capacity.root.llap.capacity=40\n' |
| 'yarn.scheduler.capacity.root.llap.acl_submit_applications=hive\n' |
| 'yarn.scheduler.capacity.root.llap.acl_administer_queue=hive\n' |
| 'yarn.scheduler.capacity.root.llap.maximum-am-resource-percent=1' |
| |
| } |
| }, |
| "hive-interactive-env": |
| { |
| 'properties': { |
| 'enable_hive_interactive': 'true', |
| 'llap_queue_capacity':'40' |
| } |
| }, |
| "hive-interactive-site": |
| { |
| 'properties': { |
| 'hive.llap.daemon.queue.name': 'default', |
| 'hive.server2.tez.sessions.per.default.queue': '1' |
| } |
| }, |
| "hive-env": |
| { |
| 'properties': { |
| 'hive_user': 'hive' |
| } |
| }, |
| "yarn-site": { |
| "properties": { |
| "yarn.scheduler.minimum-allocation-mb": "341", |
| "yarn.nodemanager.resource.memory-mb": "4096", |
| "yarn.nodemanager.resource.cpu-vcores": '1' |
| } |
| }, |
| "tez-interactive-site": { |
| "properties": { |
| "tez.am.resource.memory.mb": "341" |
| } |
| }, |
| "hive-site": |
| { |
| 'properties': { |
| 'hive.tez.container.size': '341' |
| } |
| }, |
| "tez-site": { |
| "properties": { |
| "tez.am.resource.memory.mb": "341" |
| } |
| }, |
| } |
| } |
| |
| clusterData = { |
| "cpu": 4, |
| "mapMemory": 30000, |
| "amMemory": 20000, |
| "reduceMemory": 20560, |
| "containers": 30, |
| "ramPerContainer": 512, |
| "referenceNodeManagerHost" : { |
| "total_mem" : 10240 * 1024 |
| } |
| } |
| |
| configurations = { |
| } |
| |
| self.stackAdvisor.recommendYARNConfigurations(configurations, clusterData, services_15, self.hosts) |
| |
| # Check output |
| self.assertEquals(configurations['capacity-scheduler']['properties'], |
| self.expected_capacity_scheduler_empty['properties']) |
| |
| self.assertEquals(configurations['hive-interactive-env']['property_attributes']['llap_queue_capacity'], self.expected_visibility_false) |
| |
| |
| |
| # Test 15: capacity-scheduler not present as input in services. |
| # Expected : No changes. |
| def test_recommendYARNConfigurations_no_update_to_llap_queue_6(self): |
| services= { |
| "services": [{ |
| "StackServices": { |
| "service_name": "YARN", |
| }, |
| "Versions": { |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "StackServiceComponents": { |
| "component_name": "NODEMANAGER", |
| "hostnames": ["c6401.ambari.apache.org"] |
| } |
| } |
| ] |
| }, { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE", |
| "StackServices": { |
| "service_name": "HIVE", |
| "service_version": "1.2.1.2.5", |
| "stack_name": "HDP", |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE/components/HIVE_SERVER_INTERACTIVE", |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "bulk_commands_display_name": "", |
| "bulk_commands_master_component_name": "", |
| "cardinality": "0-1", |
| "component_category": "MASTER", |
| "component_name": "HIVE_SERVER_INTERACTIVE", |
| "custom_commands": ["RESTART_LLAP"], |
| "decommission_allowed": "false", |
| "display_name": "HiveServer2 Interactive", |
| "has_bulk_commands_definition": "false", |
| "is_client": "false", |
| "is_master": "true", |
| "reassign_allowed": "false", |
| "recovery_enabled": "false", |
| "service_name": "HIVE", |
| "stack_name": "HDP", |
| "stack_version": "2.5", |
| "hostnames": ["c6401.ambari.apache.org"] |
| }, |
| "dependencies": [] |
| } |
| ] |
| } |
| ], |
| "changed-configurations": [ |
| { |
| u'old_value': u'', |
| u'type': u'', |
| u'name': u'' |
| } |
| ], |
| "configurations": { |
| "capacity-scheduler": { |
| "properties": { |
| } |
| }, |
| "hive-interactive-env": |
| { |
| 'properties': { |
| 'enable_hive_interactive': 'false', |
| 'llap_queue_capacity':'0' |
| } |
| }, |
| "hive-env": |
| { |
| 'properties': { |
| 'hive_user': 'hive' |
| } |
| } |
| } |
| } |
| |
| clusterData = { |
| "cpu": 4, |
| "mapMemory": 30000, |
| "amMemory": 20000, |
| "reduceMemory": 20560, |
| "containers": 30, |
| "ramPerContainer": 512, |
| "referenceNodeManagerHost" : { |
| "total_mem" : 10240 * 1024 |
| } |
| } |
| |
| |
| configurations = { |
| } |
| self.stackAdvisor.recommendYARNConfigurations(configurations, clusterData, services, self.hosts) |
| |
| # Check output |
| self.assertEquals(configurations['capacity-scheduler']['properties'], |
| self.expected_capacity_scheduler_empty['properties']) |
| self.assertFalse('hive-interactive-env' in configurations) |
| self.assertEquals(configurations['hive-interactive-site']['properties'], |
| self.expected_hive_interactive_site_empty['hive-interactive-site']['properties']) |
| |
| |
| |
| # Test 16: capacity-scheduler malformed as input in services. |
| # Expected : No changes. |
| def test_recommendYARNConfigurations_no_update_to_llap_queue_7(self): |
| services= { |
| "services": [{ |
| "StackServices": { |
| "service_name": "YARN", |
| }, |
| "Versions": { |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "StackServiceComponents": { |
| "component_name": "NODEMANAGER", |
| "hostnames": ["c6401.ambari.apache.org"] |
| } |
| } |
| ] |
| }, { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE", |
| "StackServices": { |
| "service_name": "HIVE", |
| "service_version": "1.2.1.2.5", |
| "stack_name": "HDP", |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE/components/HIVE_SERVER_INTERACTIVE", |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "bulk_commands_display_name": "", |
| "bulk_commands_master_component_name": "", |
| "cardinality": "0-1", |
| "component_category": "MASTER", |
| "component_name": "HIVE_SERVER_INTERACTIVE", |
| "custom_commands": ["RESTART_LLAP"], |
| "decommission_allowed": "false", |
| "display_name": "HiveServer2 Interactive", |
| "has_bulk_commands_definition": "false", |
| "is_client": "false", |
| "is_master": "true", |
| "reassign_allowed": "false", |
| "recovery_enabled": "false", |
| "service_name": "HIVE", |
| "stack_name": "HDP", |
| "stack_version": "2.5", |
| "hostnames": ["c6401.ambari.apache.org"] |
| }, |
| "dependencies": [] |
| } |
| ] |
| } |
| ], |
| "changed-configurations": [ |
| { |
| u'old_value': u'', |
| u'type': u'', |
| u'name': u'' |
| } |
| ], |
| "configurations": { |
| "capacity-scheduler": { |
| "properties": { |
| "capacity-scheduler": "yarn.scheduler.capacity.root.default.a.a1.acl_submit_applications=*\n" |
| "yarn.scheduler.capacity.root.default.a.a1.capacity=75\n" |
| "yarn.scheduler.capacity.root.default.a.a1.maximum-capacity=100\n" |
| } |
| }, |
| "hive-interactive-env": |
| { |
| 'properties': { |
| 'enable_hive_interactive': 'false', |
| 'llap_queue_capacity':'0' |
| } |
| }, |
| "hive-env": |
| { |
| 'properties': { |
| 'hive_user': 'hive' |
| } |
| } |
| } |
| } |
| |
| |
| clusterData = { |
| "cpu": 4, |
| "mapMemory": 30000, |
| "amMemory": 20000, |
| "reduceMemory": 20560, |
| "containers": 30, |
| "ramPerContainer": 512, |
| "referenceNodeManagerHost" : { |
| "total_mem" : 10240 * 1024 |
| } |
| } |
| |
| configurations = { |
| } |
| self.stackAdvisor.recommendYARNConfigurations(configurations, clusterData, services, self.hosts) |
| |
| # Check output |
| self.assertEquals(configurations['capacity-scheduler']['properties'], |
| self.expected_capacity_scheduler_empty['properties']) |
| self.assertFalse('hive-interactive-env' in configurations) |
| self.assertEquals(configurations['hive-interactive-site']['properties'], |
| self.expected_hive_interactive_site_empty['hive-interactive-site']['properties']) |
| |
| |
| |
| |
| # Test 17 : (1). 'default' and 'llap' (State : RUNNING) queue exists at root level in capacity-scheduler and |
| # 'capacity-scheduler' configs are passed-in as single "/n" separated string , and |
| # (2). enable_hive_interactive' is 'OFF' and (3). configuration change detected for 'enable_hive_interactive' |
| # Expected : Configurations values not recommended for llap related configs. |
| def test_recommendYARNConfigurations_llap_configs_not_updated_1(self): |
| |
| services = { |
| "services": [{ |
| "StackServices": { |
| "service_name": "YARN", |
| }, |
| "Versions": { |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "StackServiceComponents": { |
| "component_name": "NODEMANAGER", |
| "hostnames": ["c6401.ambari.apache.org"] |
| } |
| } |
| ] |
| }, { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE", |
| "StackServices": { |
| "service_name": "HIVE", |
| "service_version": "1.2.1.2.5", |
| "stack_name": "HDP", |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE/components/HIVE_SERVER_INTERACTIVE", |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "bulk_commands_display_name": "", |
| "bulk_commands_master_component_name": "", |
| "cardinality": "0-1", |
| "component_category": "MASTER", |
| "component_name": "HIVE_SERVER_INTERACTIVE", |
| "custom_commands": ["RESTART_LLAP"], |
| "decommission_allowed": "false", |
| "display_name": "HiveServer2 Interactive", |
| "has_bulk_commands_definition": "false", |
| "is_client": "false", |
| "is_master": "true", |
| "reassign_allowed": "false", |
| "recovery_enabled": "false", |
| "service_name": "HIVE", |
| "stack_name": "HDP", |
| "stack_version": "2.5", |
| "hostnames": ["c6401.ambari.apache.org"] |
| }, |
| "dependencies": [] |
| }, |
| { |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "cardinality": "1+", |
| "component_category": "SLAVE", |
| "component_name": "NODEMANAGER", |
| "display_name": "NodeManager", |
| "is_client": "false", |
| "is_master": "false", |
| "hostnames": [ |
| "c6403.ambari.apache.org" |
| ] |
| }, |
| "dependencies": [] |
| }, |
| ] |
| } |
| ], |
| "changed-configurations": [ |
| { |
| u'old_value': u'false', |
| u'type': u'hive-interactive-env', |
| u'name': u'enable_hive_interactive' |
| } |
| ], |
| "configurations": { |
| "capacity-scheduler": { |
| "properties": { |
| "capacity-scheduler": 'yarn.scheduler.capacity.root.default.maximum-capacity=60\n' |
| 'yarn.scheduler.capacity.root.accessible-node-labels=*\n' |
| 'yarn.scheduler.capacity.root.capacity=100\n' |
| 'yarn.scheduler.capacity.root.queues=default,llap\n' |
| 'yarn.scheduler.capacity.maximum-applications=10000\n' |
| 'yarn.scheduler.capacity.root.default.user-limit-factor=1\n' |
| 'yarn.scheduler.capacity.root.default.state=RUNNING\n' |
| 'yarn.scheduler.capacity.maximum-am-resource-percent=1\n' |
| 'yarn.scheduler.capacity.root.default.acl_submit_applications=*\n' |
| 'yarn.scheduler.capacity.root.default.capacity=60\n' |
| 'yarn.scheduler.capacity.root.acl_administer_queue=*\n' |
| 'yarn.scheduler.capacity.node-locality-delay=40\n' |
| 'yarn.scheduler.capacity.queue-mappings-override.enable=false\n' |
| 'yarn.scheduler.capacity.root.llap.user-limit-factor=1\n' |
| 'yarn.scheduler.capacity.root.llap.state=RUNNING\n' |
| 'yarn.scheduler.capacity.root.llap.ordering-policy=fifo\n' |
| 'yarn.scheduler.capacity.root.llap.minimum-user-limit-percent=100\n' |
| 'yarn.scheduler.capacity.root.llap.maximum-capacity=40\n' |
| 'yarn.scheduler.capacity.root.llap.capacity=40\n' |
| 'yarn.scheduler.capacity.root.llap.acl_submit_applications=hive\n' |
| 'yarn.scheduler.capacity.root.llap.acl_administer_queue=hive\n' |
| 'yarn.scheduler.capacity.root.llap.maximum-am-resource-percent=1' |
| |
| } |
| }, |
| "hive-interactive-env": |
| { |
| 'properties': { |
| 'enable_hive_interactive': 'false', |
| 'llap_queue_capacity':'40' |
| } |
| }, |
| "hive-interactive-site": |
| { |
| 'properties': { |
| 'hive.llap.daemon.queue.name': 'llap', |
| 'hive.server2.tez.sessions.per.default.queue': '1' |
| } |
| }, |
| "hive-env": |
| { |
| 'properties': { |
| 'hive_user': 'hive' |
| } |
| }, |
| "yarn-site": { |
| "properties": { |
| "yarn.scheduler.minimum-allocation-mb": "341", |
| "yarn.nodemanager.resource.memory-mb": "4096", |
| "yarn.nodemanager.resource.cpu-vcores": '1' |
| } |
| }, |
| "tez-interactive-site": { |
| "properties": { |
| "tez.am.resource.memory.mb": "341" |
| } |
| } |
| } |
| } |
| |
| clusterData = { |
| "cpu": 4, |
| "mapMemory": 30000, |
| "amMemory": 20000, |
| "reduceMemory": 20560, |
| "containers": 30, |
| "ramPerContainer": 512, |
| "referenceNodeManagerHost" : { |
| "total_mem" : 10240 * 1024 |
| } |
| } |
| |
| |
| configurations = { |
| } |
| |
| self.stackAdvisor.recommendYARNConfigurations(configurations, clusterData, services, self.hosts) |
| cap_sched_output_dict = convertToDict(configurations['capacity-scheduler']['properties']['capacity-scheduler']) |
| cap_sched_expected_dict = convertToDict(self.expected_capacity_scheduler_llap_Stopped_size_0['properties']['capacity-scheduler']) |
| self.assertEqual(cap_sched_output_dict, cap_sched_expected_dict) |
| |
| self.assertEquals(configurations['hive-interactive-site']['properties'], |
| self.expected_hive_interactive_site_default['hive-interactive-site']['properties']) |
| self.assertTrue('hive-interactive-env' not in configurations) |
| |
| self.assertTrue('property_attributes' not in configurations) |
| |
| |
| |
| |
| # Test 18 : (1). 'default' and 'llap' (State : RUNNING) queue exists at root level in capacity-scheduler, and |
| # 'capacity-scheduler' configs are passed-in as single "/n" separated string and |
| # (2). enable_hive_interactive' is 'OFF' and (3). configuration change NOT detected for 'enable_hive_interactive' |
| # Expected : No changes. |
| def test_recommendYARNConfigurations_llap_configs_not_updated_2(self): |
| |
| services_18 = { |
| "services": [{ |
| "StackServices": { |
| "service_name": "YARN", |
| }, |
| "Versions": { |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "StackServiceComponents": { |
| "component_name": "NODEMANAGER", |
| "hostnames": ["c6401.ambari.apache.org"] |
| } |
| } |
| ] |
| }, { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE", |
| "StackServices": { |
| "service_name": "HIVE", |
| "service_version": "1.2.1.2.5", |
| "stack_name": "HDP", |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE/components/HIVE_SERVER_INTERACTIVE", |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "bulk_commands_display_name": "", |
| "bulk_commands_master_component_name": "", |
| "cardinality": "0-1", |
| "component_category": "MASTER", |
| "component_name": "HIVE_SERVER_INTERACTIVE", |
| "custom_commands": ["RESTART_LLAP"], |
| "decommission_allowed": "false", |
| "display_name": "HiveServer2 Interactive", |
| "has_bulk_commands_definition": "false", |
| "is_client": "false", |
| "is_master": "true", |
| "reassign_allowed": "false", |
| "recovery_enabled": "false", |
| "service_name": "HIVE", |
| "stack_name": "HDP", |
| "stack_version": "2.5", |
| "hostnames": ["c6401.ambari.apache.org"] |
| }, |
| "dependencies": [] |
| }, |
| { |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "cardinality": "1+", |
| "component_category": "SLAVE", |
| "component_name": "NODEMANAGER", |
| "display_name": "NodeManager", |
| "is_client": "false", |
| "is_master": "false", |
| "hostnames": [ |
| "c6403.ambari.apache.org" |
| ] |
| }, |
| "dependencies": [] |
| }, |
| ] |
| } |
| ], |
| "configurations": { |
| "capacity-scheduler": { |
| "properties": { |
| "capacity-scheduler": 'yarn.scheduler.capacity.root.default.maximum-capacity=60\n' |
| 'yarn.scheduler.capacity.root.accessible-node-labels=*\n' |
| 'yarn.scheduler.capacity.root.capacity=100\n' |
| 'yarn.scheduler.capacity.root.queues=default,llap\n' |
| 'yarn.scheduler.capacity.maximum-applications=10000\n' |
| 'yarn.scheduler.capacity.root.default.user-limit-factor=1\n' |
| 'yarn.scheduler.capacity.root.default.state=RUNNING\n' |
| 'yarn.scheduler.capacity.maximum-am-resource-percent=1\n' |
| 'yarn.scheduler.capacity.root.default.acl_submit_applications=*\n' |
| 'yarn.scheduler.capacity.root.default.capacity=60\n' |
| 'yarn.scheduler.capacity.root.acl_administer_queue=*\n' |
| 'yarn.scheduler.capacity.node-locality-delay=40\n' |
| 'yarn.scheduler.capacity.queue-mappings-override.enable=false\n' |
| 'yarn.scheduler.capacity.root.llap.user-limit-factor=1\n' |
| 'yarn.scheduler.capacity.root.llap.state=STOPPED\n' |
| 'yarn.scheduler.capacity.root.llap.ordering-policy=fifo\n' |
| 'yarn.scheduler.capacity.root.llap.minimum-user-limit-percent=100\n' |
| 'yarn.scheduler.capacity.root.llap.maximum-capacity=40\n' |
| 'yarn.scheduler.capacity.root.llap.capacity=40\n' |
| 'yarn.scheduler.capacity.root.llap.acl_submit_applications=hive\n' |
| 'yarn.scheduler.capacity.root.llap.acl_administer_queue=hive\n' |
| 'yarn.scheduler.capacity.root.llap.maximum-am-resource-percent=1' |
| |
| } |
| }, |
| "hive-interactive-env": |
| { |
| 'properties': { |
| 'enable_hive_interactive': 'false', |
| 'llap_queue_capacity':'40' |
| } |
| }, |
| "hive-interactive-site": |
| { |
| 'properties': { |
| 'hive.llap.daemon.queue.name': 'llap', |
| 'hive.server2.tez.sessions.per.default.queue': '1' |
| } |
| }, |
| "hive-env": |
| { |
| 'properties': { |
| 'hive_user': 'hive' |
| } |
| }, |
| "yarn-site": { |
| "properties": { |
| "yarn.scheduler.minimum-allocation-mb": "341", |
| "yarn.nodemanager.resource.memory-mb": "4096", |
| "yarn.nodemanager.resource.cpu-vcores": '1' |
| } |
| }, |
| "tez-interactive-site": { |
| "properties": { |
| "tez.am.resource.memory.mb": "341" |
| } |
| } |
| } |
| } |
| |
| clusterData = { |
| "cpu": 4, |
| "mapMemory": 30000, |
| "amMemory": 20000, |
| "reduceMemory": 20560, |
| "containers": 30, |
| "ramPerContainer": 512, |
| "referenceNodeManagerHost" : { |
| "total_mem" : 10240 * 1024 |
| } |
| } |
| |
| configurations = { |
| } |
| self.stackAdvisor.recommendYARNConfigurations(configurations, clusterData, services_18, self.hosts) |
| |
| self.assertEquals(configurations['capacity-scheduler']['properties'], |
| self.expected_capacity_scheduler_empty['properties']) |
| self.assertEquals(configurations['hive-interactive-site']['properties'], |
| self.expected_hive_interactive_site_empty['hive-interactive-site']['properties']) |
| self.assertTrue('hive-interactive-env' not in configurations) |
| |
| self.assertTrue('property_attributes' not in configurations) |
| |
| |
| |
| ####################### 'One Node Manager' cluster - tests for calculating llap configs ################ |
| |
| |
| # Test 19: (1). 'default' and 'llap' (State : RUNNING) queue exists at root level in capacity-scheduler and |
| # 'capacity-scheduler' configs are passed-in as single "/n" separated string , and |
| # (2). enable_hive_interactive' is 'on' and (3). configuration change detected for 'llap_queue_capacity' |
| # Expected : Configurations values recommended for llap related configs. |
| def test_recommendYARNConfigurations_one_node_manager_llap_configs_updated_1(self): |
| |
| services = { |
| "services": [{ |
| "StackServices": { |
| "service_name": "YARN", |
| }, |
| "Versions": { |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "StackServiceComponents": { |
| "component_name": "NODEMANAGER", |
| "hostnames": ["c6401.ambari.apache.org"] |
| } |
| } |
| ] |
| }, { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE", |
| "StackServices": { |
| "service_name": "HIVE", |
| "service_version": "1.2.1.2.5", |
| "stack_name": "HDP", |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE/components/HIVE_SERVER_INTERACTIVE", |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "bulk_commands_display_name": "", |
| "bulk_commands_master_component_name": "", |
| "cardinality": "0-1", |
| "component_category": "MASTER", |
| "component_name": "HIVE_SERVER_INTERACTIVE", |
| "custom_commands": ["RESTART_LLAP"], |
| "decommission_allowed": "false", |
| "display_name": "HiveServer2 Interactive", |
| "has_bulk_commands_definition": "false", |
| "is_client": "false", |
| "is_master": "true", |
| "reassign_allowed": "false", |
| "recovery_enabled": "false", |
| "service_name": "HIVE", |
| "stack_name": "HDP", |
| "stack_version": "2.5", |
| "hostnames": ["c6401.ambari.apache.org"] |
| }, |
| "dependencies": [] |
| }, |
| { |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "cardinality": "1+", |
| "component_category": "SLAVE", |
| "component_name": "NODEMANAGER", |
| "display_name": "NodeManager", |
| "is_client": "false", |
| "is_master": "false", |
| "hostnames": [ |
| "c6403.ambari.apache.org" |
| ] |
| }, |
| "dependencies": [] |
| }, |
| ] |
| } |
| ], |
| "changed-configurations": [ |
| { |
| u'old_value': u'0', |
| u'type': u'hive-interactive-env', |
| u'name': u'llap_queue_capacity' |
| } |
| ], |
| "configurations": { |
| "capacity-scheduler": { |
| "properties": { |
| "capacity-scheduler": 'yarn.scheduler.capacity.root.default.maximum-capacity=60\n' |
| 'yarn.scheduler.capacity.root.accessible-node-labels=*\n' |
| 'yarn.scheduler.capacity.root.capacity=100\n' |
| 'yarn.scheduler.capacity.root.queues=default,llap\n' |
| 'yarn.scheduler.capacity.maximum-applications=10000\n' |
| 'yarn.scheduler.capacity.root.default.user-limit-factor=1\n' |
| 'yarn.scheduler.capacity.root.default.state=RUNNING\n' |
| 'yarn.scheduler.capacity.maximum-am-resource-percent=1\n' |
| 'yarn.scheduler.capacity.root.default.acl_submit_applications=*\n' |
| 'yarn.scheduler.capacity.root.default.capacity=80\n' |
| 'yarn.scheduler.capacity.root.acl_administer_queue=*\n' |
| 'yarn.scheduler.capacity.node-locality-delay=40\n' |
| 'yarn.scheduler.capacity.queue-mappings-override.enable=false\n' |
| 'yarn.scheduler.capacity.root.llap.user-limit-factor=1\n' |
| 'yarn.scheduler.capacity.root.llap.state=RUNNING\n' |
| 'yarn.scheduler.capacity.root.llap.ordering-policy=fifo\n' |
| 'yarn.scheduler.capacity.root.llap.minimum-user-limit-percent=100\n' |
| 'yarn.scheduler.capacity.root.llap.maximum-capacity=20\n' |
| 'yarn.scheduler.capacity.root.llap.capacity=20\n' |
| 'yarn.scheduler.capacity.root.llap.acl_submit_applications=hive\n' |
| 'yarn.scheduler.capacity.root.llap.acl_administer_queue=hive\n' |
| 'yarn.scheduler.capacity.root.llap.maximum-am-resource-percent=1' |
| |
| } |
| }, |
| "hive-interactive-env": |
| { |
| 'properties': { |
| 'enable_hive_interactive': 'true', |
| 'llap_queue_capacity':'21' |
| } |
| }, |
| "hive-interactive-site": |
| { |
| 'properties': { |
| 'hive.llap.daemon.queue.name': 'llap', |
| 'hive.server2.tez.sessions.per.default.queue': '1' |
| } |
| }, |
| "hive-env": |
| { |
| 'properties': { |
| 'hive_user': 'hive' |
| } |
| }, |
| "yarn-site": { |
| "properties": { |
| "yarn.scheduler.minimum-allocation-mb": "512", |
| "yarn.nodemanager.resource.memory-mb": "10240", |
| "yarn.nodemanager.resource.cpu-vcores": '1' |
| } |
| }, |
| "tez-site": { |
| "properties": { |
| "tez.am.resource.memory.mb": "512" |
| } |
| }, |
| "hive-site": |
| { |
| 'properties': { |
| 'hive.tez.container.size': '512' |
| } |
| }, |
| } |
| } |
| |
| |
| clusterData = { |
| "cpu": 4, |
| "mapMemory": 30000, |
| "amMemory": 20000, |
| "reduceMemory": 20560, |
| "containers": 30, |
| "ramPerContainer": 512, |
| "referenceNodeManagerHost" : { |
| "total_mem" : 10240 * 1024 |
| } |
| } |
| |
| configurations = { |
| } |
| self.stackAdvisor.recommendYARNConfigurations(configurations, clusterData, services, self.hosts) |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.server2.tez.sessions.per.default.queue'], '1') |
| self.assertEquals(configurations['hive-interactive-site']['property_attributes']['hive.server2.tez.sessions.per.default.queue'], {'minimum': '1', 'maximum': '32'}) |
| |
| self.assertEqual(configurations['hive-interactive-env']['properties']['num_llap_nodes'], '1') |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.daemon.yarn.container.mb'], '1024') |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.daemon.num.executors'], '1') |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.io.threadpool.size'], '1') |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.io.memory.size'], '512') |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.io.enabled'], 'true') |
| |
| self.assertEqual(configurations['hive-interactive-env']['properties']['llap_heap_size'], '409') |
| |
| self.assertEqual(configurations['hive-interactive-env']['properties']['slider_am_container_mb'], '512') |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.server2.tez.default.queues'], 'llap') |
| |
| self.assertEqual(configurations['tez-interactive-site']['properties']['tez.am.resource.memory.mb'], '512') |
| |
| |
| |
| # Test 20: (1). 'default' and 'llap' (State : RUNNING) queue exists at root level in capacity-scheduler, and |
| # 'capacity-scheduler' configs are passed-in as single "/n" separated string and |
| # (2). enable_hive_interactive' is 'on' and (3). configuration change detected for 'hive.server2.tez.sessions.per.default.queue' |
| # (3). Selected queue in 'hive.llap.daemon.queue.name' is 'default'. |
| # Expected : Configurations values recommended for llap related configs. |
| def test_recommendYARNConfigurations_one_node_manager_llap_configs_updated_2(self): |
| |
| # Services 16: YARN service with : (1). 'capacity scheduler' having 'llap' and 'default' queue at root level and |
| # (2). 'enable_hive_interactive' is ON and (3). configuration change detected for 'enable_hive_interactive' |
| services = { |
| "services": [{ |
| "StackServices": { |
| "service_name": "YARN", |
| }, |
| "Versions": { |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "StackServiceComponents": { |
| "component_name": "NODEMANAGER", |
| "hostnames": ["c6401.ambari.apache.org"] |
| } |
| } |
| ] |
| }, { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE", |
| "StackServices": { |
| "service_name": "HIVE", |
| "service_version": "1.2.1.2.5", |
| "stack_name": "HDP", |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE/components/HIVE_SERVER_INTERACTIVE", |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "bulk_commands_display_name": "", |
| "bulk_commands_master_component_name": "", |
| "cardinality": "0-1", |
| "component_category": "MASTER", |
| "component_name": "HIVE_SERVER_INTERACTIVE", |
| "custom_commands": ["RESTART_LLAP"], |
| "decommission_allowed": "false", |
| "display_name": "HiveServer2 Interactive", |
| "has_bulk_commands_definition": "false", |
| "is_client": "false", |
| "is_master": "true", |
| "reassign_allowed": "false", |
| "recovery_enabled": "false", |
| "service_name": "HIVE", |
| "stack_name": "HDP", |
| "stack_version": "2.5", |
| "hostnames": ["c6401.ambari.apache.org"] |
| }, |
| "dependencies": [] |
| }, |
| { |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "cardinality": "1+", |
| "component_category": "SLAVE", |
| "component_name": "NODEMANAGER", |
| "display_name": "NodeManager", |
| "is_client": "false", |
| "is_master": "false", |
| "hostnames": [ |
| "c6403.ambari.apache.org" |
| ] |
| }, |
| "dependencies": [] |
| }, |
| ] |
| } |
| ], |
| "changed-configurations": [ |
| { |
| u'old_value': u'2', |
| u'type': u'hive-interactive-site', |
| u'name': u'hive.server2.tez.sessions.per.default.queue' |
| } |
| ], |
| "configurations": { |
| "capacity-scheduler": { |
| "properties": { |
| "capacity-scheduler": 'yarn.scheduler.capacity.root.default.maximum-capacity=60\n' |
| 'yarn.scheduler.capacity.root.accessible-node-labels=*\n' |
| 'yarn.scheduler.capacity.root.capacity=100\n' |
| 'yarn.scheduler.capacity.root.queues=default,llap\n' |
| 'yarn.scheduler.capacity.maximum-applications=10000\n' |
| 'yarn.scheduler.capacity.root.default.user-limit-factor=1\n' |
| 'yarn.scheduler.capacity.root.default.state=RUNNING\n' |
| 'yarn.scheduler.capacity.maximum-am-resource-percent=1\n' |
| 'yarn.scheduler.capacity.root.default.acl_submit_applications=*\n' |
| 'yarn.scheduler.capacity.root.default.capacity=60\n' |
| 'yarn.scheduler.capacity.root.acl_administer_queue=*\n' |
| 'yarn.scheduler.capacity.node-locality-delay=40\n' |
| 'yarn.scheduler.capacity.queue-mappings-override.enable=false\n' |
| 'yarn.scheduler.capacity.root.llap.user-limit-factor=1\n' |
| 'yarn.scheduler.capacity.root.llap.state=RUNNING\n' |
| 'yarn.scheduler.capacity.root.llap.ordering-policy=fifo\n' |
| 'yarn.scheduler.capacity.root.llap.minimum-user-limit-percent=100\n' |
| 'yarn.scheduler.capacity.root.llap.maximum-capacity=40\n' |
| 'yarn.scheduler.capacity.root.llap.capacity=40\n' |
| 'yarn.scheduler.capacity.root.llap.acl_submit_applications=hive\n' |
| 'yarn.scheduler.capacity.root.llap.acl_administer_queue=hive\n' |
| 'yarn.scheduler.capacity.root.llap.maximum-am-resource-percent=1' |
| |
| } |
| }, |
| "hive-interactive-env": |
| { |
| 'properties': { |
| 'enable_hive_interactive': 'true', |
| 'llap_queue_capacity':'40' |
| } |
| }, |
| "hive-interactive-site": |
| { |
| 'properties': { |
| 'hive.llap.daemon.queue.name': 'default', |
| 'hive.server2.tez.sessions.per.default.queue': '1' |
| } |
| }, |
| "hive-env": |
| { |
| 'properties': { |
| 'hive_user': 'hive' |
| } |
| }, |
| "yarn-site": { |
| "properties": { |
| "yarn.scheduler.minimum-allocation-mb": "341", |
| "yarn.nodemanager.resource.memory-mb": "10240", |
| "yarn.nodemanager.resource.cpu-vcores": '1' |
| } |
| }, |
| "tez-site": { |
| "properties": { |
| "tez.am.resource.memory.mb": "341" |
| } |
| }, |
| "hive-site": |
| { |
| 'properties': { |
| 'hive.tez.container.size': '341' |
| } |
| }, |
| } |
| } |
| |
| |
| clusterData = { |
| "cpu": 4, |
| "mapMemory": 30000, |
| "amMemory": 20000, |
| "reduceMemory": 20560, |
| "containers": 30, |
| "ramPerContainer": 512, |
| "referenceNodeManagerHost" : { |
| "total_mem" : 10240 * 1024 |
| } |
| } |
| |
| |
| configurations = { |
| } |
| |
| self.stackAdvisor.recommendYARNConfigurations(configurations, clusterData, services, self.hosts) |
| self.assertEqual(configurations['hive-interactive-env']['properties']['num_llap_nodes'], '1') |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.daemon.yarn.container.mb'], '5115') |
| |
| self.assertTrue('hive.llap.daemon.queue.name' not in configurations['hive-interactive-site']['properties']) |
| self.assertTrue('hive.server2.tez.default.queues' not in configurations['hive-interactive-site']['properties']) |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.daemon.num.executors'], '1') |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.io.threadpool.size'], '1') |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.io.memory.size'], '4774') |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.io.enabled'], 'true') |
| |
| self.assertEqual(configurations['hive-interactive-env']['properties']['llap_heap_size'], '272') |
| |
| self.assertEqual(configurations['hive-interactive-env']['properties']['slider_am_container_mb'], '341') |
| self.assertEquals(configurations['hive-interactive-env']['property_attributes']['llap_queue_capacity'], |
| {'visible': 'false'}) |
| |
| self.assertEqual(configurations['tez-interactive-site']['properties']['tez.am.resource.memory.mb'], '682') |
| |
| |
| |
| |
| # Test 21: (1). 'default' and 'llap' (State : RUNNING) queue exists at root level in capacity-scheduler, and |
| # 'capacity-scheduler' configs are passed-in as single "/n" separated string and |
| # (2). enable_hive_interactive' is 'on' and (3). configuration change detected for 'hive.server2.tez.sessions.per.default.queue' |
| # Expected : Configurations values recommended for llap related configs. |
| def test_recommendYARNConfigurations_one_node_manager_llap_configs_updated_3(self): |
| services = { |
| "services": [{ |
| "StackServices": { |
| "service_name": "YARN", |
| }, |
| "Versions": { |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "StackServiceComponents": { |
| "component_name": "NODEMANAGER", |
| "hostnames": ["c6401.ambari.apache.org"] |
| } |
| } |
| ] |
| }, { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE", |
| "StackServices": { |
| "service_name": "HIVE", |
| "service_version": "1.2.1.2.5", |
| "stack_name": "HDP", |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE/components/HIVE_SERVER_INTERACTIVE", |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "bulk_commands_display_name": "", |
| "bulk_commands_master_component_name": "", |
| "cardinality": "0-1", |
| "component_category": "MASTER", |
| "component_name": "HIVE_SERVER_INTERACTIVE", |
| "custom_commands": ["RESTART_LLAP"], |
| "decommission_allowed": "false", |
| "display_name": "HiveServer2 Interactive", |
| "has_bulk_commands_definition": "false", |
| "is_client": "false", |
| "is_master": "true", |
| "reassign_allowed": "false", |
| "recovery_enabled": "false", |
| "service_name": "HIVE", |
| "stack_name": "HDP", |
| "stack_version": "2.5", |
| "hostnames": ["c6401.ambari.apache.org"] |
| }, |
| "dependencies": [] |
| }, |
| { |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "cardinality": "1+", |
| "component_category": "SLAVE", |
| "component_name": "NODEMANAGER", |
| "display_name": "NodeManager", |
| "is_client": "false", |
| "is_master": "false", |
| "hostnames": [ |
| "c6403.ambari.apache.org" |
| ] |
| }, |
| "dependencies": [] |
| }, |
| ] |
| } |
| ], |
| "changed-configurations": [ |
| { |
| u'old_value': u'1', |
| u'type': u'hive-interactive-site', |
| u'name': u'hive.server2.tez.sessions.per.default.queue' |
| } |
| ], |
| "configurations": { |
| "capacity-scheduler": { |
| "properties": { |
| "capacity-scheduler": 'yarn.scheduler.capacity.root.default.maximum-capacity=60\n' |
| 'yarn.scheduler.capacity.root.accessible-node-labels=*\n' |
| 'yarn.scheduler.capacity.root.capacity=100\n' |
| 'yarn.scheduler.capacity.root.queues=default,llap\n' |
| 'yarn.scheduler.capacity.maximum-applications=10000\n' |
| 'yarn.scheduler.capacity.root.default.user-limit-factor=1\n' |
| 'yarn.scheduler.capacity.root.default.state=RUNNING\n' |
| 'yarn.scheduler.capacity.maximum-am-resource-percent=1\n' |
| 'yarn.scheduler.capacity.root.default.acl_submit_applications=*\n' |
| 'yarn.scheduler.capacity.root.default.capacity=60\n' |
| 'yarn.scheduler.capacity.root.acl_administer_queue=*\n' |
| 'yarn.scheduler.capacity.node-locality-delay=40\n' |
| 'yarn.scheduler.capacity.queue-mappings-override.enable=false\n' |
| 'yarn.scheduler.capacity.root.llap.user-limit-factor=1\n' |
| 'yarn.scheduler.capacity.root.llap.state=RUNNING\n' |
| 'yarn.scheduler.capacity.root.llap.ordering-policy=fifo\n' |
| 'yarn.scheduler.capacity.root.llap.minimum-user-limit-percent=100\n' |
| 'yarn.scheduler.capacity.root.llap.maximum-capacity=40\n' |
| 'yarn.scheduler.capacity.root.llap.capacity=40\n' |
| 'yarn.scheduler.capacity.root.llap.acl_submit_applications=hive\n' |
| 'yarn.scheduler.capacity.root.llap.acl_administer_queue=hive\n' |
| 'yarn.scheduler.capacity.root.llap.maximum-am-resource-percent=1' |
| |
| } |
| }, |
| "hive-interactive-env": |
| { |
| 'properties': { |
| 'enable_hive_interactive': 'true', |
| 'llap_queue_capacity':'41', |
| 'num_llap_nodes': 1 |
| } |
| }, |
| "hive-interactive-site": |
| { |
| 'properties': { |
| 'hive.llap.daemon.queue.name': 'llap', |
| 'hive.server2.tez.sessions.per.default.queue': '2', |
| |
| } |
| }, |
| "hive-env": |
| { |
| 'properties': { |
| 'hive_user': 'hive' |
| } |
| }, |
| "yarn-site": { |
| "properties": { |
| "yarn.scheduler.minimum-allocation-mb": "1024", |
| "yarn.nodemanager.resource.memory-mb": "51200", |
| "yarn.nodemanager.resource.cpu-vcores": '1' |
| } |
| }, |
| "tez-site": { |
| "properties": { |
| "tez.am.resource.memory.mb": "1024" |
| } |
| }, |
| "hive-site": |
| { |
| 'properties': { |
| 'hive.tez.container.size': '1024' |
| } |
| }, |
| } |
| } |
| |
| |
| |
| clusterData = { |
| "cpu": 4, |
| "mapMemory": 30000, |
| "amMemory": 20000, |
| "reduceMemory": 20560, |
| "containers": 30, |
| "ramPerContainer": 1024, |
| "referenceNodeManagerHost" : { |
| "total_mem" : 51200 * 1024 |
| } |
| } |
| |
| configurations = { |
| } |
| |
| |
| self.stackAdvisor.recommendYARNConfigurations(configurations, clusterData, services, self.hosts) |
| |
| self.assertTrue('hive.server2.tez.sessions.per.default.queue' not in configurations['hive-interactive-site']['properties']) |
| self.assertTrue('hive.server2.tez.sessions.per.default.queue' not in configurations['hive-interactive-site']['property_attributes']) |
| |
| self.assertEqual(configurations['hive-interactive-env']['properties']['num_llap_nodes'], '1') |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.daemon.yarn.container.mb'], '17408') |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.daemon.num.executors'], '1') |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.io.threadpool.size'], '1') |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.io.memory.size'], '16384') |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.io.enabled'], 'true') |
| |
| self.assertEqual(configurations['hive-interactive-env']['properties']['llap_heap_size'], '819') |
| |
| self.assertEqual(configurations['hive-interactive-env']['properties']['slider_am_container_mb'], '1024') |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.server2.tez.default.queues'], 'llap') |
| self.assertEquals(configurations['hive-interactive-env']['property_attributes']['llap_queue_capacity'], |
| {'maximum': '100', 'minimum': '20', 'visible': 'true'}) |
| |
| self.assertEqual(configurations['tez-interactive-site']['properties']['tez.am.resource.memory.mb'], '1024') |
| |
| |
| |
| ####################### 'Three Node Managers' cluster - tests for calculating llap configs ################ |
| |
| |
| # Test 22: (1). 'default' and 'llap' (State : RUNNING) queue exists at root level in capacity-scheduler, and |
| # 'capacity-scheduler' configs are passed-in as single "/n" separated string and |
| # (2). enable_hive_interactive' is 'on' and (3). configuration change detected for 'llap_queue_capacity' |
| # Expected : Configurations values recommended for llap related configs. |
| def test_recommendYARNConfigurations_three_node_manager_llap_configs_updated_1(self): |
| # Services 20: YARN service with : (1). 'capacity scheduler' having 'llap' and 'default' queue at root level and |
| # (2). 'enable_hive_interactive' is ON and (3). configuration change detected for 'llap_queue_capacity' |
| # 3 node managers and yarn.nodemanager.resource.memory-mb": "40960" |
| services = { |
| "services": [{ |
| "StackServices": { |
| "service_name": "YARN", |
| }, |
| "Versions": { |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "StackServiceComponents": { |
| "component_name": "NODEMANAGER", |
| "hostnames": ["c6401.ambari.apache.org", "c6402.ambari.apache.org", "c6403.ambari.apache.org"] |
| } |
| } |
| ] |
| }, { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE", |
| "StackServices": { |
| "service_name": "HIVE", |
| "service_version": "1.2.1.2.5", |
| "stack_name": "HDP", |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE/components/HIVE_SERVER_INTERACTIVE", |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "bulk_commands_display_name": "", |
| "bulk_commands_master_component_name": "", |
| "cardinality": "0-1", |
| "component_category": "MASTER", |
| "component_name": "HIVE_SERVER_INTERACTIVE", |
| "custom_commands": ["RESTART_LLAP"], |
| "decommission_allowed": "false", |
| "display_name": "HiveServer2 Interactive", |
| "has_bulk_commands_definition": "false", |
| "is_client": "false", |
| "is_master": "true", |
| "reassign_allowed": "false", |
| "recovery_enabled": "false", |
| "service_name": "HIVE", |
| "stack_name": "HDP", |
| "stack_version": "2.5", |
| "hostnames": ["c6401.ambari.apache.org"] |
| }, |
| "dependencies": [] |
| }, |
| { |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "cardinality": "1+", |
| "component_category": "SLAVE", |
| "component_name": "NODEMANAGER", |
| "display_name": "NodeManager", |
| "is_client": "false", |
| "is_master": "false", |
| "hostnames": [ |
| "c6401.ambari.apache.org" |
| ] |
| }, |
| "dependencies": [] |
| }, |
| ] |
| } |
| ], |
| "changed-configurations": [ |
| { |
| u'old_value': u'55', |
| u'type': u'hive-interactive-env', |
| u'name': u'llap_queue_capacity' |
| } |
| ], |
| "configurations": { |
| "capacity-scheduler": { |
| "properties": { |
| "capacity-scheduler": 'yarn.scheduler.capacity.root.default.maximum-capacity=60\n' |
| 'yarn.scheduler.capacity.root.accessible-node-labels=*\n' |
| 'yarn.scheduler.capacity.root.capacity=100\n' |
| 'yarn.scheduler.capacity.root.queues=default,llap\n' |
| 'yarn.scheduler.capacity.maximum-applications=10000\n' |
| 'yarn.scheduler.capacity.root.default.user-limit-factor=1\n' |
| 'yarn.scheduler.capacity.root.default.state=RUNNING\n' |
| 'yarn.scheduler.capacity.maximum-am-resource-percent=1\n' |
| 'yarn.scheduler.capacity.root.default.acl_submit_applications=*\n' |
| 'yarn.scheduler.capacity.root.default.capacity=60\n' |
| 'yarn.scheduler.capacity.root.acl_administer_queue=*\n' |
| 'yarn.scheduler.capacity.node-locality-delay=40\n' |
| 'yarn.scheduler.capacity.queue-mappings-override.enable=false\n' |
| 'yarn.scheduler.capacity.root.llap.user-limit-factor=1\n' |
| 'yarn.scheduler.capacity.root.llap.state=RUNNING\n' |
| 'yarn.scheduler.capacity.root.llap.ordering-policy=fifo\n' |
| 'yarn.scheduler.capacity.root.llap.minimum-user-limit-percent=100\n' |
| 'yarn.scheduler.capacity.root.llap.maximum-capacity=40\n' |
| 'yarn.scheduler.capacity.root.llap.capacity=40\n' |
| 'yarn.scheduler.capacity.root.llap.acl_submit_applications=hive\n' |
| 'yarn.scheduler.capacity.root.llap.acl_administer_queue=hive\n' |
| 'yarn.scheduler.capacity.root.llap.maximum-am-resource-percent=1' |
| |
| } |
| }, |
| "hive-interactive-env": |
| { |
| 'properties': { |
| 'enable_hive_interactive': 'true', |
| 'llap_queue_capacity':'90' |
| } |
| }, |
| "hive-interactive-site": |
| { |
| 'properties': { |
| 'hive.llap.daemon.queue.name': 'llap', |
| 'hive.server2.tez.sessions.per.default.queue': '1' |
| } |
| }, |
| "hive-env": |
| { |
| 'properties': { |
| 'hive_user': 'hive' |
| } |
| }, |
| "yarn-site": { |
| "properties": { |
| "yarn.scheduler.minimum-allocation-mb": "2048", |
| "yarn.nodemanager.resource.memory-mb": "40960", |
| "yarn.nodemanager.resource.cpu-vcores": '4' |
| } |
| }, |
| "tez-site": { |
| "properties": { |
| "tez.am.resource.memory.mb": "1024" |
| } |
| }, |
| "hive-site": |
| { |
| 'properties': { |
| 'hive.tez.container.size': '1024' |
| } |
| }, |
| } |
| } |
| |
| |
| |
| clusterData = { |
| "cpu": 4, |
| "mapMemory": 30000, |
| "amMemory": 20000, |
| "reduceMemory": 20560, |
| "containers": 30, |
| "ramPerContainer": 2048, |
| "referenceNodeManagerHost" : { |
| "total_mem" : 40960 * 1024 |
| } |
| } |
| |
| configurations = { |
| } |
| |
| |
| self.stackAdvisor.recommendYARNConfigurations(configurations, clusterData, services, self.hosts) |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.server2.tez.sessions.per.default.queue'], '13') |
| self.assertEquals(configurations['hive-interactive-site']['property_attributes']['hive.server2.tez.sessions.per.default.queue'], {'minimum': '1', 'maximum': '32'}) |
| |
| self.assertEqual(configurations['hive-interactive-env']['properties']['num_llap_nodes'], '2') |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.daemon.yarn.container.mb'], '40960') |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.daemon.num.executors'], '4') |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.io.threadpool.size'], '4') |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.io.memory.size'], '36864') |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.io.enabled'], 'true') |
| |
| self.assertEqual(configurations['hive-interactive-env']['properties']['llap_heap_size'], '3276') |
| |
| self.assertEqual(configurations['hive-interactive-env']['properties']['slider_am_container_mb'], '2048') |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.server2.tez.default.queues'], 'llap') |
| self.assertEquals(configurations['hive-interactive-env']['property_attributes']['llap_queue_capacity'], |
| {'maximum': '100', 'minimum': '20', 'visible': 'true'}) |
| |
| self.assertEqual(configurations['tez-interactive-site']['properties']['tez.am.resource.memory.mb'], '2048') |
| |
| |
| |
| |
| # Test 23: (1). 'default' and 'llap' (State : RUNNING) queue exists at root level in capacity-scheduler, and |
| # 'capacity-scheduler' configs are passed-in as single "/n" separated string and |
| # (2). enable_hive_interactive' is 'on' and (3). configuration change detected for 'enable_hive_interactive' |
| # Expected : Configurations values recommended for llap related configs. |
| def test_recommendYARNConfigurations_three_node_manager_llap_configs_updated_2(self): |
| # 3 node managers and yarn.nodemanager.resource.memory-mb": "12288" |
| services = { |
| "services": [{ |
| "StackServices": { |
| "service_name": "YARN", |
| }, |
| "Versions": { |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "StackServiceComponents": { |
| "component_name": "NODEMANAGER", |
| "hostnames": ["c6401.ambari.apache.org", "c6402.ambari.apache.org", "c6403.ambari.apache.org"] |
| } |
| } |
| ] |
| }, { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE", |
| "StackServices": { |
| "service_name": "HIVE", |
| "service_version": "1.2.1.2.5", |
| "stack_name": "HDP", |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE/components/HIVE_SERVER_INTERACTIVE", |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "bulk_commands_display_name": "", |
| "bulk_commands_master_component_name": "", |
| "cardinality": "0-1", |
| "component_category": "MASTER", |
| "component_name": "HIVE_SERVER_INTERACTIVE", |
| "custom_commands": ["RESTART_LLAP"], |
| "decommission_allowed": "false", |
| "display_name": "HiveServer2 Interactive", |
| "has_bulk_commands_definition": "false", |
| "is_client": "false", |
| "is_master": "true", |
| "reassign_allowed": "false", |
| "recovery_enabled": "false", |
| "service_name": "HIVE", |
| "stack_name": "HDP", |
| "stack_version": "2.5", |
| "hostnames": ["c6401.ambari.apache.org"] |
| }, |
| "dependencies": [] |
| }, |
| { |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "cardinality": "1+", |
| "component_category": "SLAVE", |
| "component_name": "NODEMANAGER", |
| "display_name": "NodeManager", |
| "is_client": "false", |
| "is_master": "false", |
| "hostnames": [ |
| "c6401.ambari.apache.org" |
| ] |
| }, |
| "dependencies": [] |
| }, |
| ] |
| } |
| ], |
| "changed-configurations": [ |
| { |
| u'old_value': u'false', |
| u'type': u'hive-interactive-env', |
| u'name': u'enable_hive_interactive' |
| } |
| ], |
| "configurations": { |
| "capacity-scheduler": { |
| "properties": { |
| "capacity-scheduler": 'yarn.scheduler.capacity.root.default.maximum-capacity=60\n' |
| 'yarn.scheduler.capacity.root.accessible-node-labels=*\n' |
| 'yarn.scheduler.capacity.root.capacity=100\n' |
| 'yarn.scheduler.capacity.root.queues=default,llap\n' |
| 'yarn.scheduler.capacity.maximum-applications=10000\n' |
| 'yarn.scheduler.capacity.root.default.user-limit-factor=1\n' |
| 'yarn.scheduler.capacity.root.default.state=RUNNING\n' |
| 'yarn.scheduler.capacity.maximum-am-resource-percent=1\n' |
| 'yarn.scheduler.capacity.root.default.acl_submit_applications=*\n' |
| 'yarn.scheduler.capacity.root.default.capacity=60\n' |
| 'yarn.scheduler.capacity.root.acl_administer_queue=*\n' |
| 'yarn.scheduler.capacity.node-locality-delay=40\n' |
| 'yarn.scheduler.capacity.queue-mappings-override.enable=false\n' |
| 'yarn.scheduler.capacity.root.llap.user-limit-factor=1\n' |
| 'yarn.scheduler.capacity.root.llap.state=RUNNING\n' |
| 'yarn.scheduler.capacity.root.llap.ordering-policy=fifo\n' |
| 'yarn.scheduler.capacity.root.llap.minimum-user-limit-percent=100\n' |
| 'yarn.scheduler.capacity.root.llap.maximum-capacity=40\n' |
| 'yarn.scheduler.capacity.root.llap.capacity=40\n' |
| 'yarn.scheduler.capacity.root.llap.acl_submit_applications=hive\n' |
| 'yarn.scheduler.capacity.root.llap.acl_administer_queue=hive\n' |
| 'yarn.scheduler.capacity.root.llap.maximum-am-resource-percent=1' |
| |
| } |
| }, |
| "hive-interactive-env": |
| { |
| 'properties': { |
| 'enable_hive_interactive': 'true', |
| 'llap_queue_capacity':'100' |
| } |
| }, |
| "hive-interactive-site": |
| { |
| 'properties': { |
| 'hive.llap.daemon.queue.name': 'llap', |
| 'hive.server2.tez.sessions.per.default.queue': '1' |
| } |
| }, |
| "hive-env": |
| { |
| 'properties': { |
| 'hive_user': 'hive' |
| } |
| }, |
| "yarn-site": { |
| "properties": { |
| "yarn.scheduler.minimum-allocation-mb": "341", |
| "yarn.nodemanager.resource.memory-mb": "12288", |
| "yarn.nodemanager.resource.cpu-vcores": '3' |
| } |
| }, |
| "tez-site": { |
| "properties": { |
| "tez.am.resource.memory.mb": "1024" |
| } |
| }, |
| "hive-site": |
| { |
| 'properties': { |
| 'hive.tez.container.size': '1024' |
| } |
| }, |
| } |
| } |
| |
| |
| clusterData = { |
| "cpu": 4, |
| "mapMemory": 30000, |
| "amMemory": 20000, |
| "reduceMemory": 20560, |
| "containers": 30, |
| "ramPerContainer": 341, |
| "referenceNodeManagerHost" : { |
| "total_mem" : 12288 * 1024 |
| } |
| } |
| |
| |
| configurations = { |
| } |
| |
| |
| self.stackAdvisor.recommendYARNConfigurations(configurations, clusterData, services, self.hosts) |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.server2.tez.sessions.per.default.queue'], '13') |
| self.assertEquals(configurations['hive-interactive-site']['property_attributes']['hive.server2.tez.sessions.per.default.queue'], {'minimum': '1', 'maximum': '32'}) |
| |
| self.assertEqual(configurations['hive-interactive-env']['properties']['num_llap_nodes'], '2') |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.daemon.yarn.container.mb'], '12276') |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.daemon.num.executors'], '3') |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.io.threadpool.size'], '3') |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.io.memory.size'], '9204') |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.io.enabled'], 'true') |
| |
| self.assertEqual(configurations['hive-interactive-env']['properties']['llap_heap_size'], '2457') |
| |
| self.assertEqual(configurations['hive-interactive-env']['properties']['slider_am_container_mb'], '341') |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.server2.tez.default.queues'], 'llap') |
| self.assertEquals(configurations['hive-interactive-env']['property_attributes']['llap_queue_capacity'], |
| {'maximum': '100', 'minimum': '20', 'visible': 'true'}) |
| |
| self.assertEqual(configurations['tez-interactive-site']['properties']['tez.am.resource.memory.mb'], '682') |
| |
| |
| |
| |
| # Test 24: (1). 'default' and 'llap' (State : RUNNING) queue exists at root level in capacity-scheduler, and |
| # 'capacity-scheduler' configs are passed-in as single "/n" separated string and |
| # (2). enable_hive_interactive' is 'on' and (3). configuration change detected for 'hive.server2.tez.sessions.per.default.queue' |
| # Expected : Configurations values recommended for llap related configs. |
| def test_recommendYARNConfigurations_three_node_manager_llap_configs_updated_3(self): |
| # 3 node managers and yarn.nodemanager.resource.memory-mb": "204800" |
| services = { |
| "services": [{ |
| "StackServices": { |
| "service_name": "YARN", |
| }, |
| "Versions": { |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "StackServiceComponents": { |
| "component_name": "NODEMANAGER", |
| "hostnames": ["c6401.ambari.apache.org", "c6402.ambari.apache.org", "c6403.ambari.apache.org"] |
| } |
| } |
| ] |
| }, { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE", |
| "StackServices": { |
| "service_name": "HIVE", |
| "service_version": "1.2.1.2.5", |
| "stack_name": "HDP", |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE/components/HIVE_SERVER_INTERACTIVE", |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "bulk_commands_display_name": "", |
| "bulk_commands_master_component_name": "", |
| "cardinality": "0-1", |
| "component_category": "MASTER", |
| "component_name": "HIVE_SERVER_INTERACTIVE", |
| "custom_commands": ["RESTART_LLAP"], |
| "decommission_allowed": "false", |
| "display_name": "HiveServer2 Interactive", |
| "has_bulk_commands_definition": "false", |
| "is_client": "false", |
| "is_master": "true", |
| "reassign_allowed": "false", |
| "recovery_enabled": "false", |
| "service_name": "HIVE", |
| "stack_name": "HDP", |
| "stack_version": "2.5", |
| "hostnames": ["c6401.ambari.apache.org"] |
| }, |
| "dependencies": [] |
| }, |
| { |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "cardinality": "1+", |
| "component_category": "SLAVE", |
| "component_name": "NODEMANAGER", |
| "display_name": "NodeManager", |
| "is_client": "false", |
| "is_master": "false", |
| "hostnames": [ |
| "c6401.ambari.apache.org" |
| ] |
| }, |
| "dependencies": [] |
| }, |
| ] |
| } |
| ], |
| "changed-configurations": [ |
| { |
| u'old_value': u'2', |
| u'type': u'hive-interactive-site', |
| u'name': u'hive.server2.tez.sessions.per.default.queue' |
| } |
| ], |
| "configurations": { |
| "capacity-scheduler": { |
| "properties": { |
| "capacity-scheduler": 'yarn.scheduler.capacity.root.default.maximum-capacity=60\n' |
| 'yarn.scheduler.capacity.root.accessible-node-labels=*\n' |
| 'yarn.scheduler.capacity.root.capacity=100\n' |
| 'yarn.scheduler.capacity.root.queues=default,llap\n' |
| 'yarn.scheduler.capacity.maximum-applications=10000\n' |
| 'yarn.scheduler.capacity.root.default.user-limit-factor=1\n' |
| 'yarn.scheduler.capacity.root.default.state=RUNNING\n' |
| 'yarn.scheduler.capacity.maximum-am-resource-percent=1\n' |
| 'yarn.scheduler.capacity.root.default.acl_submit_applications=*\n' |
| 'yarn.scheduler.capacity.root.default.capacity=60\n' |
| 'yarn.scheduler.capacity.root.acl_administer_queue=*\n' |
| 'yarn.scheduler.capacity.node-locality-delay=40\n' |
| 'yarn.scheduler.capacity.queue-mappings-override.enable=false\n' |
| 'yarn.scheduler.capacity.root.llap.user-limit-factor=1\n' |
| 'yarn.scheduler.capacity.root.llap.state=RUNNING\n' |
| 'yarn.scheduler.capacity.root.llap.ordering-policy=fifo\n' |
| 'yarn.scheduler.capacity.root.llap.minimum-user-limit-percent=100\n' |
| 'yarn.scheduler.capacity.root.llap.maximum-capacity=40\n' |
| 'yarn.scheduler.capacity.root.llap.capacity=40\n' |
| 'yarn.scheduler.capacity.root.llap.acl_submit_applications=hive\n' |
| 'yarn.scheduler.capacity.root.llap.acl_administer_queue=hive\n' |
| 'yarn.scheduler.capacity.root.llap.maximum-am-resource-percent=1' |
| |
| } |
| }, |
| "hive-interactive-env": |
| { |
| 'properties': { |
| 'enable_hive_interactive': 'true', |
| 'llap_queue_capacity':'50' |
| } |
| }, |
| "hive-interactive-site": |
| { |
| 'properties': { |
| 'hive.llap.daemon.queue.name': 'llap', |
| 'hive.server2.tez.sessions.per.default.queue': '1' |
| } |
| }, |
| "hive-env": |
| { |
| 'properties': { |
| 'hive_user': 'hive' |
| } |
| }, |
| "yarn-site": { |
| "properties": { |
| "yarn.scheduler.minimum-allocation-mb": "2048", |
| "yarn.nodemanager.resource.memory-mb": "204800", |
| "yarn.nodemanager.resource.cpu-vcores": '3' |
| } |
| }, |
| "tez-site": { |
| "properties": { |
| "tez.am.resource.memory.mb": "1024" |
| } |
| }, |
| "hive-site": |
| { |
| 'properties': { |
| 'hive.tez.container.size': '1024' |
| } |
| }, |
| } |
| } |
| |
| |
| |
| clusterData = { |
| "cpu": 4, |
| "mapMemory": 30000, |
| "amMemory": 20000, |
| "reduceMemory": 20560, |
| "containers": 30, |
| "ramPerContainer": 2048, |
| "referenceNodeManagerHost" : { |
| "total_mem" : 204800 * 1024 |
| } |
| } |
| |
| configurations = { |
| } |
| |
| |
| self.stackAdvisor.recommendYARNConfigurations(configurations, clusterData, services, self.hosts) |
| |
| self.assertEqual(configurations['hive-interactive-env']['properties']['num_llap_nodes'], '1') |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.daemon.yarn.container.mb'], '204800') |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.daemon.num.executors'], '3') |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.io.threadpool.size'], '3') |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.io.memory.size'], '201728') |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.io.enabled'], 'true') |
| |
| self.assertEqual(configurations['hive-interactive-env']['properties']['llap_heap_size'], '2457') |
| |
| self.assertEqual(configurations['hive-interactive-env']['properties']['slider_am_container_mb'], '2048') |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.server2.tez.default.queues'], 'llap') |
| self.assertEquals(configurations['hive-interactive-env']['property_attributes']['llap_queue_capacity'], |
| {'maximum': '100', 'minimum': '20', 'visible': 'true'}) |
| |
| self.assertEqual(configurations['tez-interactive-site']['properties']['tez.am.resource.memory.mb'], '2048') |
| |
| |
| |
| |
| |
| |
| |
| ####################### 'Five Node Managers' cluster - tests for calculating llap configs ################ |
| |
| |
| # Test 25: (1). 'default' and 'llap' (State : RUNNING) queue exists at root level in capacity-scheduler, and |
| # 'capacity-scheduler' configs are passed-in as single "/n" separated string and |
| # (2). enable_hive_interactive' is 'on' and (3). configuration change detected for 'llap_queue_capacity' |
| # Expected : Configurations values recommended for llap related configs. |
| def test_recommendYARNConfigurations_five_node_manager_llap_configs_updated_1(self): |
| services = { |
| "services": [{ |
| "StackServices": { |
| "service_name": "YARN", |
| }, |
| "Versions": { |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "StackServiceComponents": { |
| "component_name": "NODEMANAGER", |
| "hostnames": ["c6401.ambari.apache.org", "c6402.ambari.apache.org", "c6403.ambari.apache.org", "c6404.ambari.apache.org", "c6405.ambari.apache.org"] |
| } |
| } |
| ] |
| }, { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE", |
| "StackServices": { |
| "service_name": "HIVE", |
| "service_version": "1.2.1.2.5", |
| "stack_name": "HDP", |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE/components/HIVE_SERVER_INTERACTIVE", |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "bulk_commands_display_name": "", |
| "bulk_commands_master_component_name": "", |
| "cardinality": "0-1", |
| "component_category": "MASTER", |
| "component_name": "HIVE_SERVER_INTERACTIVE", |
| "custom_commands": ["RESTART_LLAP"], |
| "decommission_allowed": "false", |
| "display_name": "HiveServer2 Interactive", |
| "has_bulk_commands_definition": "false", |
| "is_client": "false", |
| "is_master": "true", |
| "reassign_allowed": "false", |
| "recovery_enabled": "false", |
| "service_name": "HIVE", |
| "stack_name": "HDP", |
| "stack_version": "2.5", |
| "hostnames": ["c6401.ambari.apache.org"] |
| }, |
| "dependencies": [] |
| }, |
| { |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "cardinality": "1+", |
| "component_category": "SLAVE", |
| "component_name": "NODEMANAGER", |
| "display_name": "NodeManager", |
| "is_client": "false", |
| "is_master": "false", |
| "hostnames": [ |
| "c6401.ambari.apache.org" |
| ] |
| }, |
| "dependencies": [] |
| }, |
| ] |
| } |
| ], |
| "changed-configurations": [ |
| { |
| u'old_value': u'55', |
| u'type': u'hive-interactive-env', |
| u'name': u'llap_queue_capacity' |
| } |
| ], |
| "configurations": { |
| "capacity-scheduler": { |
| "properties": { |
| "capacity-scheduler": 'yarn.scheduler.capacity.root.default.maximum-capacity=60\n' |
| 'yarn.scheduler.capacity.root.accessible-node-labels=*\n' |
| 'yarn.scheduler.capacity.root.capacity=100\n' |
| 'yarn.scheduler.capacity.root.queues=default,llap\n' |
| 'yarn.scheduler.capacity.maximum-applications=10000\n' |
| 'yarn.scheduler.capacity.root.default.user-limit-factor=1\n' |
| 'yarn.scheduler.capacity.root.default.state=RUNNING\n' |
| 'yarn.scheduler.capacity.maximum-am-resource-percent=1\n' |
| 'yarn.scheduler.capacity.root.default.acl_submit_applications=*\n' |
| 'yarn.scheduler.capacity.root.default.capacity=60\n' |
| 'yarn.scheduler.capacity.root.acl_administer_queue=*\n' |
| 'yarn.scheduler.capacity.node-locality-delay=40\n' |
| 'yarn.scheduler.capacity.queue-mappings-override.enable=false\n' |
| 'yarn.scheduler.capacity.root.llap.user-limit-factor=1\n' |
| 'yarn.scheduler.capacity.root.llap.state=RUNNING\n' |
| 'yarn.scheduler.capacity.root.llap.ordering-policy=fifo\n' |
| 'yarn.scheduler.capacity.root.llap.minimum-user-limit-percent=100\n' |
| 'yarn.scheduler.capacity.root.llap.maximum-capacity=40\n' |
| 'yarn.scheduler.capacity.root.llap.capacity=40\n' |
| 'yarn.scheduler.capacity.root.llap.acl_submit_applications=hive\n' |
| 'yarn.scheduler.capacity.root.llap.acl_administer_queue=hive\n' |
| 'yarn.scheduler.capacity.root.llap.maximum-am-resource-percent=1' |
| |
| } |
| }, |
| "hive-interactive-env": |
| { |
| 'properties': { |
| 'enable_hive_interactive': 'true', |
| 'llap_queue_capacity':'90' |
| } |
| }, |
| "hive-interactive-site": |
| { |
| 'properties': { |
| 'hive.llap.daemon.queue.name': 'llap', |
| 'hive.server2.tez.sessions.per.default.queue': '1' |
| } |
| }, |
| "hive-env": |
| { |
| 'properties': { |
| 'hive_user': 'hive' |
| } |
| }, |
| "yarn-site": { |
| "properties": { |
| "yarn.scheduler.minimum-allocation-mb": "3072", |
| "yarn.nodemanager.resource.memory-mb": "40960", |
| "yarn.nodemanager.resource.cpu-vcores": '4' |
| } |
| }, |
| "tez-site": { |
| "properties": { |
| "tez.am.resource.memory.mb": "1024" |
| } |
| }, |
| "hive-site": |
| { |
| 'properties': { |
| 'hive.tez.container.size': '1024' |
| } |
| }, |
| } |
| } |
| |
| |
| clusterData = { |
| "cpu": 4, |
| "mapMemory": 30000, |
| "amMemory": 20000, |
| "reduceMemory": 20560, |
| "containers": 30, |
| "ramPerContainer": 3072, |
| "referenceNodeManagerHost" : { |
| "total_mem" : 40960 * 1024 |
| } |
| } |
| |
| |
| configurations = { |
| } |
| |
| |
| self.stackAdvisor.recommendYARNConfigurations(configurations, clusterData, services, self.hosts) |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.server2.tez.sessions.per.default.queue'], '15') |
| self.assertEquals(configurations['hive-interactive-site']['property_attributes']['hive.server2.tez.sessions.per.default.queue'], {'minimum': '1', 'maximum': '32'}) |
| |
| self.assertEqual(configurations['hive-interactive-env']['properties']['num_llap_nodes'], '3') |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.daemon.yarn.container.mb'], '39936') |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.daemon.num.executors'], '4') |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.io.threadpool.size'], '4') |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.io.memory.size'], '35840') |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.io.enabled'], 'true') |
| |
| self.assertEqual(configurations['hive-interactive-env']['properties']['llap_heap_size'], '3276') |
| |
| self.assertEqual(configurations['hive-interactive-env']['properties']['slider_am_container_mb'], '3072') |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.server2.tez.default.queues'], 'llap') |
| self.assertEquals(configurations['hive-interactive-env']['property_attributes']['llap_queue_capacity'], |
| {'maximum': '100', 'minimum': '20', 'visible': 'true'}) |
| |
| self.assertEqual(configurations['tez-interactive-site']['properties']['tez.am.resource.memory.mb'], '3072') |
| |
| |
| |
| |
| # Test 26: (1). 'default' and 'llap' (State : RUNNING) queue exists at root level in capacity-scheduler, and |
| # 'capacity-scheduler' configs are passed-in as single "/n" separated string and |
| # (2). enable_hive_interactive' is 'on' and (3). configuration change detected for 'enable_hive_interactive' |
| # Expected : Configurations values recommended for llap related configs. |
| def test_recommendYARNConfigurations_five_node_manager_llap_configs_updated_2(self): |
| |
| # 3 node managers and yarn.nodemanager.resource.memory-mb": "12288" |
| services = { |
| "services": [{ |
| "StackServices": { |
| "service_name": "YARN", |
| }, |
| "Versions": { |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "StackServiceComponents": { |
| "component_name": "NODEMANAGER", |
| "hostnames": ["c6401.ambari.apache.org", "c6402.ambari.apache.org", "c6403.ambari.apache.org", "c6404.ambari.apache.org", "c6405.ambari.apache.org"] |
| } |
| } |
| ] |
| }, { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE", |
| "StackServices": { |
| "service_name": "HIVE", |
| "service_version": "1.2.1.2.5", |
| "stack_name": "HDP", |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE/components/HIVE_SERVER_INTERACTIVE", |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "bulk_commands_display_name": "", |
| "bulk_commands_master_component_name": "", |
| "cardinality": "0-1", |
| "component_category": "MASTER", |
| "component_name": "HIVE_SERVER_INTERACTIVE", |
| "custom_commands": ["RESTART_LLAP"], |
| "decommission_allowed": "false", |
| "display_name": "HiveServer2 Interactive", |
| "has_bulk_commands_definition": "false", |
| "is_client": "false", |
| "is_master": "true", |
| "reassign_allowed": "false", |
| "recovery_enabled": "false", |
| "service_name": "HIVE", |
| "stack_name": "HDP", |
| "stack_version": "2.5", |
| "hostnames": ["c6401.ambari.apache.org"] |
| }, |
| "dependencies": [] |
| }, |
| { |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "cardinality": "1+", |
| "component_category": "SLAVE", |
| "component_name": "NODEMANAGER", |
| "display_name": "NodeManager", |
| "is_client": "false", |
| "is_master": "false", |
| "hostnames": [ |
| "c6401.ambari.apache.org" |
| ] |
| }, |
| "dependencies": [] |
| }, |
| ] |
| } |
| ], |
| "changed-configurations": [ |
| { |
| u'old_value': u'false', |
| u'type': u'hive-interactive-env', |
| u'name': u'enable_hive_interactive' |
| } |
| ], |
| "configurations": { |
| "capacity-scheduler": { |
| "properties": { |
| "capacity-scheduler": 'yarn.scheduler.capacity.root.default.maximum-capacity=60\n' |
| 'yarn.scheduler.capacity.root.accessible-node-labels=*\n' |
| 'yarn.scheduler.capacity.root.capacity=100\n' |
| 'yarn.scheduler.capacity.root.queues=default,llap\n' |
| 'yarn.scheduler.capacity.maximum-applications=10000\n' |
| 'yarn.scheduler.capacity.root.default.user-limit-factor=1\n' |
| 'yarn.scheduler.capacity.root.default.state=RUNNING\n' |
| 'yarn.scheduler.capacity.maximum-am-resource-percent=1\n' |
| 'yarn.scheduler.capacity.root.default.acl_submit_applications=*\n' |
| 'yarn.scheduler.capacity.root.default.capacity=60\n' |
| 'yarn.scheduler.capacity.root.acl_administer_queue=*\n' |
| 'yarn.scheduler.capacity.node-locality-delay=40\n' |
| 'yarn.scheduler.capacity.queue-mappings-override.enable=false\n' |
| 'yarn.scheduler.capacity.root.llap.user-limit-factor=1\n' |
| 'yarn.scheduler.capacity.root.llap.state=RUNNING\n' |
| 'yarn.scheduler.capacity.root.llap.ordering-policy=fifo\n' |
| 'yarn.scheduler.capacity.root.llap.minimum-user-limit-percent=100\n' |
| 'yarn.scheduler.capacity.root.llap.maximum-capacity=40\n' |
| 'yarn.scheduler.capacity.root.llap.capacity=40\n' |
| 'yarn.scheduler.capacity.root.llap.acl_submit_applications=hive\n' |
| 'yarn.scheduler.capacity.root.llap.acl_administer_queue=hive\n' |
| 'yarn.scheduler.capacity.root.llap.maximum-am-resource-percent=1' |
| |
| } |
| }, |
| "hive-interactive-env": |
| { |
| 'properties': { |
| 'enable_hive_interactive': 'true', |
| 'llap_queue_capacity':'100' |
| } |
| }, |
| "hive-interactive-site": |
| { |
| 'properties': { |
| 'hive.llap.daemon.queue.name': 'llap', |
| 'hive.server2.tez.sessions.per.default.queue': '1' |
| } |
| }, |
| "hive-env": |
| { |
| 'properties': { |
| 'hive_user': 'hive' |
| } |
| }, |
| "yarn-site": { |
| "properties": { |
| "yarn.scheduler.minimum-allocation-mb": "341", |
| "yarn.nodemanager.resource.memory-mb": "204800", |
| "yarn.nodemanager.resource.cpu-vcores": '10' |
| } |
| }, |
| "tez-site": { |
| "properties": { |
| "tez.am.resource.memory.mb": "341" |
| } |
| }, |
| "hive-site": |
| { |
| 'properties': { |
| 'hive.tez.container.size': '341' |
| } |
| }, |
| } |
| } |
| |
| clusterData = { |
| "cpu": 4, |
| "mapMemory": 30000, |
| "amMemory": 20000, |
| "reduceMemory": 20560, |
| "containers": 30, |
| "ramPerContainer": 341, |
| "referenceNodeManagerHost" : { |
| "total_mem" : 204800 * 1024 |
| } |
| } |
| |
| |
| configurations = { |
| } |
| |
| |
| self.stackAdvisor.recommendYARNConfigurations(configurations, clusterData, services, self.hosts) |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.server2.tez.sessions.per.default.queue'], '32') |
| self.assertEquals(configurations['hive-interactive-site']['property_attributes']['hive.server2.tez.sessions.per.default.queue'], {'minimum': '1', 'maximum': '32'}) |
| |
| self.assertEqual(configurations['hive-interactive-env']['properties']['num_llap_nodes'], '4') |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.daemon.yarn.container.mb'], '204600') |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.daemon.num.executors'], '10') |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.io.threadpool.size'], '10') |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.io.memory.size'], '201190') |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.io.enabled'], 'true') |
| |
| self.assertEqual(configurations['hive-interactive-env']['properties']['llap_heap_size'], '2728') |
| |
| self.assertEqual(configurations['hive-interactive-env']['properties']['slider_am_container_mb'], '341') |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.server2.tez.default.queues'], 'llap') |
| self.assertEquals(configurations['hive-interactive-env']['property_attributes']['llap_queue_capacity'], |
| {'maximum': '100', 'minimum': '20', 'visible': 'true'}) |
| |
| self.assertEqual(configurations['tez-interactive-site']['properties']['tez.am.resource.memory.mb'], '1705') |
| |
| |
| |
| |
| |
| # Test 27: (1). 'default' and 'llap' (State : RUNNING) queue exists at root level in capacity-scheduler, and |
| # 'capacity-scheduler' configs are passed-in as single "/n" separated string and |
| # (2). enable_hive_interactive' is 'on' and (3). configuration change detected for 'hive.server2.tez.sessions.per.default.queue' |
| # Expected : Configurations values recommended for llap related configs. |
| def test_recommendYARNConfigurations_five_node_manager_llap_configs_updated_3(self): |
| # 3 node managers and yarn.nodemanager.resource.memory-mb": "204800" |
| services = { |
| "services": [{ |
| "StackServices": { |
| "service_name": "YARN", |
| }, |
| "Versions": { |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "StackServiceComponents": { |
| "component_name": "NODEMANAGER", |
| "hostnames": ["c6401.ambari.apache.org", "c6402.ambari.apache.org", "c6403.ambari.apache.org", "c6404.ambari.apache.org", "c6405.ambari.apache.org"] |
| } |
| } |
| ] |
| }, { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE", |
| "StackServices": { |
| "service_name": "HIVE", |
| "service_version": "1.2.1.2.5", |
| "stack_name": "HDP", |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE/components/HIVE_SERVER_INTERACTIVE", |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "bulk_commands_display_name": "", |
| "bulk_commands_master_component_name": "", |
| "cardinality": "0-1", |
| "component_category": "MASTER", |
| "component_name": "HIVE_SERVER_INTERACTIVE", |
| "custom_commands": ["RESTART_LLAP"], |
| "decommission_allowed": "false", |
| "display_name": "HiveServer2 Interactive", |
| "has_bulk_commands_definition": "false", |
| "is_client": "false", |
| "is_master": "true", |
| "reassign_allowed": "false", |
| "recovery_enabled": "false", |
| "service_name": "HIVE", |
| "stack_name": "HDP", |
| "stack_version": "2.5", |
| "hostnames": ["c6401.ambari.apache.org"] |
| }, |
| "dependencies": [] |
| }, |
| { |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "cardinality": "1+", |
| "component_category": "SLAVE", |
| "component_name": "NODEMANAGER", |
| "display_name": "NodeManager", |
| "is_client": "false", |
| "is_master": "false", |
| "hostnames": [ |
| "c6401.ambari.apache.org" |
| ] |
| }, |
| "dependencies": [] |
| }, |
| ] |
| } |
| ], |
| "changed-configurations": [ |
| { |
| u'old_value': u'3', |
| u'type': u'hive-interactive-site', |
| u'name': u'hive.server2.tez.sessions.per.default.queue' |
| } |
| ], |
| "configurations": { |
| "capacity-scheduler": { |
| "properties": { |
| "capacity-scheduler": 'yarn.scheduler.capacity.root.default.maximum-capacity=60\n' |
| 'yarn.scheduler.capacity.root.accessible-node-labels=*\n' |
| 'yarn.scheduler.capacity.root.capacity=100\n' |
| 'yarn.scheduler.capacity.root.queues=default,llap\n' |
| 'yarn.scheduler.capacity.maximum-applications=10000\n' |
| 'yarn.scheduler.capacity.root.default.user-limit-factor=1\n' |
| 'yarn.scheduler.capacity.root.default.state=RUNNING\n' |
| 'yarn.scheduler.capacity.maximum-am-resource-percent=1\n' |
| 'yarn.scheduler.capacity.root.default.acl_submit_applications=*\n' |
| 'yarn.scheduler.capacity.root.default.capacity=60\n' |
| 'yarn.scheduler.capacity.root.acl_administer_queue=*\n' |
| 'yarn.scheduler.capacity.node-locality-delay=40\n' |
| 'yarn.scheduler.capacity.queue-mappings-override.enable=false\n' |
| 'yarn.scheduler.capacity.root.llap.user-limit-factor=1\n' |
| 'yarn.scheduler.capacity.root.llap.state=RUNNING\n' |
| 'yarn.scheduler.capacity.root.llap.ordering-policy=fifo\n' |
| 'yarn.scheduler.capacity.root.llap.minimum-user-limit-percent=100\n' |
| 'yarn.scheduler.capacity.root.llap.maximum-capacity=40\n' |
| 'yarn.scheduler.capacity.root.llap.capacity=40\n' |
| 'yarn.scheduler.capacity.root.llap.acl_submit_applications=hive\n' |
| 'yarn.scheduler.capacity.root.llap.acl_administer_queue=hive\n' |
| 'yarn.scheduler.capacity.root.llap.maximum-am-resource-percent=1' |
| |
| } |
| }, |
| "hive-interactive-env": |
| { |
| 'properties': { |
| 'enable_hive_interactive': 'true', |
| 'llap_queue_capacity':'50' |
| } |
| }, |
| "hive-interactive-site": |
| { |
| 'properties': { |
| 'hive.llap.daemon.queue.name': 'llap', |
| 'hive.server2.tez.sessions.per.default.queue': '1' |
| } |
| }, |
| "hive-env": |
| { |
| 'properties': { |
| 'hive_user': 'hive' |
| } |
| }, |
| "yarn-site": { |
| "properties": { |
| "yarn.scheduler.minimum-allocation-mb": "2048", |
| "yarn.nodemanager.resource.memory-mb": "204800", |
| "yarn.nodemanager.resource.cpu-vcores": '3' |
| } |
| }, |
| "tez-site": { |
| "properties": { |
| "tez.am.resource.memory.mb": "1024" |
| } |
| }, |
| "hive-site": |
| { |
| 'properties': { |
| 'hive.tez.container.size': '1024' |
| } |
| }, |
| } |
| } |
| |
| clusterData = { |
| "cpu": 4, |
| "mapMemory": 30000, |
| "amMemory": 20000, |
| "reduceMemory": 20560, |
| "containers": 3, |
| "ramPerContainer": 82240, |
| "referenceNodeManagerHost" : { |
| "total_mem" : 204800 * 1024 |
| } |
| } |
| |
| configurations = { |
| } |
| |
| self.stackAdvisor.recommendYARNConfigurations(configurations, clusterData, services, self.hosts) |
| |
| self.assertEqual(configurations['hive-interactive-env']['properties']['num_llap_nodes'], '2') |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.daemon.yarn.container.mb'], '204800') |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.daemon.num.executors'], '3') |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.io.threadpool.size'], '3') |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.io.memory.size'], '201728') |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.io.enabled'], 'true') |
| |
| self.assertEqual(configurations['hive-interactive-env']['properties']['llap_heap_size'], '2457') |
| |
| self.assertEqual(configurations['hive-interactive-env']['properties']['slider_am_container_mb'], '2048') |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.server2.tez.default.queues'], 'llap') |
| self.assertEquals(configurations['hive-interactive-env']['property_attributes']['llap_queue_capacity'], |
| {'maximum': '100', 'minimum': '20', 'visible': 'true'}) |
| |
| self.assertEqual(configurations['tez-interactive-site']['properties']['tez.am.resource.memory.mb'], '2048') |
| |
| |
| |
| |
| |
| |
| # Test 28: (1). only 'default' queue exists at root level in capacity-scheduler, and |
| # 'capacity-scheduler' configs are passed-in as single "/n" separated string, |
| # (2). configuration change detected for 'enable_hive_interactive' |
| # (3). 'llap_queue_capacity' is passed in as 0, so that it can be read from configurations. |
| # Expected : Configurations values recommended for llap related configs. |
| def test_recommendYARNConfigurations_five_node_manager_llap_configs_updated_4(self): |
| # 3 node managers and yarn.nodemanager.resource.memory-mb": "204800" |
| services = { |
| "services": [{ |
| "StackServices": { |
| "service_name": "YARN", |
| }, |
| "Versions": { |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "StackServiceComponents": { |
| "component_name": "NODEMANAGER", |
| "hostnames": ["c6401.ambari.apache.org", "c6402.ambari.apache.org", "c6403.ambari.apache.org", "c6404.ambari.apache.org", "c6405.ambari.apache.org"] |
| } |
| } |
| ] |
| }, { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE", |
| "StackServices": { |
| "service_name": "HIVE", |
| "service_version": "1.2.1.2.5", |
| "stack_name": "HDP", |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE/components/HIVE_SERVER_INTERACTIVE", |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "bulk_commands_display_name": "", |
| "bulk_commands_master_component_name": "", |
| "cardinality": "0-1", |
| "component_category": "MASTER", |
| "component_name": "HIVE_SERVER_INTERACTIVE", |
| "custom_commands": ["RESTART_LLAP"], |
| "decommission_allowed": "false", |
| "display_name": "HiveServer2 Interactive", |
| "has_bulk_commands_definition": "false", |
| "is_client": "false", |
| "is_master": "true", |
| "reassign_allowed": "false", |
| "recovery_enabled": "false", |
| "service_name": "HIVE", |
| "stack_name": "HDP", |
| "stack_version": "2.5", |
| "hostnames": ["c6401.ambari.apache.org"] |
| }, |
| "dependencies": [] |
| }, |
| { |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "cardinality": "1+", |
| "component_category": "SLAVE", |
| "component_name": "NODEMANAGER", |
| "display_name": "NodeManager", |
| "is_client": "false", |
| "is_master": "false", |
| "hostnames": [ |
| "c6401.ambari.apache.org" |
| ] |
| }, |
| "dependencies": [] |
| }, |
| ] |
| } |
| ], |
| "changed-configurations": [ |
| { |
| u'old_value': u'false', |
| u'type': u'hive-interactive-env', |
| u'name': u'enable_hive_interactive' |
| } |
| ], |
| "configurations": { |
| "capacity-scheduler": { |
| "properties": { |
| "capacity-scheduler": "yarn.scheduler.capacity.root.queues=default\n" |
| "yarn.scheduler.capacity.root.default.user-limit-factor=1\n" |
| "yarn.scheduler.capacity.root.default.state=RUNNING\n" |
| "yarn.scheduler.capacity.root.default.maximum-capacity=100\n" |
| "yarn.scheduler.capacity.root.default.capacity=100\n" |
| "yarn.scheduler.capacity.root.default.acl_submit_applications=*\n" |
| "yarn.scheduler.capacity.root.capacity=100\n" |
| "yarn.scheduler.capacity.root.acl_administer_queue=*\n" |
| "yarn.scheduler.capacity.root.accessible-node-labels=*\n" |
| "yarn.scheduler.capacity.node-locality-delay=40\n" |
| "yarn.scheduler.capacity.maximum-applications=10000\n" |
| "yarn.scheduler.capacity.maximum-am-resource-percent=1\n" |
| "yarn.scheduler.capacity.queue-mappings-override.enable=false\n" |
| } |
| }, |
| "hive-interactive-env": |
| { |
| 'properties': { |
| 'enable_hive_interactive': 'true', |
| 'llap_queue_capacity':'0' # Intentionally kept '0' so as to read it from configurations. |
| } |
| }, |
| "hive-interactive-site": |
| { |
| 'properties': { |
| 'hive.llap.daemon.queue.name': 'default', |
| 'hive.server2.tez.sessions.per.default.queue': '1' |
| } |
| }, |
| "hive-env": |
| { |
| 'properties': { |
| 'hive_user': 'hive' |
| } |
| }, |
| "yarn-site": { |
| "properties": { |
| "yarn.scheduler.minimum-allocation-mb": "2048", |
| "yarn.nodemanager.resource.memory-mb": "204800", |
| "yarn.nodemanager.resource.cpu-vcores": '3' |
| } |
| }, |
| "tez-site": { |
| "properties": { |
| "tez.am.resource.memory.mb": "1024" |
| } |
| }, |
| "hive-site": |
| { |
| 'properties': { |
| 'hive.tez.container.size': '1024' |
| } |
| }, |
| } |
| } |
| |
| clusterData = { |
| "cpu": 4, |
| "mapMemory": 30000, |
| "amMemory": 20000, |
| "reduceMemory": 20560, |
| "containers": 3, |
| "ramPerContainer": 164480, |
| "referenceNodeManagerHost" : { |
| "total_mem" : 204800 * 1024 |
| } |
| } |
| |
| configurations = { |
| } |
| |
| self.stackAdvisor.recommendYARNConfigurations(configurations, clusterData, services, self.hosts) |
| |
| self.assertEqual(configurations['hive-interactive-env']['properties']['num_llap_nodes'], '1') |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.daemon.yarn.container.mb'], '151552') |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.daemon.num.executors'], '3') |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.io.threadpool.size'], '3') |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.io.memory.size'], '148480') |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.io.enabled'], 'true') |
| |
| self.assertEqual(configurations['hive-interactive-env']['properties']['llap_heap_size'], '2457') |
| |
| self.assertEqual(configurations['hive-interactive-env']['properties']['slider_am_container_mb'], '2048') |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.server2.tez.default.queues'], 'llap') |
| self.assertEquals(configurations['hive-interactive-env']['property_attributes']['llap_queue_capacity'], |
| {'maximum': '100', 'minimum': '20', 'visible': 'true'}) |
| |
| self.assertEqual(configurations['tez-interactive-site']['properties']['tez.am.resource.memory.mb'], '2048') |
| |
| |
| |
| |
| |
| |
| # Test 29: (1). 'default' and 'llap' (State : RUNNING) queue exists at root level in capacity-scheduler, and |
| # 'capacity-scheduler' configs are passed-in as dictionary and |
| # services['configurations']["capacity-scheduler"]["properties"]["capacity-scheduler"] is set to value "null" and |
| # (2). enable_hive_interactive' is 'on' and (3). configuration change detected for 'hive.server2.tez.sessions.per.default.queue' |
| # Expected : Configurations values recommended for llap related configs. |
| def test_recommendYARNConfigurations_five_node_manager_llap_configs_updated_5(self): |
| # 3 node managers and yarn.nodemanager.resource.memory-mb": "204800" |
| services = { |
| "services": [{ |
| "StackServices": { |
| "service_name": "YARN", |
| }, |
| "Versions": { |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "StackServiceComponents": { |
| "component_name": "NODEMANAGER", |
| "hostnames": ["c6401.ambari.apache.org", "c6402.ambari.apache.org", "c6403.ambari.apache.org", "c6404.ambari.apache.org", "c6405.ambari.apache.org"] |
| } |
| } |
| ] |
| }, { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE", |
| "StackServices": { |
| "service_name": "HIVE", |
| "service_version": "1.2.1.2.5", |
| "stack_name": "HDP", |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE/components/HIVE_SERVER_INTERACTIVE", |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "bulk_commands_display_name": "", |
| "bulk_commands_master_component_name": "", |
| "cardinality": "0-1", |
| "component_category": "MASTER", |
| "component_name": "HIVE_SERVER_INTERACTIVE", |
| "custom_commands": ["RESTART_LLAP"], |
| "decommission_allowed": "false", |
| "display_name": "HiveServer2 Interactive", |
| "has_bulk_commands_definition": "false", |
| "is_client": "false", |
| "is_master": "true", |
| "reassign_allowed": "false", |
| "recovery_enabled": "false", |
| "service_name": "HIVE", |
| "stack_name": "HDP", |
| "stack_version": "2.5", |
| "hostnames": ["c6401.ambari.apache.org"] |
| }, |
| "dependencies": [] |
| }, |
| { |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "cardinality": "1+", |
| "component_category": "SLAVE", |
| "component_name": "NODEMANAGER", |
| "display_name": "NodeManager", |
| "is_client": "false", |
| "is_master": "false", |
| "hostnames": [ |
| "c6401.ambari.apache.org" |
| ] |
| }, |
| "dependencies": [] |
| }, |
| ] |
| } |
| ], |
| "changed-configurations": [ |
| { |
| u'old_value': u'3', |
| u'type': u'hive-interactive-site', |
| u'name': u'hive.server2.tez.sessions.per.default.queue' |
| } |
| ], |
| "configurations": { |
| "capacity-scheduler" : { |
| "properties" : { |
| "capacity-scheduler" : "null", |
| "yarn.scheduler.capacity.root.accessible-node-labels" : "*", |
| "yarn.scheduler.capacity.maximum-am-resource-percent" : "1", |
| "yarn.scheduler.capacity.root.acl_administer_queue" : "*", |
| 'yarn.scheduler.capacity.queue-mappings-override.enable' : 'false', |
| "yarn.scheduler.capacity.root.default.capacity" : "100", |
| "yarn.scheduler.capacity.root.default.user-limit-factor" : "1", |
| "yarn.scheduler.capacity.root.queues" : "default", |
| "yarn.scheduler.capacity.root.capacity" : "100", |
| "yarn.scheduler.capacity.root.default.acl_submit_applications" : "*", |
| "yarn.scheduler.capacity.root.default.maximum-capacity" : "100", |
| "yarn.scheduler.capacity.node-locality-delay" : "40", |
| "yarn.scheduler.capacity.maximum-applications" : "10000", |
| "yarn.scheduler.capacity.root.default.state" : "RUNNING" |
| } |
| }, |
| "hive-interactive-env": |
| { |
| 'properties': { |
| 'enable_hive_interactive': 'true', |
| 'llap_queue_capacity':'50' |
| } |
| }, |
| "hive-interactive-site": |
| { |
| 'properties': { |
| 'hive.llap.daemon.queue.name': 'default', |
| 'hive.server2.tez.sessions.per.default.queue': '1' |
| } |
| }, |
| "hive-env": |
| { |
| 'properties': { |
| 'hive_user': 'hive' |
| } |
| }, |
| "yarn-site": { |
| "properties": { |
| "yarn.scheduler.minimum-allocation-mb": "2048", |
| "yarn.nodemanager.resource.memory-mb": "204800", |
| "yarn.nodemanager.resource.cpu-vcores": '3' |
| } |
| }, |
| "tez-site": { |
| "properties": { |
| "tez.am.resource.memory.mb": "1024" |
| } |
| }, |
| "hive-site": |
| { |
| 'properties': { |
| 'hive.tez.container.size': '1024' |
| } |
| }, |
| } |
| } |
| |
| clusterData = { |
| "cpu": 4, |
| "mapMemory": 30000, |
| "amMemory": 20000, |
| "reduceMemory": 20560, |
| "containers": 3, |
| "ramPerContainer": 82240, |
| "referenceNodeManagerHost" : { |
| "total_mem" : 328960 * 1024 |
| } |
| } |
| |
| |
| configurations = { |
| } |
| |
| self.stackAdvisor.recommendYARNConfigurations(configurations, clusterData, services, self.hosts) |
| |
| self.assertEqual(configurations['hive-interactive-env']['properties']['num_llap_nodes'], '2') |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.daemon.yarn.container.mb'], '204800') |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.daemon.num.executors'], '3') |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.io.threadpool.size'], '3') |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.io.memory.size'], '201728') |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.io.enabled'], 'true') |
| |
| self.assertEqual(configurations['hive-interactive-env']['properties']['llap_heap_size'], '2457') |
| |
| self.assertEqual(configurations['hive-interactive-env']['properties']['slider_am_container_mb'], '2048') |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.server2.tez.default.queues'], 'llap') |
| self.assertEquals(configurations['hive-interactive-env']['property_attributes']['llap_queue_capacity'], |
| {'maximum': '100', 'minimum': '20', 'visible': 'true'}) |
| |
| self.assertEqual(configurations['tez-interactive-site']['properties']['tez.am.resource.memory.mb'], '2048') |
| |
| |
| |
| |
| |
| # Test 30: (1). Multiple queue exist at various depths in capacity-scheduler, and 'capacity-scheduler' configs are |
| # passed-in as dictionary and services['configurations']["capacity-scheduler"]["properties"]["capacity-scheduler"] |
| # is set to value "null" and |
| # (2). Selected queue in 'hive.llap.daemon.queue.name' is 'default.b' |
| # (3). enable_hive_interactive' is 'on' and (3). configuration change detected for 'hive.server2.tez.sessions.per.default.queue' |
| # Expected : Configurations values recommended for llap related configs. |
| def test_recommendYARNConfigurations_five_node_manager_llap_configs_updated_6(self): |
| services= { |
| "services": [{ |
| "StackServices": { |
| "service_name": "YARN", |
| }, |
| "Versions": { |
| "parent_stack_version": "2.4", |
| "stack_name": "HDP", |
| "stack_version": "2.5", |
| "stack_hierarchy": { |
| "stack_name": "HDP", |
| "stack_versions": ["2.4", "2.3", "2.2", "2.1", "2.0.6"] |
| } |
| }, |
| "components": [ |
| { |
| "StackServiceComponents": { |
| "component_name": "NODEMANAGER", |
| "hostnames": ["c6401.ambari.apache.org", "c6402.ambari.apache.org", "c6403.ambari.apache.org", "c6404.ambari.apache.org", "c6405.ambari.apache.org"] |
| } |
| } |
| ] |
| }, { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE", |
| "StackServices": { |
| "service_name": "HIVE", |
| "service_version": "1.2.1.2.5", |
| "stack_name": "HDP", |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE/components/HIVE_SERVER_INTERACTIVE", |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "bulk_commands_display_name": "", |
| "bulk_commands_master_component_name": "", |
| "cardinality": "0-1", |
| "component_category": "MASTER", |
| "component_name": "HIVE_SERVER_INTERACTIVE", |
| "custom_commands": ["RESTART_LLAP"], |
| "decommission_allowed": "false", |
| "display_name": "HiveServer2 Interactive", |
| "has_bulk_commands_definition": "false", |
| "is_client": "false", |
| "is_master": "true", |
| "reassign_allowed": "false", |
| "recovery_enabled": "false", |
| "service_name": "HIVE", |
| "stack_name": "HDP", |
| "stack_version": "2.5", |
| "hostnames": ["c6401.ambari.apache.org"] |
| }, |
| "dependencies": [] |
| }, |
| { |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "cardinality": "1+", |
| "component_category": "SLAVE", |
| "component_name": "NODEMANAGER", |
| "display_name": "NodeManager", |
| "is_client": "false", |
| "is_master": "false", |
| "hostnames": [ |
| "c6401.ambari.apache.org" |
| ] |
| }, |
| "dependencies": [] |
| }, |
| ] |
| } |
| ], |
| "changed-configurations": [ ], |
| "configurations": { |
| "capacity-scheduler": { |
| "properties": { |
| "capacity-scheduler": "yarn.scheduler.capacity.maximum-am-resource-percent=0.2\n" |
| "yarn.scheduler.capacity.maximum-applications=10000\n" |
| "yarn.scheduler.capacity.node-locality-delay=40\n" |
| "yarn.scheduler.capacity.queue-mappings-override.enable=false\n" |
| "yarn.scheduler.capacity.resource-calculator=org.apache.hadoop.yarn.util.resource.DefaultResourceCalculator\n" |
| "yarn.scheduler.capacity.root.accessible-node-labels=*\n" |
| "yarn.scheduler.capacity.root.acl_administer_queue=*\n" |
| "yarn.scheduler.capacity.root.capacity=100\n" |
| "yarn.scheduler.capacity.root.default.a.a1.acl_administer_queue=*\n" |
| "yarn.scheduler.capacity.root.default.a.a1.acl_submit_applications=*\n" |
| "yarn.scheduler.capacity.root.default.a.a1.capacity=75\n" |
| "yarn.scheduler.capacity.root.default.a.a1.maximum-capacity=100\n" |
| "yarn.scheduler.capacity.root.default.a.a1.minimum-user-limit-percent=100\n" |
| "yarn.scheduler.capacity.root.default.a.a1.ordering-policy=fifo\n" |
| "yarn.scheduler.capacity.root.default.a.a1.state=RUNNING\n" |
| "yarn.scheduler.capacity.root.default.a.a1.user-limit-factor=1\n" |
| "yarn.scheduler.capacity.root.default.a.llap.acl_administer_queue=*\n" |
| "yarn.scheduler.capacity.root.default.a.llap.acl_submit_applications=*\n" |
| "yarn.scheduler.capacity.root.default.a.llap.capacity=25\n" |
| "yarn.scheduler.capacity.root.default.a.llap.maximum-capacity=25\n" |
| "yarn.scheduler.capacity.root.default.a.llap.minimum-user-limit-percent=100\n" |
| "yarn.scheduler.capacity.root.default.a.llap.ordering-policy=fifo\n" |
| "yarn.scheduler.capacity.root.default.a.llap.state=RUNNING\n" |
| "yarn.scheduler.capacity.root.default.a.llap.user-limit-factor=1\n" |
| "yarn.scheduler.capacity.root.default.a.acl_administer_queue=*\n" |
| "yarn.scheduler.capacity.root.default.a.acl_submit_applications=*\n" |
| "yarn.scheduler.capacity.root.default.a.capacity=20\n" |
| "yarn.scheduler.capacity.root.default.a.maximum-capacity=0\n" |
| "yarn.scheduler.capacity.root.default.a.minimum-user-limit-percent=100\n" |
| "yarn.scheduler.capacity.root.default.a.ordering-policy=fifo\n" |
| "yarn.scheduler.capacity.root.default.a.queues=a1,llap\n" |
| "yarn.scheduler.capacity.root.default.a.state=RUNNING\n" |
| "yarn.scheduler.capacity.root.default.a.user-limit-factor=1\n" |
| "yarn.scheduler.capacity.root.default.acl_submit_applications=*\n" |
| "yarn.scheduler.capacity.root.default.b.acl_administer_queue=*\n" |
| "yarn.scheduler.capacity.root.default.b.acl_submit_applications=*\n" |
| "yarn.scheduler.capacity.root.default.b.capacity=80\n" |
| "yarn.scheduler.capacity.root.default.b.maximum-capacity=100\n" |
| "yarn.scheduler.capacity.root.default.b.minimum-user-limit-percent=100\n" |
| "yarn.scheduler.capacity.root.default.b.ordering-policy=fifo\n" |
| "yarn.scheduler.capacity.root.default.b.state=RUNNING\n" |
| "yarn.scheduler.capacity.root.default.b.user-limit-factor=1\n" |
| "yarn.scheduler.capacity.root.default.capacity=100\n" |
| "yarn.scheduler.capacity.root.default.maximum-capacity=100\n" |
| "yarn.scheduler.capacity.root.default.queues=a,b\n" |
| "yarn.scheduler.capacity.root.default.state=RUNNING\n" |
| "yarn.scheduler.capacity.root.default.user-limit-factor=1\n" |
| "yarn.scheduler.capacity.root.queues=default" |
| } |
| }, |
| "hive-interactive-env": |
| { |
| 'properties': { |
| 'enable_hive_interactive': 'true', |
| 'llap_queue_capacity':'50' |
| } |
| }, |
| "hive-interactive-site": |
| { |
| 'properties': { |
| 'hive.llap.daemon.queue.name': 'b', |
| 'hive.server2.tez.sessions.per.default.queue': '1' |
| } |
| }, |
| "hive-env": |
| { |
| 'properties': { |
| 'hive_user': 'hive' |
| } |
| }, |
| "yarn-site": { |
| "properties": { |
| "yarn.scheduler.minimum-allocation-mb": "2048", |
| "yarn.nodemanager.resource.memory-mb": "204800", |
| "yarn.nodemanager.resource.cpu-vcores": '3' |
| } |
| }, |
| "tez-site": { |
| "properties": { |
| "tez.am.resource.memory.mb": "1024" |
| } |
| }, |
| "hive-site": |
| { |
| 'properties': { |
| 'hive.tez.container.size': '1024' |
| } |
| }, |
| } |
| } |
| |
| clusterData = { |
| "cpu": 4, |
| "mapMemory": 30000, |
| "amMemory": 20000, |
| "reduceMemory": 20560, |
| "containers": 30, |
| "ramPerContainer": 512, |
| "referenceNodeManagerHost" : { |
| "total_mem" : 10240 * 1024 |
| } |
| } |
| |
| configurations = { |
| } |
| self.stackAdvisor.recommendYARNConfigurations(configurations, clusterData, services, self.hosts) |
| self.assertEqual(configurations['hive-interactive-env']['properties']['num_llap_nodes'], '2') |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.daemon.yarn.container.mb'], '10240') |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.daemon.num.executors'], '3') |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.io.threadpool.size'], '3') |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.io.memory.size'], '7168') |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.io.enabled'], 'true') |
| |
| self.assertEqual(configurations['hive-interactive-env']['properties']['llap_heap_size'], '2457') |
| |
| self.assertEqual(configurations['hive-interactive-env']['properties']['slider_am_container_mb'], '512') |
| self.assertEquals(configurations['hive-interactive-env']['property_attributes']['llap_queue_capacity'], |
| {'visible': 'false'}) |
| |
| self.assertEqual(configurations['tez-interactive-site']['properties']['tez.am.resource.memory.mb'], '512') |
| |
| |
| |
| |
| |
| |
| # Test 31: (1). Multiple queue exist at various depths in capacity-scheduler, and 'capacity-scheduler' configs are |
| # passed-in as dictionary and services['configurations']["capacity-scheduler"]["properties"]["capacity-scheduler"] |
| # is set to value "null" and |
| # (2). Selected queue in 'hive.llap.daemon.queue.name' is 'default.b' and is in STOPPED state |
| # (3). enable_hive_interactive' is 'on' and (3). configuration change detected for 'hive.server2.tez.sessions.per.default.queue' |
| # Expected : No calculations for llap related configs. |
| def test_recommendYARNConfigurations_five_node_manager_llap_configs_updated_7(self): |
| services= { |
| "services": [{ |
| "StackServices": { |
| "service_name": "YARN", |
| }, |
| "Versions": { |
| "parent_stack_version": "2.4", |
| "stack_name": "HDP", |
| "stack_version": "2.5", |
| "stack_hierarchy": { |
| "stack_name": "HDP", |
| "stack_versions": ["2.4", "2.3", "2.2", "2.1", "2.0.6"] |
| } |
| }, |
| "components": [ |
| { |
| "StackServiceComponents": { |
| "component_name": "NODEMANAGER", |
| "hostnames": ["c6401.ambari.apache.org", "c6402.ambari.apache.org", "c6403.ambari.apache.org", "c6404.ambari.apache.org", "c6405.ambari.apache.org"] |
| } |
| } |
| ] |
| }, { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE", |
| "StackServices": { |
| "service_name": "HIVE", |
| "service_version": "1.2.1.2.5", |
| "stack_name": "HDP", |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE/components/HIVE_SERVER_INTERACTIVE", |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "bulk_commands_display_name": "", |
| "bulk_commands_master_component_name": "", |
| "cardinality": "0-1", |
| "component_category": "MASTER", |
| "component_name": "HIVE_SERVER_INTERACTIVE", |
| "custom_commands": ["RESTART_LLAP"], |
| "decommission_allowed": "false", |
| "display_name": "HiveServer2 Interactive", |
| "has_bulk_commands_definition": "false", |
| "is_client": "false", |
| "is_master": "true", |
| "reassign_allowed": "false", |
| "recovery_enabled": "false", |
| "service_name": "HIVE", |
| "stack_name": "HDP", |
| "stack_version": "2.5", |
| "hostnames": ["c6401.ambari.apache.org"] |
| }, |
| "dependencies": [] |
| }, |
| { |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "cardinality": "1+", |
| "component_category": "SLAVE", |
| "component_name": "NODEMANAGER", |
| "display_name": "NodeManager", |
| "is_client": "false", |
| "is_master": "false", |
| "hostnames": [ |
| "c6401.ambari.apache.org" |
| ] |
| }, |
| "dependencies": [] |
| }, |
| ] |
| } |
| ], |
| "changed-configurations": [ |
| { |
| u'old_value': u'3', |
| u'type': u'hive-interactive-site', |
| u'name': u'hive.server2.tez.sessions.per.default.queue' |
| } |
| ], |
| "configurations": { |
| "capacity-scheduler": { |
| "properties": { |
| "capacity-scheduler": "yarn.scheduler.capacity.maximum-am-resource-percent=0.2\n" |
| "yarn.scheduler.capacity.maximum-applications=10000\n" |
| "yarn.scheduler.capacity.node-locality-delay=40\n" |
| "yarn.scheduler.capacity.queue-mappings-override.enable=false\n" |
| "yarn.scheduler.capacity.resource-calculator=org.apache.hadoop.yarn.util.resource.DefaultResourceCalculator\n" |
| "yarn.scheduler.capacity.root.accessible-node-labels=*\n" |
| "yarn.scheduler.capacity.root.acl_administer_queue=*\n" |
| "yarn.scheduler.capacity.root.capacity=100\n" |
| "yarn.scheduler.capacity.root.default.a.a1.acl_administer_queue=*\n" |
| "yarn.scheduler.capacity.root.default.a.a1.acl_submit_applications=*\n" |
| "yarn.scheduler.capacity.root.default.a.a1.capacity=75\n" |
| "yarn.scheduler.capacity.root.default.a.a1.maximum-capacity=100\n" |
| "yarn.scheduler.capacity.root.default.a.a1.minimum-user-limit-percent=100\n" |
| "yarn.scheduler.capacity.root.default.a.a1.ordering-policy=fifo\n" |
| "yarn.scheduler.capacity.root.default.a.a1.state=RUNNING\n" |
| "yarn.scheduler.capacity.root.default.a.a1.user-limit-factor=1\n" |
| "yarn.scheduler.capacity.root.default.a.llap.acl_administer_queue=*\n" |
| "yarn.scheduler.capacity.root.default.a.llap.acl_submit_applications=*\n" |
| "yarn.scheduler.capacity.root.default.a.llap.capacity=25\n" |
| "yarn.scheduler.capacity.root.default.a.llap.maximum-capacity=25\n" |
| "yarn.scheduler.capacity.root.default.a.llap.minimum-user-limit-percent=100\n" |
| "yarn.scheduler.capacity.root.default.a.llap.ordering-policy=fifo\n" |
| "yarn.scheduler.capacity.root.default.a.llap.state=RUNNING\n" |
| "yarn.scheduler.capacity.root.default.a.llap.user-limit-factor=1\n" |
| "yarn.scheduler.capacity.root.default.a.acl_administer_queue=*\n" |
| "yarn.scheduler.capacity.root.default.a.acl_submit_applications=*\n" |
| "yarn.scheduler.capacity.root.default.a.capacity=0\n" |
| "yarn.scheduler.capacity.root.default.a.maximum-capacity=0\n" |
| "yarn.scheduler.capacity.root.default.a.minimum-user-limit-percent=100\n" |
| "yarn.scheduler.capacity.root.default.a.ordering-policy=fifo\n" |
| "yarn.scheduler.capacity.root.default.a.queues=a1,llap\n" |
| "yarn.scheduler.capacity.root.default.a.state=RUNNING\n" |
| "yarn.scheduler.capacity.root.default.a.user-limit-factor=1\n" |
| "yarn.scheduler.capacity.root.default.acl_submit_applications=*\n" |
| "yarn.scheduler.capacity.root.default.b.acl_administer_queue=*\n" |
| "yarn.scheduler.capacity.root.default.b.acl_submit_applications=*\n" |
| "yarn.scheduler.capacity.root.default.b.capacity=100\n" |
| "yarn.scheduler.capacity.root.default.b.maximum-capacity=100\n" |
| "yarn.scheduler.capacity.root.default.b.minimum-user-limit-percent=100\n" |
| "yarn.scheduler.capacity.root.default.b.ordering-policy=fifo\n" |
| "yarn.scheduler.capacity.root.default.b.state=STOPPED\n" |
| "yarn.scheduler.capacity.root.default.b.user-limit-factor=1\n" |
| "yarn.scheduler.capacity.root.default.capacity=100\n" |
| "yarn.scheduler.capacity.root.default.maximum-capacity=100\n" |
| "yarn.scheduler.capacity.root.default.queues=a,b\n" |
| "yarn.scheduler.capacity.root.default.state=RUNNING\n" |
| "yarn.scheduler.capacity.root.default.user-limit-factor=1\n" |
| "yarn.scheduler.capacity.root.queues=default" |
| } |
| }, |
| "hive-interactive-env": |
| { |
| 'properties': { |
| 'enable_hive_interactive': 'true', |
| 'llap_queue_capacity':'50' |
| } |
| }, |
| "hive-interactive-site": |
| { |
| 'properties': { |
| 'hive.llap.daemon.queue.name': 'default.b', |
| 'hive.server2.tez.sessions.per.default.queue': '1' |
| } |
| }, |
| "hive-env": |
| { |
| 'properties': { |
| 'hive_user': 'hive' |
| } |
| }, |
| "yarn-site": { |
| "properties": { |
| "yarn.scheduler.minimum-allocation-mb": "2048", |
| "yarn.nodemanager.resource.memory-mb": "204800", |
| "yarn.nodemanager.resource.cpu-vcores": '3' |
| } |
| }, |
| "tez-site": { |
| "properties": { |
| "tez.am.resource.memory.mb": "1024" |
| } |
| }, |
| "hive-site": |
| { |
| 'properties': { |
| 'hive.tez.container.size': '1024' |
| } |
| }, |
| } |
| } |
| |
| clusterData = { |
| "cpu": 4, |
| "mapMemory": 30000, |
| "amMemory": 20000, |
| "reduceMemory": 20560, |
| "containers": 30, |
| "ramPerContainer": 512, |
| "referenceNodeManagerHost" : { |
| "total_mem" : 10240 * 1024 |
| } |
| } |
| |
| configurations = { |
| } |
| self.stackAdvisor.recommendYARNConfigurations(configurations, clusterData, services, self.hosts) |
| |
| self.assertEqual(configurations['hive-interactive-env']['properties']['num_llap_nodes'], '0') |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.daemon.yarn.container.mb'], '2048') |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.daemon.num.executors'], '0') |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.io.threadpool.size'], '0') |
| |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.llap.io.memory.size'], '0') |
| self.assertTrue('hive.llap.io.enabled' not in configurations['hive-interactive-site']['properties']) |
| |
| self.assertEqual(configurations['hive-interactive-env']['properties']['llap_heap_size'], '0') |
| |
| self.assertEqual(configurations['hive-interactive-env']['properties']['slider_am_container_mb'], '1024') |
| self.assertEquals(configurations['hive-interactive-env']['property_attributes']['llap_queue_capacity'], |
| {'visible': 'false'}) |
| |
| self.assertTrue('tez.am.resource.memory.mb' not in configurations['tez-interactive-site']['properties']) |
| |
| |
| |
| |
| |
| |
| |
| # Test 32: (1). only 'default' queue exists at root level in capacity-scheduler, and |
| # 'capacity-scheduler' configs are passed-in as single "/n" separated string and |
| # Expected : 'hive.llap.daemon.queue.name' property attributes getting set with current YARN leaf queues. |
| # 'hive.server2.tez.default.queues' value getting set to value of 'hive.llap.daemon.queue.name' (llap). |
| def test_recommendHIVEConfigurations_for_llap_queue_prop_attributes_1(self): |
| services = { |
| "Versions": { |
| "parent_stack_version": "2.4", |
| "stack_name": "HDP", |
| "stack_version": "2.5", |
| "stack_hierarchy": { |
| "stack_name": "HDP", |
| "stack_versions": ["2.4", "2.3", "2.2", "2.1", "2.0.6"] |
| } |
| }, |
| "services": [{ |
| "StackServices": { |
| "service_name": "YARN", |
| }, |
| "components": [ |
| { |
| "StackServiceComponents": { |
| "component_name": "NODEMANAGER", |
| "hostnames": ["c6401.ambari.apache.org"] |
| } |
| } |
| ] |
| }, { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE", |
| "StackServices": { |
| "service_name": "HIVE", |
| "service_version": "1.2.1.2.5", |
| "stack_name": "HDP", |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE/components/HIVE_SERVER_INTERACTIVE", |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "bulk_commands_display_name": "", |
| "bulk_commands_master_component_name": "", |
| "cardinality": "0-1", |
| "component_category": "MASTER", |
| "component_name": "HIVE_SERVER_INTERACTIVE", |
| "custom_commands": ["RESTART_LLAP"], |
| "decommission_allowed": "false", |
| "display_name": "HiveServer2 Interactive", |
| "has_bulk_commands_definition": "false", |
| "is_client": "false", |
| "is_master": "true", |
| "reassign_allowed": "false", |
| "recovery_enabled": "false", |
| "service_name": "HIVE", |
| "stack_name": "HDP", |
| "stack_version": "2.5", |
| "hostnames": ["c6401.ambari.apache.org"] |
| }, |
| "dependencies": [] |
| }, |
| { |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "cardinality": "1+", |
| "component_category": "SLAVE", |
| "component_name": "NODEMANAGER", |
| "display_name": "NodeManager", |
| "is_client": "false", |
| "is_master": "false", |
| "hostnames": [ |
| "c6401.ambari.apache.org" |
| ] |
| }, |
| "dependencies": [] |
| }, |
| ] |
| } |
| ], |
| "changed-configurations": [ |
| { |
| u'old_value': u'false', |
| u'type': u'hive-interactive-env', |
| u'name': u'enable_hive_interactive' |
| } |
| ], |
| "configurations": { |
| "capacity-scheduler": { |
| "properties": { |
| "capacity-scheduler": "yarn.scheduler.capacity.root.queues=default\n" |
| "yarn.scheduler.capacity.root.default.user-limit-factor=1\n" |
| "yarn.scheduler.capacity.root.default.state=RUNNING\n" |
| "yarn.scheduler.capacity.root.default.maximum-capacity=100\n" |
| "yarn.scheduler.capacity.root.default.capacity=100\n" |
| "yarn.scheduler.capacity.root.default.acl_submit_applications=*\n" |
| "yarn.scheduler.capacity.root.capacity=100\n" |
| "yarn.scheduler.capacity.root.acl_administer_queue=*\n" |
| "yarn.scheduler.capacity.root.accessible-node-labels=*\n" |
| "yarn.scheduler.capacity.node-locality-delay=40\n" |
| "yarn.scheduler.capacity.maximum-applications=10000\n" |
| "yarn.scheduler.capacity.maximum-am-resource-percent=1\n" |
| "yarn.scheduler.capacity.queue-mappings-override.enable=false\n" |
| } |
| }, |
| "hive-interactive-env": |
| { |
| 'properties': { |
| 'enable_hive_interactive': 'true', |
| 'llap_queue_capacity':'50', |
| 'num_llap_nodes' : '1' |
| } |
| }, |
| "hive-interactive-site": |
| { |
| 'properties': { |
| 'hive.llap.daemon.queue.name': 'llap', |
| 'hive.server2.tez.sessions.per.default.queue': '1', |
| 'hive.llap.daemon.num.executors' : '1', |
| 'hive.llap.daemon.yarn.container.mb' : '10240', |
| 'hive.llap.io.memory.size' : '512' |
| } |
| }, |
| "hive-env": |
| { |
| 'properties': { |
| 'hive_user': 'hive' |
| } |
| }, |
| "yarn-site": { |
| "properties": { |
| "yarn.scheduler.minimum-allocation-mb": "2048", |
| "yarn.nodemanager.resource.memory-mb": "204800", |
| "yarn.nodemanager.resource.cpu-vcores": '3' |
| } |
| }, |
| "tez-interactive-site": { |
| "properties": { |
| "tez.am.resource.memory.mb": "1024" |
| } |
| }, |
| "hive-site": |
| { |
| 'properties': { |
| 'hive.tez.container.size': '1024' |
| } |
| }, |
| "tez-site": { |
| "properties": { |
| "tez.am.resource.memory.mb": "1024" |
| } |
| }, |
| } |
| } |
| |
| |
| clusterData = { |
| "cpu": 4, |
| "mapMemory": 30000, |
| "amMemory": 20000, |
| "reduceMemory": 20560, |
| "containers": 3, |
| "ramPerContainer": 82240, |
| "referenceNodeManagerHost" : { |
| "total_mem" : 328960 * 1024 |
| } |
| } |
| |
| configurations = { |
| } |
| |
| self.stackAdvisor.recommendHIVEConfigurations(configurations, clusterData, services, self.hosts) |
| self.assertEquals(configurations['hive-interactive-site']['properties']['hive.llap.daemon.queue.name'], |
| self.expected_hive_interactive_site_llap['hive-interactive-site']['properties']['hive.llap.daemon.queue.name']) |
| self.assertEquals(configurations['hive-interactive-site']['properties']['hive.server2.tez.default.queues'], 'llap') |
| self.assertEquals(configurations['hive-interactive-env']['property_attributes']['llap_queue_capacity'], |
| {'maximum': '100', 'minimum': '20', 'visible': 'true'}) |
| |
| |
| |
| |
| |
| |
| |
| # Test 33: (1). More than 2 queues at leaf level exists in capacity-scheduler (one queue is named 'llap') and |
| # 'capacity-scheduler' configs are passed-in as single "/n" separated string |
| # Expected : 'hive.llap.daemon.queue.name' property attributes getting set with current YARN leaf queues. |
| # 'hive.server2.tez.default.queues' value getting set to value of 'hive.llap.daemon.queue.name' (llap). |
| def test_recommendHIVEConfigurations_for_llap_queue_prop_attributes_2(self): |
| services= { |
| "Versions": { |
| "parent_stack_version": "2.4", |
| "stack_name": "HDP", |
| "stack_version": "2.5", |
| "stack_hierarchy": { |
| "stack_name": "HDP", |
| "stack_versions": ["2.4", "2.3", "2.2", "2.1", "2.0.6"] |
| } |
| }, |
| "services": [{ |
| "StackServices": { |
| "service_name": "YARN", |
| }, |
| "components": [ |
| { |
| "StackServiceComponents": { |
| "component_name": "NODEMANAGER", |
| "hostnames": ["c6401.ambari.apache.org"] |
| } |
| } |
| ] |
| }, { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE", |
| "StackServices": { |
| "service_name": "HIVE", |
| "service_version": "1.2.1.2.5", |
| "stack_name": "HDP", |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE/components/HIVE_SERVER_INTERACTIVE", |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "bulk_commands_display_name": "", |
| "bulk_commands_master_component_name": "", |
| "cardinality": "0-1", |
| "component_category": "MASTER", |
| "component_name": "HIVE_SERVER_INTERACTIVE", |
| "custom_commands": ["RESTART_LLAP"], |
| "decommission_allowed": "false", |
| "display_name": "HiveServer2 Interactive", |
| "has_bulk_commands_definition": "false", |
| "is_client": "false", |
| "is_master": "true", |
| "reassign_allowed": "false", |
| "recovery_enabled": "false", |
| "service_name": "HIVE", |
| "stack_name": "HDP", |
| "stack_version": "2.5", |
| "hostnames": ["c6401.ambari.apache.org"] |
| }, |
| "dependencies": [] |
| } |
| ] |
| } |
| ], |
| "changed-configurations": [ |
| { |
| u'old_value': u'', |
| u'type': u'', |
| u'name': u'' |
| } |
| ], |
| "configurations": { |
| "capacity-scheduler": { |
| "properties": { |
| "capacity-scheduler": "yarn.scheduler.capacity.maximum-am-resource-percent=0.2\n" |
| "yarn.scheduler.capacity.maximum-applications=10000\n" |
| "yarn.scheduler.capacity.node-locality-delay=40\n" |
| "yarn.scheduler.capacity.queue-mappings-override.enable=false\n" |
| "yarn.scheduler.capacity.resource-calculator=org.apache.hadoop.yarn.util.resource.DefaultResourceCalculator\n" |
| "yarn.scheduler.capacity.root.accessible-node-labels=*\n" |
| "yarn.scheduler.capacity.root.acl_administer_queue=*\n" |
| "yarn.scheduler.capacity.root.capacity=100\n" |
| "yarn.scheduler.capacity.root.default.a.a1.acl_administer_queue=*\n" |
| "yarn.scheduler.capacity.root.default.a.a1.acl_submit_applications=*\n" |
| "yarn.scheduler.capacity.root.default.a.a1.capacity=75\n" |
| "yarn.scheduler.capacity.root.default.a.a1.maximum-capacity=100\n" |
| "yarn.scheduler.capacity.root.default.a.a1.minimum-user-limit-percent=100\n" |
| "yarn.scheduler.capacity.root.default.a.a1.ordering-policy=fifo\n" |
| "yarn.scheduler.capacity.root.default.a.a1.state=RUNNING\n" |
| "yarn.scheduler.capacity.root.default.a.a1.user-limit-factor=1\n" |
| "yarn.scheduler.capacity.root.default.a.llap.acl_administer_queue=*\n" |
| "yarn.scheduler.capacity.root.default.a.llap.acl_submit_applications=*\n" |
| "yarn.scheduler.capacity.root.default.a.llap.capacity=25\n" |
| "yarn.scheduler.capacity.root.default.a.llap.maximum-capacity=25\n" |
| "yarn.scheduler.capacity.root.default.a.llap.minimum-user-limit-percent=100\n" |
| "yarn.scheduler.capacity.root.default.a.llap.ordering-policy=fifo\n" |
| "yarn.scheduler.capacity.root.default.a.llap.state=RUNNING\n" |
| "yarn.scheduler.capacity.root.default.a.llap.user-limit-factor=1\n" |
| "yarn.scheduler.capacity.root.default.a.acl_administer_queue=*\n" |
| "yarn.scheduler.capacity.root.default.a.acl_submit_applications=*\n" |
| "yarn.scheduler.capacity.root.default.a.capacity=50\n" |
| "yarn.scheduler.capacity.root.default.a.maximum-capacity=100\n" |
| "yarn.scheduler.capacity.root.default.a.minimum-user-limit-percent=100\n" |
| "yarn.scheduler.capacity.root.default.a.ordering-policy=fifo\n" |
| "yarn.scheduler.capacity.root.default.a.queues=a1,llap\n" |
| "yarn.scheduler.capacity.root.default.a.state=RUNNING\n" |
| "yarn.scheduler.capacity.root.default.a.user-limit-factor=1\n" |
| "yarn.scheduler.capacity.root.default.acl_submit_applications=*\n" |
| "yarn.scheduler.capacity.root.default.b.acl_administer_queue=*\n" |
| "yarn.scheduler.capacity.root.default.b.acl_submit_applications=*\n" |
| "yarn.scheduler.capacity.root.default.b.capacity=50\n" |
| "yarn.scheduler.capacity.root.default.b.maximum-capacity=50\n" |
| "yarn.scheduler.capacity.root.default.b.minimum-user-limit-percent=100\n" |
| "yarn.scheduler.capacity.root.default.b.ordering-policy=fifo\n" |
| "yarn.scheduler.capacity.root.default.b.state=RUNNING\n" |
| "yarn.scheduler.capacity.root.default.b.user-limit-factor=1\n" |
| "yarn.scheduler.capacity.root.default.capacity=100\n" |
| "yarn.scheduler.capacity.root.default.maximum-capacity=100\n" |
| "yarn.scheduler.capacity.root.default.queues=a,b\n" |
| "yarn.scheduler.capacity.root.default.state=RUNNING\n" |
| "yarn.scheduler.capacity.root.default.user-limit-factor=1\n" |
| "yarn.scheduler.capacity.root.queues=default" |
| } |
| }, |
| "hive-interactive-env": |
| { |
| 'properties': { |
| 'enable_hive_interactive': 'true', |
| 'llap_queue_capacity':'0', |
| 'num_llap_nodes': '2' |
| } |
| }, |
| "hive-env": |
| { |
| 'properties': { |
| 'hive_user': 'hive' |
| } |
| }, |
| "yarn-site": { |
| "properties": { |
| "yarn.scheduler.minimum-allocation-mb": "2048", |
| "yarn.nodemanager.resource.memory-mb": "204800", |
| "yarn.nodemanager.resource.cpu-vcores": '3' |
| } |
| }, |
| "tez-site": { |
| "properties": { |
| "tez.am.resource.memory.mb": "1024", |
| } |
| }, |
| "hive-site": |
| { |
| 'properties': { |
| 'hive.tez.container.size': '1024' |
| } |
| }, |
| "hive-interactive-site": |
| { |
| 'properties': { |
| 'hive.llap.daemon.queue.name': 'llap', |
| 'hive.server2.tez.sessions.per.default.queue': '1', |
| 'hive.llap.daemon.num.executors' : '1', |
| 'hive.llap.daemon.yarn.container.mb' : '8192', |
| 'hive.llap.io.memory.size' : '0' |
| } |
| }, |
| } |
| } |
| |
| clusterData = { |
| "cpu": 4, |
| "mapMemory": 30000, |
| "amMemory": 20000, |
| "reduceMemory": 20560, |
| "containers": 3, |
| "ramPerContainer": 82240, |
| "referenceNodeManagerHost" : { |
| "total_mem" : 328960 * 1024 |
| } |
| } |
| |
| configurations = { |
| } |
| self.stackAdvisor.recommendHIVEConfigurations(configurations, clusterData, services, self.hosts) |
| self.assertEquals(configurations['hive-interactive-site']['property_attributes']['hive.llap.daemon.queue.name'], |
| self.expected_hive_interactive_site_prop_attr_as_a1_b_llap['hive-interactive-site']['property_attributes']['hive.llap.daemon.queue.name']) |
| self.assertEqual(configurations['hive-interactive-site']['properties']['hive.server2.tez.default.queues'], 'llap') |
| self.assertEquals(configurations['hive-interactive-env']['property_attributes']['llap_queue_capacity'], |
| {'visible': 'false'}) |
| |
| |
| |
| |
| |
| |
| |
| # Test 34: (1). only 'default' queue exists at root level in capacity-scheduler, and |
| # 'capacity-scheduler' configs are passed-in as single "/n" separated string and |
| # change in 'hive.llap.daemon.queue.name' value detected. |
| # Expected : 'hive.llap.daemon.queue.name' property attributes getting set with current YARN leaf queues. |
| # 'hive.server2.tez.default.queues' value getting set to value of 'hive.llap.daemon.queue.name' (default). |
| def test_recommendHIVEConfigurations_for_llap_queue_prop_attributes_3(self): |
| services = { |
| "Versions": { |
| "parent_stack_version": "2.4", |
| "stack_name": "HDP", |
| "stack_version": "2.5", |
| "stack_hierarchy": { |
| "stack_name": "HDP", |
| "stack_versions": ["2.4", "2.3", "2.2", "2.1", "2.0.6"] |
| } |
| }, |
| "services": [{ |
| "StackServices": { |
| "service_name": "YARN", |
| }, |
| "components": [ |
| { |
| "StackServiceComponents": { |
| "component_name": "NODEMANAGER", |
| "hostnames": ["c6401.ambari.apache.org"] |
| } |
| } |
| ] |
| }, { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE", |
| "StackServices": { |
| "service_name": "HIVE", |
| "service_version": "1.2.1.2.5", |
| "stack_name": "HDP", |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "href": "/api/v1/stacks/HDP/versions/2.5/services/HIVE/components/HIVE_SERVER_INTERACTIVE", |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "bulk_commands_display_name": "", |
| "bulk_commands_master_component_name": "", |
| "cardinality": "0-1", |
| "component_category": "MASTER", |
| "component_name": "HIVE_SERVER_INTERACTIVE", |
| "custom_commands": ["RESTART_LLAP"], |
| "decommission_allowed": "false", |
| "display_name": "HiveServer2 Interactive", |
| "has_bulk_commands_definition": "false", |
| "is_client": "false", |
| "is_master": "true", |
| "reassign_allowed": "false", |
| "recovery_enabled": "false", |
| "service_name": "HIVE", |
| "stack_name": "HDP", |
| "stack_version": "2.5", |
| "hostnames": ["c6401.ambari.apache.org"] |
| }, |
| "dependencies": [] |
| }, |
| { |
| "StackServiceComponents": { |
| "advertise_version": "true", |
| "cardinality": "1+", |
| "component_category": "SLAVE", |
| "component_name": "NODEMANAGER", |
| "display_name": "NodeManager", |
| "is_client": "false", |
| "is_master": "false", |
| "hostnames": [ |
| "c6401.ambari.apache.org" |
| ] |
| }, |
| "dependencies": [] |
| }, |
| ] |
| } |
| ], |
| "changed-configurations": [ |
| { |
| u'old_value': u'llap', |
| u'type': u'hive-interactive-site', |
| u'name': u'hive.llap.daemon.queue.name' |
| } |
| ], |
| "configurations": { |
| "capacity-scheduler": { |
| "properties": { |
| "capacity-scheduler": "yarn.scheduler.capacity.root.queues=default\n" |
| "yarn.scheduler.capacity.root.default.user-limit-factor=1\n" |
| "yarn.scheduler.capacity.root.default.state=RUNNING\n" |
| "yarn.scheduler.capacity.root.default.maximum-capacity=100\n" |
| "yarn.scheduler.capacity.root.default.capacity=100\n" |
| "yarn.scheduler.capacity.root.default.acl_submit_applications=*\n" |
| "yarn.scheduler.capacity.root.capacity=100\n" |
| "yarn.scheduler.capacity.root.acl_administer_queue=*\n" |
| "yarn.scheduler.capacity.root.accessible-node-labels=*\n" |
| "yarn.scheduler.capacity.node-locality-delay=40\n" |
| "yarn.scheduler.capacity.maximum-applications=10000\n" |
| "yarn.scheduler.capacity.maximum-am-resource-percent=1\n" |
| "yarn.scheduler.capacity.queue-mappings-override.enable=false\n" |
| } |
| }, |
| "hive-interactive-env": |
| { |
| 'properties': { |
| 'enable_hive_interactive': 'true', |
| 'llap_queue_capacity':'50', |
| 'num_llap_nodes': '1' |
| } |
| }, |
| "hive-interactive-site": |
| { |
| 'properties': { |
| 'hive.llap.daemon.queue.name': 'default', |
| 'hive.server2.tez.sessions.per.default.queue': '1', |
| 'hive.llap.daemon.num.executors' : '1', |
| 'hive.llap.daemon.yarn.container.mb' : '4096', |
| 'hive.llap.io.memory.size' : '512' |
| } |
| }, |
| "hive-env": |
| { |
| 'properties': { |
| 'hive_user': 'hive' |
| } |
| }, |
| "yarn-site": { |
| "properties": { |
| "yarn.scheduler.minimum-allocation-mb": "2048", |
| "yarn.nodemanager.resource.memory-mb": "204800", |
| "yarn.nodemanager.resource.cpu-vcores": '3' |
| } |
| }, |
| "tez-site": { |
| "properties": { |
| "tez.am.resource.memory.mb": "1024" |
| } |
| }, |
| "hive-site": |
| { |
| 'properties': { |
| 'hive.tez.container.size': '1024' |
| } |
| }, |
| } |
| } |
| |
| |
| clusterData = { |
| "cpu": 4, |
| "mapMemory": 30000, |
| "amMemory": 20000, |
| "reduceMemory": 20560, |
| "containers": 3, |
| "ramPerContainer": 82240, |
| "referenceNodeManagerHost" : { |
| "total_mem" : 328960 * 1024 |
| } |
| } |
| |
| configurations = { |
| } |
| self.stackAdvisor.recommendHIVEConfigurations(configurations, clusterData, services, self.hosts) |
| self.assertEquals(configurations['hive-interactive-site']['properties']['hive.llap.daemon.queue.name'], |
| self.expected_hive_interactive_site_default['hive-interactive-site']['properties']['hive.llap.daemon.queue.name']) |
| self.assertEquals(configurations['hive-interactive-site']['properties']['hive.server2.tez.default.queues'], 'default') |
| |
| |
| |
| |
| |
| |
| |
| def test_recommendAtlasConfigurations(self): |
| self.maxDiff = None |
| configurations = { |
| "application-properties": { |
| "properties": { |
| "atlas.graph.index.search.solr.zookeeper-url": "", |
| "atlas.audit.hbase.zookeeper.quorum": "", |
| "atlas.graph.storage.hostname": "", |
| "atlas.kafka.bootstrap.servers": "", |
| "atlas.kafka.zookeeper.connect": "" |
| } |
| }, |
| "logsearch-solr-env": { |
| "properties": { |
| "logsearch_solr_znode": "/logsearch" |
| } |
| }, |
| 'ranger-atlas-plugin-properties': { |
| 'properties': { |
| 'ranger-atlas-plugin-enabled':'No' |
| } |
| } |
| } |
| clusterData = { |
| "cpu": 4, |
| "mapMemory": 3000, |
| "amMemory": 2000, |
| "reduceMemory": 2056, |
| "containers": 3, |
| "ramPerContainer": 256 |
| } |
| expected = { |
| 'application-properties': { |
| 'properties': { |
| 'atlas.graph.index.search.solr.zookeeper-url': 'c6401.ambari.apache.org:2181/logsearch', |
| "atlas.audit.hbase.zookeeper.quorum": "c6401.ambari.apache.org", |
| "atlas.graph.storage.hostname": "c6401.ambari.apache.org", |
| "atlas.kafka.bootstrap.servers": "c6401.ambari.apache.org:6667", |
| "atlas.kafka.zookeeper.connect": "c6401.ambari.apache.org", |
| "atlas.authorizer.impl": "ranger", |
| "atlas.rest.address": "http://c6401.ambari.apache.org:21000" |
| } |
| }, |
| "logsearch-solr-env": { |
| "properties": { |
| "logsearch_solr_znode": "/logsearch" |
| } |
| }, |
| 'ranger-atlas-plugin-properties': { |
| 'properties': { |
| 'ranger-atlas-plugin-enabled':'Yes' |
| } |
| }, |
| 'atlas-env': {'properties': {}} |
| } |
| services = { |
| "Versions": { |
| "parent_stack_version": "2.4", |
| "stack_name": "HDP", |
| "stack_version": "2.5", |
| "stack_hierarchy": { |
| "stack_name": "HDP", |
| "stack_versions": ["2.4", "2.3", "2.2", "2.1", "2.0.6"] |
| } |
| }, |
| "services": [ |
| { |
| "href": "/api/v1/stacks/HDP/versions/2.2/services/LOGSEARCH", |
| "StackServices": { |
| "service_name": "LOGSEARCH", |
| "service_version": "2.6.0.2.2", |
| "stack_name": "HDP", |
| "stack_version": "2.3" |
| }, |
| "components": [ |
| { |
| "StackServiceComponents": { |
| "advertise_version": "false", |
| "cardinality": "1", |
| "component_category": "MASTER", |
| "component_name": "LOGSEARCH_SOLR", |
| "display_name": "solr", |
| "is_client": "false", |
| "is_master": "true", |
| "hostnames": ["c6401.ambari.apache.org"] |
| }, |
| "dependencies": [] |
| } |
| ] |
| }, |
| { |
| "href": "/api/v1/stacks/HDP/versions/2.2/services/ZOOKEEPER", |
| "StackServices": { |
| "service_name": "ZOOKEEPER", |
| "service_version": "2.6.0.2.2", |
| "stack_name": "HDP", |
| "stack_version": "2.3" |
| }, |
| "components": [ |
| { |
| "StackServiceComponents": { |
| "advertise_version": "false", |
| "cardinality": "1", |
| "component_category": "MASTER", |
| "component_name": "ZOOKEEPER_SERVER", |
| "display_name": "zk", |
| "is_client": "false", |
| "is_master": "true", |
| "hostnames": ["c6401.ambari.apache.org"] |
| }, |
| "dependencies": [] |
| } |
| ] |
| }, |
| { |
| "href": "/api/v1/stacks/HDP/versions/2.2/services/HBASE", |
| "StackServices": { |
| "service_name": "HBASE", |
| "service_version": "2.6.0.2.2", |
| "stack_name": "HDP", |
| "stack_version": "2.3" |
| }, |
| "components": [ |
| { |
| "StackServiceComponents": { |
| "advertise_version": "false", |
| "cardinality": "1", |
| "component_category": "MASTER", |
| "component_name": "HBASE_MASTER", |
| "display_name": "zk", |
| "is_client": "false", |
| "is_master": "true", |
| "hostnames": ["c6401.ambari.apache.org"] |
| }, |
| "dependencies": [] |
| } |
| ] |
| }, |
| { |
| "href": "/api/v1/stacks/HDP/versions/2.2/services/ATLAS", |
| "StackServices": { |
| "service_name": "ATLAS", |
| "service_version": "2.6.0.2.2", |
| "stack_name": "HDP", |
| "stack_version": "2.3" |
| }, |
| "components": [ |
| { |
| "StackServiceComponents": { |
| "advertise_version": "false", |
| "cardinality": "1", |
| "component_category": "MASTER", |
| "component_name": "ATLAS_SERVER", |
| "display_name": "atlas", |
| "is_client": "false", |
| "is_master": "true", |
| "hostnames": ["c6401.ambari.apache.org"] |
| }, |
| "dependencies": [] |
| } |
| ] |
| }, |
| { |
| "href": "/api/v1/stacks/HDP/versions/2.2/services/KAFKA", |
| "StackServices": { |
| "service_name": "KAFKA", |
| "service_version": "2.6.0.2.2", |
| "stack_name": "HDP", |
| "stack_version": "2.3" |
| }, |
| "components": [ |
| { |
| "StackServiceComponents": { |
| "advertise_version": "false", |
| "cardinality": "1", |
| "component_category": "MASTER", |
| "component_name": "KAFKA_BROKER", |
| "display_name": "atlas", |
| "is_client": "false", |
| "is_master": "true", |
| "hostnames": ["c6401.ambari.apache.org"] |
| }, |
| "dependencies": [] |
| } |
| ] |
| }, |
| ], |
| "configurations": { |
| "application-properties": { |
| "properties": { |
| "atlas.graph.index.search.solr.zookeeper-url": "", |
| "atlas.audit.hbase.zookeeper.quorum": "", |
| "atlas.graph.storage.hostname": "", |
| "atlas.kafka.bootstrap.servers": "", |
| "atlas.kafka.zookeeper.connect": "" |
| } |
| }, |
| "logsearch-solr-env": { |
| "properties": { |
| "logsearch_solr_znode": "/logsearch" |
| } |
| }, |
| "hbase-site": { |
| "properties": { |
| "hbase.zookeeper.quorum": "c6401.ambari.apache.org" |
| } |
| }, |
| "kafka-broker": { |
| "properties": { |
| "zookeeper.connect": "c6401.ambari.apache.org", |
| "port": "6667" |
| } |
| }, |
| 'ranger-atlas-plugin-properties': { |
| 'properties': { |
| 'ranger-atlas-plugin-enabled':'No' |
| } |
| } |
| }, |
| "changed-configurations": [ ] |
| |
| } |
| hosts = { |
| "items" : [ |
| { |
| "href" : "/api/v1/hosts/c6401.ambari.apache.org", |
| "Hosts" : { |
| "cpu_count" : 1, |
| "host_name" : "c6401.ambari.apache.org", |
| "os_arch" : "x86_64", |
| "os_type" : "centos6", |
| "ph_cpu_count" : 1, |
| "public_host_name" : "c6401.ambari.apache.org", |
| "rack_info" : "/default-rack", |
| "total_mem" : 1922680 |
| } |
| } |
| ] |
| } |
| |
| self.stackAdvisor.recommendAtlasConfigurations(configurations, clusterData, services, hosts) |
| # test for Ranger Atlas plugin disabled |
| self.assertEquals(configurations['application-properties']['properties']['atlas.authorizer.impl'], 'simple', 'Test atlas.authorizer.impl with Ranger Atlas plugin is disabled ') |
| |
| configurations['ranger-atlas-plugin-properties']['properties']['ranger-atlas-plugin-enabled'] = 'Yes' |
| # configurations['application-properties']['properties']['atlas.authorizer.impl'] = 'ranger' |
| self.stackAdvisor.recommendAtlasConfigurations(configurations,clusterData,services,hosts) |
| self.assertEquals(configurations, expected) |
| |
| services['ambari-server-properties'] = {'java.home': '/usr/jdk64/jdk1.7.3_23'} |
| self.stackAdvisor.recommendAtlasConfigurations(configurations, clusterData, services, hosts) |
| self.assertEquals(configurations, expected) |
| |
| def test_validationAtlasConfigs(self): |
| servicesInfo = [ |
| { |
| "name": "ATLAS", |
| "components": [] |
| } |
| ] |
| services = self.prepareServices(servicesInfo) |
| services["configurations"] = {"application-properties": {"properties": {"atlas.graph.storage.backend": "hbase", |
| "atlas.authentication.method.ldap.type": "", |
| "atlas.graph.index.search.backend": "", |
| "atlas.kafka.bootstrap.servers": "", |
| "atlas.kafka.zookeeper.connect": "", |
| "atlas.graph.storage.hostname": "", |
| "atlas.audit.hbase.zookeeper.quorum": "" |
| }}} |
| hosts = self.prepareHosts([]) |
| result = self.stackAdvisor.validateConfigurations(services, hosts) |
| expectedItems = [ |
| {'message': 'If KAFKA is not installed then the Kafka bootstrap servers configuration must be specified.', |
| 'level': 'ERROR'}, |
| {'message': 'If KAFKA is not installed then the Kafka zookeeper quorum configuration must be specified.', |
| 'level': 'ERROR'}, |
| { |
| 'message': 'Atlas is not configured to use the HBase installed in this cluster. If you would like Atlas to use another HBase instance, please configure this property and HBASE_CONF_DIR variable in atlas-env appropriately.', |
| 'level': 'ERROR'}, |
| {'message': 'If HBASE is not installed then the audit hbase zookeeper quorum configuration must be specified.', |
| 'level': 'ERROR'} |
| ] |
| self.assertValidationResult(expectedItems, result) |
| services["configurations"]["hbase-site"] = {"properties": {"hbase.zookeeper.quorum": "h1",}} |
| services["configurations"]["application-properties"]["properties"]["atlas.kafka.bootstrap.servers"] = "test" |
| services["configurations"]["application-properties"]["properties"]["atlas.kafka.zookeeper.connect"] = "test" |
| expectedItems = [ |
| {'message': 'If HBASE is not installed then the hbase zookeeper quorum configuration must be specified.', |
| 'level': 'ERROR'}, |
| {'message': 'If HBASE is not installed then the audit hbase zookeeper quorum configuration must be specified.', |
| 'level': 'ERROR'} |
| ] |
| result = self.stackAdvisor.validateConfigurations(services, hosts) |
| self.assertValidationResult(expectedItems, result) |
| services["configurations"]["application-properties"]["properties"]["atlas.graph.storage.hostname"] = "h1" |
| expectedItems = [ |
| { |
| 'message': 'Atlas is configured to use the HBase installed in this cluster. If you would like Atlas to use another HBase instance, please configure this property and HBASE_CONF_DIR variable in atlas-env appropriately.', |
| 'level': 'WARN'}, |
| {'message': 'If HBASE is not installed then the audit hbase zookeeper quorum configuration must be specified.', |
| 'level': 'ERROR'} |
| ] |
| result = self.stackAdvisor.validateConfigurations(services, hosts) |
| self.assertValidationResult(expectedItems, result) |
| |
| def test_phoenixQueryServerSecureConfigsAppendProxyuser(self): |
| self.maxDiff = None |
| phoenix_query_server_hosts = ["c6401.ambari.apache.org", "c6402.ambari.apache.org"] |
| # Starting configuration |
| configurations = { |
| "cluster-env": { |
| "properties": { |
| "security_enabled": "true" |
| } |
| }, |
| "core-site": { |
| "properties": { |
| "hadoop.proxyuser.HTTP.hosts": "c6401.ambari.apache.org", |
| } |
| }, |
| "hbase-site": { |
| "properties": {} |
| } |
| } |
| # Expected configuration after the recommendation |
| expected_configuration = { |
| "cluster-env": { |
| "properties": { |
| "security_enabled": "true" |
| } |
| }, |
| "core-site": { |
| "properties": { |
| "hadoop.proxyuser.HTTP.hosts": "c6401.ambari.apache.org,c6402.ambari.apache.org", |
| } |
| }, |
| "hbase-site": { |
| "properties": { |
| "hbase.master.ui.readonly": "true" |
| } |
| } |
| } |
| |
| clusterData = { |
| "hbaseRam": 4096, |
| } |
| services = { |
| "Versions": { |
| "parent_stack_version": "2.4", |
| "stack_name": "HDP", |
| "stack_version": "2.5", |
| "stack_hierarchy": { |
| "stack_name": "HDP", |
| "stack_versions": ["2.4", "2.3", "2.2", "2.1", "2.0.6"] |
| } |
| }, |
| "services": [ |
| { |
| "href": "/api/v1/stacks/HDP/versions/2.4/services/HBASE", |
| "StackServices": { |
| "service_name": "HBASE", |
| }, |
| "Versions": { |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "StackServiceComponents": { |
| "component_name": "PHOENIX_QUERY_SERVER", |
| "hostnames": phoenix_query_server_hosts |
| } |
| } |
| ] |
| }, |
| { |
| "StackServices": { |
| "service_name": "KERBEROS", |
| }, |
| }, |
| ], |
| "configurations": configurations, |
| "changed-configurations": [ ] |
| |
| } |
| hosts = { |
| "items" : [ |
| { |
| "href" : "/api/v1/hosts/c6401.ambari.apache.org", |
| "Hosts" : { |
| "cpu_count" : 1, |
| "host_name" : "c6401.ambari.apache.org", |
| "os_arch" : "x86_64", |
| "os_type" : "centos6", |
| "ph_cpu_count" : 1, |
| "public_host_name" : "c6401.ambari.apache.org", |
| "rack_info" : "/default-rack", |
| "total_mem" : 1922680 |
| } |
| }, { |
| "href" : "/api/v1/hosts/c6402.ambari.apache.org", |
| "Hosts" : { |
| "cpu_count" : 1, |
| "host_name" : "c6402.ambari.apache.org", |
| "os_arch" : "x86_64", |
| "os_type" : "centos6", |
| "ph_cpu_count" : 1, |
| "public_host_name" : "c6402.ambari.apache.org", |
| "rack_info" : "/default-rack", |
| "total_mem" : 1922680 |
| } |
| }, { |
| "href" : "/api/v1/hosts/c6403.ambari.apache.org", |
| "Hosts" : { |
| "cpu_count" : 1, |
| "host_name" : "c6403.ambari.apache.org", |
| "os_arch" : "x86_64", |
| "os_type" : "centos6", |
| "ph_cpu_count" : 1, |
| "public_host_name" : "c6403.ambari.apache.org", |
| "rack_info" : "/default-rack", |
| "total_mem" : 1922680 |
| } |
| } |
| ] |
| } |
| |
| self.stackAdvisor.recommendHBASEConfigurations(configurations, clusterData, services, hosts) |
| |
| self.assertTrue('core-site' in configurations) |
| self.assertTrue('properties' in configurations['core-site']) |
| # Avoid an unnecessary sort in the stack advisor, sort here for easy comparison |
| actualHosts = configurations['core-site']['properties']['hadoop.proxyuser.HTTP.hosts'] |
| expectedHosts = expected_configuration['core-site']['properties']['hadoop.proxyuser.HTTP.hosts'] |
| self.assertEquals(splitAndSort(actualHosts), splitAndSort(expectedHosts)) |
| # Do a simple check for hbase-site |
| self.assertTrue('hbase-site' in configurations) |
| self.assertTrue('properties' in configurations['hbase-site']) |
| self.assertEquals(configurations['hbase-site']['properties']['hbase.master.ui.readonly'], |
| expected_configuration['hbase-site']['properties']['hbase.master.ui.readonly']) |
| |
| def test_phoenixQueryServerSecureConfigsNoProxyuser(self): |
| self.maxDiff = None |
| phoenix_query_server_hosts = ["c6401.ambari.apache.org"] |
| # Starting configuration |
| configurations = { |
| "cluster-env": { |
| "properties": { |
| "security_enabled": "true" |
| } |
| }, |
| "core-site": { |
| "properties": {} |
| }, |
| "hbase-site": { |
| "properties": {} |
| } |
| } |
| # Expected configuration after the recommendation |
| expected_configuration = { |
| "cluster-env": { |
| "properties": { |
| "security_enabled": "true" |
| } |
| }, |
| "core-site": { |
| "properties": { |
| "hadoop.proxyuser.HTTP.hosts": "c6401.ambari.apache.org", |
| } |
| }, |
| "hbase-site": { |
| "properties": { |
| "hbase.master.ui.readonly": "true" |
| } |
| } |
| } |
| |
| clusterData = { |
| "hbaseRam": 4096, |
| } |
| services = { |
| "Versions": { |
| "parent_stack_version": "2.4", |
| "stack_name": "HDP", |
| "stack_version": "2.5", |
| "stack_hierarchy": { |
| "stack_name": "HDP", |
| "stack_versions": ["2.4", "2.3", "2.2", "2.1", "2.0.6"] |
| } |
| }, |
| "services": [ |
| { |
| "href": "/api/v1/stacks/HDP/versions/2.4/services/HBASE", |
| "StackServices": { |
| "service_name": "HBASE", |
| }, |
| "Versions": { |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "StackServiceComponents": { |
| "component_name": "PHOENIX_QUERY_SERVER", |
| "hostnames": phoenix_query_server_hosts |
| } |
| } |
| ] |
| }, |
| { |
| "StackServices": { |
| "service_name": "KERBEROS", |
| }, |
| }, |
| ], |
| "configurations": configurations, |
| "changed-configurations": [ ] |
| |
| } |
| hosts = { |
| "items" : [ |
| { |
| "href" : "/api/v1/hosts/c6401.ambari.apache.org", |
| "Hosts" : { |
| "cpu_count" : 1, |
| "host_name" : "c6401.ambari.apache.org", |
| "os_arch" : "x86_64", |
| "os_type" : "centos6", |
| "ph_cpu_count" : 1, |
| "public_host_name" : "c6401.ambari.apache.org", |
| "rack_info" : "/default-rack", |
| "total_mem" : 1922680 |
| } |
| }, { |
| "href" : "/api/v1/hosts/c6402.ambari.apache.org", |
| "Hosts" : { |
| "cpu_count" : 1, |
| "host_name" : "c6402.ambari.apache.org", |
| "os_arch" : "x86_64", |
| "os_type" : "centos6", |
| "ph_cpu_count" : 1, |
| "public_host_name" : "c6402.ambari.apache.org", |
| "rack_info" : "/default-rack", |
| "total_mem" : 1922680 |
| } |
| }, { |
| "href" : "/api/v1/hosts/c6403.ambari.apache.org", |
| "Hosts" : { |
| "cpu_count" : 1, |
| "host_name" : "c6403.ambari.apache.org", |
| "os_arch" : "x86_64", |
| "os_type" : "centos6", |
| "ph_cpu_count" : 1, |
| "public_host_name" : "c6403.ambari.apache.org", |
| "rack_info" : "/default-rack", |
| "total_mem" : 1922680 |
| } |
| } |
| ] |
| } |
| |
| self.stackAdvisor.recommendHBASEConfigurations(configurations, clusterData, services, hosts) |
| |
| self.assertTrue('core-site' in configurations) |
| self.assertTrue('properties' in configurations['core-site']) |
| self.assertTrue('hadoop.proxyuser.HTTP.hosts' in configurations['core-site']['properties']) |
| # Avoid an unnecessary sort in the stack advisor, sort here for easy comparison |
| actualHosts = configurations['core-site']['properties']['hadoop.proxyuser.HTTP.hosts'] |
| expectedHosts = expected_configuration['core-site']['properties']['hadoop.proxyuser.HTTP.hosts'] |
| self.assertEquals(splitAndSort(actualHosts), splitAndSort(expectedHosts)) |
| # Do a simple check for hbase-site |
| self.assertTrue('hbase-site' in configurations) |
| self.assertTrue('properties' in configurations['hbase-site']) |
| self.assertEquals(configurations['hbase-site']['properties']['hbase.master.ui.readonly'], |
| expected_configuration['hbase-site']['properties']['hbase.master.ui.readonly']) |
| |
| def test_phoenixQueryServerSecureConfigsAppendProxyuser(self): |
| self.maxDiff = None |
| phoenix_query_server_hosts = ["c6402.ambari.apache.org"] |
| # Starting configuration |
| configurations = { |
| "cluster-env": { |
| "properties": { |
| "security_enabled": "true" |
| } |
| }, |
| "core-site": { |
| "properties": { |
| "hadoop.proxyuser.HTTP.hosts": "c6401.ambari.apache.org", |
| } |
| }, |
| "hbase-site": { |
| "properties": {} |
| } |
| } |
| # Expected configuration after the recommendation |
| expected_configuration = { |
| "cluster-env": { |
| "properties": { |
| "security_enabled": "true" |
| } |
| }, |
| "core-site": { |
| "properties": { |
| "hadoop.proxyuser.HTTP.hosts": "c6401.ambari.apache.org,c6402.ambari.apache.org", |
| } |
| }, |
| "hbase-site": { |
| "properties": { |
| "hbase.master.ui.readonly": "true" |
| } |
| } |
| } |
| |
| clusterData = { |
| "hbaseRam": 4096, |
| } |
| services = { |
| "Versions": { |
| "parent_stack_version": "2.4", |
| "stack_name": "HDP", |
| "stack_version": "2.5", |
| "stack_hierarchy": { |
| "stack_name": "HDP", |
| "stack_versions": ["2.4", "2.3", "2.2", "2.1", "2.0.6"] |
| } |
| }, |
| "services": [ |
| { |
| "href": "/api/v1/stacks/HDP/versions/2.4/services/HBASE", |
| "StackServices": { |
| "service_name": "HBASE", |
| }, |
| "Versions": { |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "StackServiceComponents": { |
| "component_name": "PHOENIX_QUERY_SERVER", |
| "hostnames": phoenix_query_server_hosts |
| } |
| } |
| ] |
| }, |
| { |
| "StackServices": { |
| "service_name": "KERBEROS", |
| }, |
| }, |
| ], |
| "configurations": configurations, |
| "changed-configurations": [ ] |
| |
| } |
| hosts = { |
| "items" : [ |
| { |
| "href" : "/api/v1/hosts/c6401.ambari.apache.org", |
| "Hosts" : { |
| "cpu_count" : 1, |
| "host_name" : "c6401.ambari.apache.org", |
| "os_arch" : "x86_64", |
| "os_type" : "centos6", |
| "ph_cpu_count" : 1, |
| "public_host_name" : "c6401.ambari.apache.org", |
| "rack_info" : "/default-rack", |
| "total_mem" : 1922680 |
| } |
| }, { |
| "href" : "/api/v1/hosts/c6402.ambari.apache.org", |
| "Hosts" : { |
| "cpu_count" : 1, |
| "host_name" : "c6402.ambari.apache.org", |
| "os_arch" : "x86_64", |
| "os_type" : "centos6", |
| "ph_cpu_count" : 1, |
| "public_host_name" : "c6402.ambari.apache.org", |
| "rack_info" : "/default-rack", |
| "total_mem" : 1922680 |
| } |
| }, { |
| "href" : "/api/v1/hosts/c6403.ambari.apache.org", |
| "Hosts" : { |
| "cpu_count" : 1, |
| "host_name" : "c6403.ambari.apache.org", |
| "os_arch" : "x86_64", |
| "os_type" : "centos6", |
| "ph_cpu_count" : 1, |
| "public_host_name" : "c6403.ambari.apache.org", |
| "rack_info" : "/default-rack", |
| "total_mem" : 1922680 |
| } |
| } |
| ] |
| } |
| |
| self.stackAdvisor.recommendHBASEConfigurations(configurations, clusterData, services, hosts) |
| |
| self.assertTrue('core-site' in configurations) |
| self.assertTrue('properties' in configurations['core-site']) |
| # Avoid an unnecessary sort in the stack advisor, sort here for easy comparison |
| actualHosts = configurations['core-site']['properties']['hadoop.proxyuser.HTTP.hosts'] |
| expectedHosts = expected_configuration['core-site']['properties']['hadoop.proxyuser.HTTP.hosts'] |
| self.assertEquals(splitAndSort(actualHosts), splitAndSort(expectedHosts)) |
| # Do a simple check for hbase-site |
| self.assertTrue('hbase-site' in configurations) |
| self.assertTrue('properties' in configurations['hbase-site']) |
| self.assertEquals(configurations['hbase-site']['properties']['hbase.master.ui.readonly'], |
| expected_configuration['hbase-site']['properties']['hbase.master.ui.readonly']) |
| |
| def test_validationYARNServicecheckQueueName(self): |
| servicesInfo = [ |
| { |
| "name": "YARN", |
| "components": [] |
| } |
| ] |
| services = self.prepareServices(servicesInfo) |
| services["configurations"] = {"yarn-env":{"properties":{"service_check.queue.name": "default"}}, |
| "capacity-scheduler":{"properties":{ |
| "capacity-scheduler": "yarn.scheduler.capacity.root.queues=ndfqueue,leaf\n" + |
| "yarn.scheduler.capacity.root.ndfqueue.queues=ndfqueue1,ndfqueue2\n"}}} |
| hosts = self.prepareHosts([]) |
| result = self.stackAdvisor.validateConfigurations(services, hosts) |
| expectedItems = [ |
| {'message': 'Queue is not exist, or not corresponds to existing YARN leaf queue', 'level': 'ERROR'} |
| ] |
| self.assertValidationResult(expectedItems, result) |
| services["configurations"]["yarn-env"]["properties"]["service_check.queue.name"] = "ndfqueue2" |
| expectedItems = [] |
| result = self.stackAdvisor.validateConfigurations(services, hosts) |
| self.assertValidationResult(expectedItems, result) |
| services["configurations"]["yarn-env"]["properties"]["service_check.queue.name"] = "leaf" |
| expectedItems = [] |
| result = self.stackAdvisor.validateConfigurations(services, hosts) |
| self.assertValidationResult(expectedItems, result) |
| |
| def test_recommendYARNQueueConfigurations(self): |
| configurations = {"yarn-env":{"properties":{"service_check.queue.name": "default"}}, |
| "capacity-scheduler":{"properties":{ |
| "capacity-scheduler": "yarn.scheduler.capacity.root.queues=ndfqueue\n" + |
| "yarn.scheduler.capacity.root.ndfqueue.queues=ndfqueue1,ndfqueue2\n"}}} |
| services = { |
| "Versions": { |
| "parent_stack_version": "2.4", |
| "stack_name": "HDP", |
| "stack_version": "2.5", |
| "stack_hierarchy": { |
| "stack_name": "HDP", |
| "stack_versions": ["2.4", "2.3", "2.2", "2.1", "2.0.6"] |
| } |
| }, |
| "configurations": configurations, |
| "services": [], |
| "ambari-server-properties": {}} |
| clusterData = { |
| "containers" : 5, |
| "ramPerContainer": 256, |
| "mapMemory": 567, |
| "reduceMemory": 345.6666666666666, |
| "amMemory": 123.54, |
| "cpu": 4, |
| "referenceNodeManagerHost" : { |
| "total_mem" : 328960 * 1024 |
| } |
| } |
| hosts = { |
| "items" : [ |
| { |
| "href" : "/api/v1/hosts/c6401.ambari.apache.org", |
| "Hosts" : { |
| "cpu_count" : 1, |
| "host_name" : "c6401.ambari.apache.org", |
| "os_arch" : "x86_64", |
| "os_type" : "centos6", |
| "ph_cpu_count" : 1, |
| "public_host_name" : "c6401.ambari.apache.org", |
| "rack_info" : "/default-rack", |
| "total_mem" : 1922680 |
| } |
| } |
| ] |
| } |
| |
| self.stackAdvisor.recommendYARNConfigurations(configurations, clusterData, services, hosts) |
| self.stackAdvisor.recommendMapReduce2Configurations(configurations, clusterData, services, hosts) |
| self.stackAdvisor.recommendHIVEConfigurations(configurations, clusterData, services, hosts) |
| self.stackAdvisor.recommendTezConfigurations(configurations, clusterData, services, hosts) |
| self.assertEquals(configurations["yarn-env"]["properties"]["service_check.queue.name"], "ndfqueue2") |
| self.assertEquals(configurations["mapred-site"]["properties"]["mapreduce.job.queuename"], "ndfqueue2") |
| self.assertEquals(configurations["webhcat-site"]["properties"]["templeton.hadoop.queue.name"], "ndfqueue2") |
| self.assertEquals(configurations["tez-site"]["properties"]["tez.queue.name"], "ndfqueue2") |
| |
| def assertValidationResult(self, expectedItems, result): |
| actualItems = [] |
| for item in result["items"]: |
| next = {"message": item["message"], "level": item["level"]} |
| try: |
| next["host"] = item["host"] |
| except KeyError, err: |
| pass |
| actualItems.append(next) |
| self.checkEqual(expectedItems, actualItems) |
| |
| def checkEqual(self, l1, l2): |
| if not len(l1) == len(l2) or not sorted(l1) == sorted(l2): |
| raise AssertionError("list1={0}, list2={1}".format(l1, l2)) |
| |
| def prepareServices(self, servicesInfo): |
| services = { "Versions" : { "stack_name" : "HDP", "stack_version" : "2.5" } } |
| services["services"] = [] |
| |
| for serviceInfo in servicesInfo: |
| nextService = {"StackServices":{"service_name" : serviceInfo["name"]}} |
| nextService["components"] = [] |
| for component in serviceInfo["components"]: |
| nextComponent = { |
| "StackServiceComponents": { |
| "component_name": component["name"], |
| "cardinality": component["cardinality"], |
| "component_category": component["category"], |
| "is_master": component["is_master"] |
| } |
| } |
| try: |
| nextComponent["StackServiceComponents"]["hostnames"] = component["hostnames"] |
| except KeyError: |
| nextComponent["StackServiceComponents"]["hostnames"] = [] |
| try: |
| nextComponent["StackServiceComponents"]["display_name"] = component["display_name"] |
| except KeyError: |
| nextComponent["StackServiceComponents"]["display_name"] = component["name"] |
| nextService["components"].append(nextComponent) |
| services["services"].append(nextService) |
| |
| return services |
| |
| def test_phoenixQueryServerNoChangesWithUnsecure(self): |
| self.maxDiff = None |
| phoenix_query_server_hosts = ["c6402.ambari.apache.org"] |
| # Starting configuration |
| configurations = { |
| "cluster-env": { |
| "properties": {} |
| }, |
| "core-site": { |
| "properties": {} |
| }, |
| "hbase-site": { |
| "properties": {} |
| } |
| } |
| |
| clusterData = { |
| "hbaseRam": 4096, |
| } |
| services = { |
| "Versions": { |
| "parent_stack_version": "2.4", |
| "stack_name": "HDP", |
| "stack_version": "2.5", |
| "stack_hierarchy": { |
| "stack_name": "HDP", |
| "stack_versions": ["2.4", "2.3", "2.2", "2.1", "2.0.6"] |
| } |
| }, |
| "services": [ |
| { |
| "href": "/api/v1/stacks/HDP/versions/2.4/services/HBASE", |
| "StackServices": { |
| "service_name": "HBASE", |
| }, |
| "Versions": { |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "StackServiceComponents": { |
| "component_name": "PHOENIX_QUERY_SERVER", |
| "hostnames": phoenix_query_server_hosts |
| } |
| } |
| ] |
| }, |
| ], |
| "configurations": configurations, |
| "changed-configurations": [ ] |
| |
| } |
| hosts = { |
| "items" : [ |
| { |
| "href" : "/api/v1/hosts/c6401.ambari.apache.org", |
| "Hosts" : { |
| "cpu_count" : 1, |
| "host_name" : "c6401.ambari.apache.org", |
| "os_arch" : "x86_64", |
| "os_type" : "centos6", |
| "ph_cpu_count" : 1, |
| "public_host_name" : "c6401.ambari.apache.org", |
| "rack_info" : "/default-rack", |
| "total_mem" : 1922680 |
| } |
| }, { |
| "href" : "/api/v1/hosts/c6402.ambari.apache.org", |
| "Hosts" : { |
| "cpu_count" : 1, |
| "host_name" : "c6402.ambari.apache.org", |
| "os_arch" : "x86_64", |
| "os_type" : "centos6", |
| "ph_cpu_count" : 1, |
| "public_host_name" : "c6402.ambari.apache.org", |
| "rack_info" : "/default-rack", |
| "total_mem" : 1922680 |
| } |
| }, { |
| "href" : "/api/v1/hosts/c6403.ambari.apache.org", |
| "Hosts" : { |
| "cpu_count" : 1, |
| "host_name" : "c6403.ambari.apache.org", |
| "os_arch" : "x86_64", |
| "os_type" : "centos6", |
| "ph_cpu_count" : 1, |
| "public_host_name" : "c6403.ambari.apache.org", |
| "rack_info" : "/default-rack", |
| "total_mem" : 1922680 |
| } |
| } |
| ] |
| } |
| |
| self.stackAdvisor.recommendHBASEConfigurations(configurations, clusterData, services, hosts) |
| |
| self.assertTrue('core-site' in configurations) |
| self.assertTrue('properties' in configurations['core-site']) |
| # Should have no updates for core-site for unsecure |
| self.assertFalse('hadoop.proxuser.HTTP.hosts' in configurations['core-site']['properties']) |
| # Should have no update to hbase-site for unsecure |
| self.assertTrue('hbase-site' in configurations) |
| self.assertTrue('properties' in configurations['hbase-site']) |
| self.assertFalse('hbase.master.ui.readonly' in configurations['hbase-site']['properties']['hbase.master.ui.readonly']) |
| |
| def test_obtainPhoenixQueryServerHosts(self): |
| self.maxDiff = None |
| phoenix_query_server_hosts = ["c6402.ambari.apache.org"] |
| # Starting configuration |
| configurations = { |
| "cluster-env": { |
| "properties": { |
| "security_enabled": "true" |
| } |
| }, |
| "core-site": { |
| "properties": { |
| "hadoop.proxyuser.HTTP.hosts": "c6401.ambari.apache.org", |
| } |
| }, |
| "hbase-site": { |
| "properties": {} |
| } |
| } |
| # Expected configuration after the recommendation |
| expected_configuration = { |
| "cluster-env": { |
| "properties": { |
| "security_enabled": "true" |
| } |
| }, |
| "core-site": { |
| "properties": { |
| "hadoop.proxyuser.HTTP.hosts": "c6401.ambari.apache.org,c6402.ambari.apache.org", |
| } |
| }, |
| "hbase-site": { |
| "properties": { |
| "hbase.master.ui.readonly": "true" |
| } |
| } |
| } |
| |
| clusterData = { |
| "hbaseRam": 4096, |
| } |
| services = { |
| "Versions": { |
| "parent_stack_version": "2.4", |
| "stack_name": "HDP", |
| "stack_version": "2.5", |
| "stack_hierarchy": { |
| "stack_name": "HDP", |
| "stack_versions": ["2.4", "2.3", "2.2", "2.1", "2.0.6"] |
| } |
| }, |
| "services": [ |
| { |
| "href": "/api/v1/stacks/HDP/versions/2.4/services/HBASE", |
| "StackServices": { |
| "service_name": "HBASE", |
| }, |
| "Versions": { |
| "stack_version": "2.5" |
| }, |
| "components": [ |
| { |
| "StackServiceComponents": { |
| "component_name": "PHOENIX_QUERY_SERVER", |
| "hostnames": phoenix_query_server_hosts |
| } |
| } |
| ] |
| }, |
| ], |
| "configurations": configurations, |
| "changed-configurations": [ ] |
| } |
| |
| hosts = { |
| "items" : [ |
| { |
| "href" : "/api/v1/hosts/c6401.ambari.apache.org", |
| "Hosts" : { |
| "cpu_count" : 1, |
| "host_name" : "c6401.ambari.apache.org", |
| "os_arch" : "x86_64", |
| "os_type" : "centos6", |
| "ph_cpu_count" : 1, |
| "public_host_name" : "c6401.ambari.apache.org", |
| "rack_info" : "/default-rack", |
| "total_mem" : 1922680 |
| } |
| }, { |
| "href" : "/api/v1/hosts/c6402.ambari.apache.org", |
| "Hosts" : { |
| "cpu_count" : 1, |
| "host_name" : "c6402.ambari.apache.org", |
| "os_arch" : "x86_64", |
| "os_type" : "centos6", |
| "ph_cpu_count" : 1, |
| "public_host_name" : "c6402.ambari.apache.org", |
| "rack_info" : "/default-rack", |
| "total_mem" : 1922680 |
| } |
| }, { |
| "href" : "/api/v1/hosts/c6403.ambari.apache.org", |
| "Hosts" : { |
| "cpu_count" : 1, |
| "host_name" : "c6403.ambari.apache.org", |
| "os_arch" : "x86_64", |
| "os_type" : "centos6", |
| "ph_cpu_count" : 1, |
| "public_host_name" : "c6403.ambari.apache.org", |
| "rack_info" : "/default-rack", |
| "total_mem" : 1922680 |
| } |
| } |
| ] |
| } |
| |
| self.assertEquals(self.stackAdvisor.get_phoenix_query_server_hosts(services, hosts), |
| phoenix_query_server_hosts) |
| |
| phoenix_query_server_hosts = [] |
| services['services'][0]['components'][0]['StackServiceComponents']['hostnames'] = phoenix_query_server_hosts |
| |
| self.assertEquals(self.stackAdvisor.get_phoenix_query_server_hosts(services, hosts), |
| phoenix_query_server_hosts) |
| |
| def test_recommendStormConfigurations(self): |
| configurations = {} |
| clusterData = {} |
| services = { |
| "services": |
| [ |
| { |
| "StackServices": { |
| "service_name" : "STORM", |
| "service_version" : "1.0.1.0.0" |
| } |
| }, |
| { |
| "StackServices": { |
| "service_name": "RANGER", |
| "service_version": "0.6.0" |
| |
| }, |
| "components": [ |
| { |
| "StackServiceComponents": { |
| "component_name": "RANGER_ADMIN", |
| "hostnames": ["host1"] |
| } |
| } |
| ] |
| } |
| ], |
| "Versions": { |
| "stack_version": "2.5" |
| }, |
| "configurations": { |
| "storm-site": { |
| "properties": { |
| "nimbus.authorizer" : "org.apache.storm.security.auth.authorizer.SimpleACLAuthorizer", |
| "nimbus.impersonation.acl" :"{{{storm_bare_jaas_principal}} : {hosts: ['*'], groups: ['*']}}" |
| }, |
| "property_attributes": {} |
| }, |
| "storm-env": { |
| "properties":{ |
| "storm_principal_name": "storm_user@ECAMPLE.COM" |
| }, |
| }, |
| "ranger-storm-plugin-properties": { |
| "properties": { |
| "ranger-storm-plugin-enabled": "No" |
| } |
| } |
| } |
| } |
| |
| # Test nimbus.authorizer with Ranger Storm plugin disabled in non-kerberos environment |
| self.stackAdvisor.recommendStormConfigurations(configurations, clusterData, services, None) |
| self.assertEquals(configurations['storm-site']['property_attributes']['nimbus.authorizer'], {'delete': 'true'}, "Test nimbus.authorizer with Ranger Storm plugin disabled in non-kerberos environment") |
| |
| # Test nimbus.authorizer with Ranger Storm plugin enabled in non-kerberos environment |
| configurations['storm-site']['properties'] = {} |
| configurations['storm-site']['property_attributes'] = {} |
| services['configurations']['ranger-storm-plugin-properties']['properties']['ranger-storm-plugin-enabled'] = 'Yes' |
| self.stackAdvisor.recommendStormConfigurations(configurations, clusterData, services, None) |
| self.assertEquals(configurations['storm-site']['property_attributes']['nimbus.authorizer'], {'delete': 'true'}, "Test nimbus.authorizer with Ranger Storm plugin enabled in non-kerberos environment") |
| |
| # Test nimbus.authorizer with Ranger Storm plugin being enabled in kerberos environment |
| configurations['storm-site']['properties'] = {} |
| configurations['storm-site']['property_attributes'] = {} |
| services['configurations']['storm-site']['properties']['nimbus.authorizer'] = '' |
| services['configurations']['ranger-storm-plugin-properties']['properties']['ranger-storm-plugin-enabled'] = 'Yes' |
| services['configurations']['storm-site']['properties']['storm.zookeeper.superACL'] = 'sasl:{{storm_bare_jaas_principal}}' |
| self.stackAdvisor.recommendStormConfigurations(configurations, clusterData, services, None) |
| self.assertEquals(configurations['storm-site']['properties']['nimbus.authorizer'], 'org.apache.ranger.authorization.storm.authorizer.RangerStormAuthorizer', "Test nimbus.authorizer with Ranger Storm plugin enabled in kerberos environment") |
| |
| # Test nimbus.authorizer with Ranger Storm plugin being disabled in kerberos environment |
| configurations['storm-site']['properties'] = {} |
| configurations['storm-site']['property_attributes'] = {} |
| services['configurations']['ranger-storm-plugin-properties']['properties']['ranger-storm-plugin-enabled'] = 'No' |
| services['configurations']['storm-site']['properties']['storm.zookeeper.superACL'] = 'sasl:{{storm_bare_jaas_principal}}' |
| services['configurations']['storm-site']['properties']['nimbus.authorizer'] = 'org.apache.ranger.authorization.storm.authorizer.RangerStormAuthorizer' |
| self.stackAdvisor.recommendStormConfigurations(configurations, clusterData, services, None) |
| self.assertEquals(configurations['storm-site']['properties']['nimbus.authorizer'], 'org.apache.storm.security.auth.authorizer.SimpleACLAuthorizer', "Test nimbus.authorizer with Ranger Storm plugin being disabled in kerberos environment") |
| |
| def test_validateSpark2Defaults(self): |
| properties = {} |
| recommendedDefaults = { |
| "spark.yarn.queue": "default", |
| } |
| configurations = {} |
| services = { |
| "services": |
| [ |
| { |
| "StackServices": { |
| "service_name": "SPARK" |
| } |
| } |
| ] |
| } |
| |
| # Test with ranger plugin enabled, validation fails |
| res_expected = [{'config-type': 'spark2-defaults', 'message': 'Value should be set', 'type': 'configuration', 'config-name': 'spark.yarn.queue', 'level': 'ERROR'}] |
| |
| res = self.stackAdvisor.validateSpark2Defaults(properties, recommendedDefaults, configurations, services, {}) |
| self.assertEquals(res, res_expected) |
| |
| """ |
| Given a comma-separated string, split the items, sort them, and re-join the elements |
| back into a comma-separated string |
| """ |
| def splitAndSort(s): |
| l = s.split(',') |
| l.sort() |
| return ','.join(l) |
| |
| """ |
| Helper method to convert string of key-values to dict. |
| """ |
| def convertToDict(properties): |
| capacitySchedulerProperties = dict() |
| properties = str(properties).split('\n') |
| if properties: |
| for property in properties: |
| key, sep, value = property.partition("=") |
| if key: |
| capacitySchedulerProperties[key] = value |
| return capacitySchedulerProperties |