|
@@ -26,6 +26,8 @@ import socket
|
|
|
import re
|
|
|
import xml.etree.ElementTree as ET
|
|
|
|
|
|
+from stack_advisor import ActionType
|
|
|
+
|
|
|
class HDP22StackAdvisor(HDP21StackAdvisor):
|
|
|
|
|
|
def getServiceConfigurationRecommenderDict(self):
|
|
@@ -70,14 +72,11 @@ class HDP22StackAdvisor(HDP21StackAdvisor):
|
|
|
putYarnPropertyAttribute('yarn.scheduler.maximum-allocation-mb', 'maximum', configurations["yarn-site"]["properties"]["yarn.nodemanager.resource.memory-mb"])
|
|
|
|
|
|
# Above is the default calculated 'maximum' values derived purely from hosts.
|
|
|
- # However, there are 'maximum' and other attributes that actually change based on the values
|
|
|
- # of other configs. We need to update those values.
|
|
|
+ # However, there are 'maximum' and other attributes that actually should come from services["configurations"] during validations.
|
|
|
|
|
|
# On a first stackadvisor invocation from the UI we have stack defaults in services["configurations"].
|
|
|
# So services["configurations"]["yarn-site"]["properties"]["yarn.nodemanager.resource.memory-mb"] is always 5120 during first recommendation.
|
|
|
- # Get a value from recommendations instead of services["configurations"]["yarn-site"]["properties"]["yarn.nodemanager.resource.memory-mb"]
|
|
|
- # in this case (if 'changed-configurations' are empty).
|
|
|
- if ('changed-configurations' in services.keys() and services['changed-configurations'] and "yarn-site" in services["configurations"]):
|
|
|
+ if (self.getActionType(services) == ActionType.VALIDATE_CONFIGURATIONS and "yarn-site" in services["configurations"]):
|
|
|
if ("yarn.nodemanager.resource.memory-mb" in services["configurations"]["yarn-site"]["properties"]):
|
|
|
putYarnPropertyAttribute('yarn.scheduler.maximum-allocation-mb', 'maximum', services["configurations"]["yarn-site"]["properties"]["yarn.nodemanager.resource.memory-mb"])
|
|
|
putYarnPropertyAttribute('yarn.scheduler.minimum-allocation-mb', 'maximum', services["configurations"]["yarn-site"]["properties"]["yarn.nodemanager.resource.memory-mb"])
|
|
@@ -355,8 +354,19 @@ class HDP22StackAdvisor(HDP21StackAdvisor):
|
|
|
container_size = min(clusterData['containers'] * clusterData['ramPerContainer'], container_size, yarnMaxAllocationSize)
|
|
|
|
|
|
putHiveSiteProperty("hive.tez.container.size", min(int(configurations["yarn-site"]["properties"]["yarn.scheduler.maximum-allocation-mb"]), container_size))
|
|
|
- putHiveSitePropertyAttribute("hive.tez.container.size", "minimum", int(configurations["yarn-site"]["properties"]["yarn.scheduler.minimum-allocation-mb"]))
|
|
|
- putHiveSitePropertyAttribute("hive.tez.container.size", "maximum", int(configurations["yarn-site"]["properties"]["yarn.scheduler.maximum-allocation-mb"]))
|
|
|
+
|
|
|
+ # "maximum" and "minimum" attributes should come from services["configurations"] during validations.
|
|
|
+ # If one of dependencies are in changed-confogurations another can be absent. In this case we need to take both values from 'services'.
|
|
|
+ if self.getActionType(services) == ActionType.VALIDATE_CONFIGURATIONS or ('changed-configurations' in services and services['changed-configurations'] \
|
|
|
+ and (self.isPropertyInChangedConfigs('yarn-site', 'yarn.scheduler.minimum-allocation-mb', services['changed-configurations']) or self.isPropertyInChangedConfigs('yarn-site', 'yarn.scheduler.maximum-allocation-mb', services['changed-configurations']))):
|
|
|
+ if "yarn-site" in services["configurations"]:
|
|
|
+ if "yarn.scheduler.minimum-allocation-mb" in services["configurations"]["yarn-site"]["properties"]:
|
|
|
+ putHiveSitePropertyAttribute("hive.tez.container.size", "minimum", int(services["configurations"]["yarn-site"]["properties"]["yarn.scheduler.minimum-allocation-mb"]))
|
|
|
+ if "yarn.scheduler.maximum-allocation-mb" in services["configurations"]["yarn-site"]["properties"]:
|
|
|
+ putHiveSitePropertyAttribute("hive.tez.container.size", "maximum", int(services["configurations"]["yarn-site"]["properties"]["yarn.scheduler.maximum-allocation-mb"]))
|
|
|
+ else:
|
|
|
+ putHiveSitePropertyAttribute("hive.tez.container.size", "minimum", int(configurations["yarn-site"]["properties"]["yarn.scheduler.minimum-allocation-mb"]))
|
|
|
+ putHiveSitePropertyAttribute("hive.tez.container.size", "maximum", int(configurations["yarn-site"]["properties"]["yarn.scheduler.maximum-allocation-mb"]))
|
|
|
|
|
|
putHiveSiteProperty("hive.prewarm.enabled", "false")
|
|
|
putHiveSiteProperty("hive.prewarm.numcontainers", "3")
|
|
@@ -1037,6 +1047,16 @@ class HDP22StackAdvisor(HDP21StackAdvisor):
|
|
|
putMapredPropertyAttribute = self.putPropertyAttribute(configurations, "mapred-site")
|
|
|
yarnMinAllocationSize = int(configurations["yarn-site"]["properties"]["yarn.scheduler.minimum-allocation-mb"])
|
|
|
yarnMaxAllocationSize = min(30 * int(configurations["yarn-site"]["properties"]["yarn.scheduler.minimum-allocation-mb"]), int(configurations["yarn-site"]["properties"]["yarn.scheduler.maximum-allocation-mb"]))
|
|
|
+
|
|
|
+ # "maximum" and "minimum" attributes should come from services["configurations"] during validations.
|
|
|
+ # If one of dependencies are in changed-confogurations another can be absent. In this case we need to take both values from 'services'.
|
|
|
+ if self.getActionType(services) == ActionType.VALIDATE_CONFIGURATIONS or ('changed-configurations' in services and services['changed-configurations'] \
|
|
|
+ and (self.isPropertyInChangedConfigs('yarn-site', 'yarn.scheduler.minimum-allocation-mb', services['changed-configurations']) or self.isPropertyInChangedConfigs('yarn-site', 'yarn.scheduler.maximum-allocation-mb', services['changed-configurations']))):
|
|
|
+ if "yarn-site" in services["configurations"] and "yarn.scheduler.minimum-allocation-mb" in services["configurations"]["yarn-site"]["properties"] \
|
|
|
+ and "yarn.scheduler.maximum-allocation-mb" in services["configurations"]["yarn-site"]["properties"]:
|
|
|
+ yarnMinAllocationSize = int(services["configurations"]["yarn-site"]["properties"]["yarn.scheduler.minimum-allocation-mb"])
|
|
|
+ yarnMaxAllocationSize = min(30 * int(services["configurations"]["yarn-site"]["properties"]["yarn.scheduler.minimum-allocation-mb"]), int(services["configurations"]["yarn-site"]["properties"]["yarn.scheduler.maximum-allocation-mb"]))
|
|
|
+
|
|
|
putMapredPropertyAttribute("mapreduce.map.memory.mb", "maximum", yarnMaxAllocationSize)
|
|
|
putMapredPropertyAttribute("mapreduce.map.memory.mb", "minimum", yarnMinAllocationSize)
|
|
|
putMapredPropertyAttribute("mapreduce.reduce.memory.mb", "maximum", yarnMaxAllocationSize)
|