Repository: ambari Updated Branches: refs/heads/trunk b4320b5a8 -> 382eba15e
AMBARI-18390 : Configuration warnings during Add Service Wizard includes seemingly nonsensical heapsize recommendations for AMS heap sizes. (avijayan) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/382eba15 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/382eba15 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/382eba15 Branch: refs/heads/trunk Commit: 382eba15e351df86da96e8d63cbdaf2fe8f4d867 Parents: b4320b5 Author: Aravindan Vijayan <avija...@hortonworks.com> Authored: Tue Sep 20 13:56:57 2016 -0700 Committer: Aravindan Vijayan <avija...@hortonworks.com> Committed: Tue Sep 20 13:56:57 2016 -0700 ---------------------------------------------------------------------- .../stacks/HDP/2.0.6/services/stack_advisor.py | 106 ++++++++++++++----- 1 file changed, 81 insertions(+), 25 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/382eba15/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/stack_advisor.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/stack_advisor.py b/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/stack_advisor.py index fd0dfed..800bfa2 100644 --- a/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/stack_advisor.py +++ b/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/stack_advisor.py @@ -949,7 +949,8 @@ class HDP206StackAdvisor(DefaultStackAdvisor): "STORM": {"storm-site": self.validateStormConfigurations}, "AMBARI_METRICS": {"ams-hbase-site": self.validateAmsHbaseSiteConfigurations, "ams-hbase-env": self.validateAmsHbaseEnvConfigurations, - "ams-site": self.validateAmsSiteConfigurations} + "ams-site": self.validateAmsSiteConfigurations, + "ams-env": self.validateAmsEnvConfigurations} } def validateMinMax(self, items, recommendedDefaults, configurations): @@ -1139,7 +1140,6 @@ class HDP206StackAdvisor(DefaultStackAdvisor): if logDirItem: validationItems.extend([{"config-name": "hbase_log_dir", "item": logDirItem}]) - collector_heapsize = to_number(ams_env.get("metrics_collector_heapsize")) hbase_master_heapsize = to_number(properties["hbase_master_heapsize"]) hbase_master_xmn_size = to_number(properties["hbase_master_xmn_size"]) hbase_regionserver_heapsize = to_number(properties["hbase_regionserver_heapsize"]) @@ -1230,27 +1230,25 @@ class HDP206StackAdvisor(DefaultStackAdvisor): requiredMemory = getMemorySizeRequired(hostComponents, configurations) unusedMemory = host["Hosts"]["total_mem"] * 1024 - requiredMemory # in bytes - if unusedMemory > 4*gb: # warn user, if more than 4GB RAM is unused - heapPropertyToIncrease = "hbase_regionserver_heapsize" if is_hbase_distributed else "hbase_master_heapsize" - xmnPropertyToIncrease = "regionserver_xmn_size" if is_hbase_distributed else "hbase_master_xmn_size" - recommended_collector_heapsize = int((unusedMemory - 4*gb)/5) + collector_heapsize*mb + + heapPropertyToIncrease = "hbase_regionserver_heapsize" if is_hbase_distributed else "hbase_master_heapsize" + xmnPropertyToIncrease = "regionserver_xmn_size" if is_hbase_distributed else "hbase_master_xmn_size" + hbase_needs_increase = to_number(properties[heapPropertyToIncrease]) * mb < 32 * gb + + if unusedMemory > 4*gb and hbase_needs_increase: # warn user, if more than 4GB RAM is unused + recommended_hbase_heapsize = int((unusedMemory - 4*gb)*4/5) + to_number(properties.get(heapPropertyToIncrease))*mb recommended_hbase_heapsize = min(32*gb, recommended_hbase_heapsize) #Make sure heapsize <= 32GB - recommended_xmn_size = round_to_n(0.12*recommended_hbase_heapsize/mb,128) - - if collector_heapsize < recommended_collector_heapsize or \ - to_number(properties[heapPropertyToIncrease]) < recommended_hbase_heapsize: - collectorHeapsizeItem = self.getWarnItem("{0} MB RAM is unused on the host {1} based on components " \ - "assigned. Consider allocating {2} MB to " \ - "metrics_collector_heapsize in ams-env, " \ - "{3} MB to {4} in ams-hbase-env" - .format(unusedMemory/mb, collectorHostName, - recommended_collector_heapsize/mb, - recommended_hbase_heapsize/mb, + recommended_hbase_heapsize = round_to_n(recommended_hbase_heapsize/mb,128) # Round to 128m multiple + if to_number(properties[heapPropertyToIncrease]) < recommended_hbase_heapsize: + hbaseHeapsizeItem = self.getWarnItem("Consider allocating {0} MB to {1} in ams-hbase-env to use up some " + "unused memory on host" + .format(recommended_hbase_heapsize, heapPropertyToIncrease)) - validationItems.extend([{"config-name": heapPropertyToIncrease, "item": collectorHeapsizeItem}]) + validationItems.extend([{"config-name": heapPropertyToIncrease, "item": hbaseHeapsizeItem}]) - if to_number(properties[xmnPropertyToIncrease]) < recommended_hbase_heapsize: + recommended_xmn_size = round_to_n(0.15*recommended_hbase_heapsize,128) + if to_number(properties[xmnPropertyToIncrease]) < recommended_xmn_size: xmnPropertyToIncreaseItem = self.getWarnItem("Consider allocating {0} MB to use up some unused memory " "on host".format(recommended_xmn_size)) validationItems.extend([{"config-name": xmnPropertyToIncrease, "item": xmnPropertyToIncreaseItem}]) @@ -1258,6 +1256,38 @@ class HDP206StackAdvisor(DefaultStackAdvisor): return self.toConfigurationValidationProblems(validationItems, "ams-hbase-env") + def validateAmsEnvConfigurations(self, properties, recommendedDefaults, configurations, services, hosts): + + ams_env = getSiteProperties(configurations, "ams-env") + mb = 1024 * 1024 + gb = 1024 * mb + validationItems = [] + collector_heapsize = to_number(ams_env.get("metrics_collector_heapsize")) + amsCollectorHosts = self.getComponentHostNames(services, "AMBARI_METRICS", "METRICS_COLLECTOR") + for collectorHostName in amsCollectorHosts: + for host in hosts["items"]: + if host["Hosts"]["host_name"] == collectorHostName: + hostComponents = [] + for service in services["services"]: + for component in service["components"]: + if component["StackServiceComponents"]["hostnames"] is not None: + if collectorHostName in component["StackServiceComponents"]["hostnames"]: + hostComponents.append(component["StackServiceComponents"]["component_name"]) + + requiredMemory = getMemorySizeRequired(hostComponents, configurations) + unusedMemory = host["Hosts"]["total_mem"] * 1024 - requiredMemory # in bytes + collector_needs_increase = collector_heapsize * mb < 16 * gb + + if unusedMemory > 4*gb and collector_needs_increase: # warn user, if more than 4GB RAM is unused + recommended_collector_heapsize = int((unusedMemory - 4*gb)/5) + collector_heapsize * mb + recommended_collector_heapsize = round_to_n(recommended_collector_heapsize/mb,128) # Round to 128m multiple + if collector_heapsize < recommended_collector_heapsize: + validation_msg = "Consider allocating {0} MB to metrics_collector_heapsize in ams-env to use up some " \ + "unused memory on host" + collectorHeapsizeItem = self.getWarnItem(validation_msg.format(recommended_collector_heapsize)) + validationItems.extend([{"config-name": "metrics_collector_heapsize", "item": collectorHeapsizeItem}]) + pass + return self.toConfigurationValidationProblems(validationItems, "ams-env") def getPreferredMountPoints(self, hostInfo): @@ -1883,6 +1913,9 @@ def getHeapsizeProperties(): return { "NAMENODE": [{"config-name": "hadoop-env", "property": "namenode_heapsize", "default": "1024m"}], + "SECONDARY_NAMENODE": [{"config-name": "hadoop-env", + "property": "namenode_heapsize", + "default": "1024m"}], "DATANODE": [{"config-name": "hadoop-env", "property": "dtnode_heapsize", "default": "1024m"}], @@ -1892,9 +1925,15 @@ def getHeapsizeProperties(): "HBASE_MASTER": [{"config-name": "hbase-env", "property": "hbase_master_heapsize", "default": "1024m"}], - "HIVE_CLIENT": [{"config-name": "hive-site", - "property": "hive.heapsize", - "default": "1024m"}], + "HIVE_CLIENT": [{"config-name": "hive-env", + "property": "hive.client.heapsize", + "default": "1024"}], + "HIVE_METASTORE": [{"config-name": "hive-env", + "property": "hive.metastore.heapsize", + "default": "1024"}], + "HIVE_SERVER": [{"config-name": "hive-env", + "property": "hive.heapsize", + "default": "1024"}], "HISTORYSERVER": [{"config-name": "mapred-env", "property": "jobhistory_heapsize", "default": "1024m"}], @@ -1911,7 +1950,7 @@ def getHeapsizeProperties(): "property": "apptimelineserver_heapsize", "default": "1024m"}], "ZOOKEEPER_SERVER": [{"config-name": "zookeeper-env", - "property": "zookeeper_heapsize", + "property": "zk_server_heapsize", "default": "1024m"}], "METRICS_COLLECTOR": [{"config-name": "ams-hbase-env", "property": "hbase_master_heapsize", @@ -1924,7 +1963,19 @@ def getHeapsizeProperties(): "default": "512"}], "ATLAS_SERVER": [{"config-name": "atlas-env", "property": "atlas_server_xmx", - "default": "2048"}] + "default": "2048"}], + "LOGSEARCH_SERVER": [{"config-name": "logsearch-env", + "property": "logsearch_app_max_memory", + "default": "1024"}], + "LOGSEARCH_LOGFEEDER": [{"config-name": "logfeeder-env", + "property": "logfeeder_max_mem", + "default": "512"}], + "SPARK_JOBHISTORYSERVER": [{"config-name": "spark-env", + "property": "spark_daemon_memory", + "default": "1024"}], + "SPARK2_JOBHISTORYSERVER": [{"config-name": "spark2-env", + "property": "spark_daemon_memory", + "default": "1024"}] } def getMemorySizeRequired(components, configurations): @@ -1944,7 +1995,12 @@ def getMemorySizeRequired(components, configurations): heapsize = str(heapsize) + "m" totalMemoryRequired += formatXmxSizeToBytes(heapsize) - + else: + if component == "METRICS_MONITOR" or "CLIENT" in component: + heapsize = '512m' + else: + heapsize = '1024m' + totalMemoryRequired += formatXmxSizeToBytes(heapsize) return totalMemoryRequired def round_to_n(mem_size, n=128):