AWS EMR 如何调整大小
How AWS EMR resize
我今天在使用 AWS EMR 时有一些疑问。
EMR 为我们调整集群大小提供了非常简单的方法,添加删除一些节点很容易。
在 apache hadoop 中,我们可以修改 slaves
文件来更改添加或删除节点。但我发现 EMR 中的 slaves
文件仅包含 localhost
,我找不到任何其他指示从属位置的配置。
EMR 如何在集群中添加或删除节点而无需在主节点中重新启动进程?
您可以通过 AWS 控制台 expand/contract 集群。
使用调整大小选项更改集群的大小。
您还可以通过控制台将 "task" 个节点添加到集群。
master 和 slaves 文件仅供 shell 脚本使用,如 start-all.sh、start-dfs.sh 等。这些文件不被 hadoop 中的任何其他函数使用.从hadoop集群的角度来看,这些文件没有定义namenode、secondary namenode、worker节点所在的位置。 EMR 没有使用那些 shell 脚本来启动集群。 core-site.xml中的属性fs.default.name或fs.defaultFS定义namenode主机.所有以此配置开头的数据节点都将向名称节点报告并添加到集群中。同样,resourcemanager host定义在所有节点的yarn-site.xml中。
我们不需要重启集群中的任何进程来添加新节点。一旦数据节点启动,它将向名称节点报告,并且节点将以这种方式为 HDFS 做出贡献。同样,一旦nodemanager up,它就会向集群的resourcemanager报告,它会贡献给处理层。
在 EMR 中,我们有 3 种类型的节点。
- 主节点
- 核心节点
- 任务节点
对于 EMR 集群,主节点只有一个。这个节点是有namenode和所有master服务的节点,比如Resourcemanager、HBase Master等
核心节点是具有存储和处理能力的节点,即有datanode和nodemanager。我们可以增加核心节点的数量,但不能减少核心节点的数量,因为这会导致数据丢失。
任务节点是只有处理能力的节点。这基本上用于服务瞬态负载。这只有nodemanager。没有数据节点与此节点相关联。我们可以增加或减少任务节点的数量。
在调整集群大小时,现有集群没有受到干扰。 EMR 中不会调用 start-all.sh、stop-all.sh 等脚本。它启动单独的服务并启动集群。所以不考虑主从文件中的条目。
使用 AWS EMR 上的自动缩放,您可以扩展和缩减集群上的节点。可以使用 Cloudwatch 指标(YARNMemoryAvailablePercentage 和 ContainerPendingRatio)触发横向扩展操作。以下示例政策
"AutoScalingPolicy":
{
"Constraints":
{
"MinCapacity": 10,
"MaxCapacity": 50
},
"Rules":
[
{"Name": "Compute-scale-up",
"Description": "Scale out based on ContainerPending Mterics",
"Action":
{
"SimpleScalingPolicyConfiguration":
{"AdjustmentType": "CHANGE_IN_CAPACITY",
"ScalingAdjustment": 1,
"CoolDown":0}
},
"Trigger":
{"CloudWatchAlarmDefinition":
{"AlarmNamePrefix": "compute-scale-up",
"ComparisonOperator": "GREATER_THAN_OR_EQUAL",
"EvaluationPeriods": 3,
"MetricName": "ContainerPending",
"Namespace": "AWS/ElasticMapReduce",
"Period": 300,
"Statistic": "AVERAGE",
"Threshold": 10,
"Unit": "COUNT",
"Dimensions":
[
{"Key": "JobFlowId",
"Value": "${emr:cluster_id}"}
]
}
}
},
{"Name": "Compute-scale-down",
"Description": "Scale in",
"Action":
{
"SimpleScalingPolicyConfiguration":
{"AdjustmentType": "CHANGE_IN_CAPACITY",
"ScalingAdjustment": -1,
"CoolDown":300}
},
"Trigger":
{"CloudWatchAlarmDefinition":
{"AlarmNamePrefix": "compute-scale-down",
"ComparisonOperator": "GREATER_THAN_OR_EQUAL",
"EvaluationPeriods": 3,
"MetricName": "MemoryAvailableMB",
"Namespace": "AWS/ElasticMapReduce",
"Period": 300,
"Statistic": "AVERAGE",
"Threshold": 24000,
"Unit": "COUNT",
"Dimensions":
[
{"Key": "JobFlowId",
"Value": "${emr:cluster_id}"}
]
}
}
}
]
}
您可以参考此博客了解更多详情https://aws.amazon.com/blogs/big-data/dynamically-scale-applications-on-amazon-emr-with-auto-scaling/
我今天在使用 AWS EMR 时有一些疑问。
EMR 为我们调整集群大小提供了非常简单的方法,添加删除一些节点很容易。
在 apache hadoop 中,我们可以修改 slaves
文件来更改添加或删除节点。但我发现 EMR 中的 slaves
文件仅包含 localhost
,我找不到任何其他指示从属位置的配置。
EMR 如何在集群中添加或删除节点而无需在主节点中重新启动进程?
您可以通过 AWS 控制台 expand/contract 集群。
使用调整大小选项更改集群的大小。
您还可以通过控制台将 "task" 个节点添加到集群。
master 和 slaves 文件仅供 shell 脚本使用,如 start-all.sh、start-dfs.sh 等。这些文件不被 hadoop 中的任何其他函数使用.从hadoop集群的角度来看,这些文件没有定义namenode、secondary namenode、worker节点所在的位置。 EMR 没有使用那些 shell 脚本来启动集群。 core-site.xml中的属性fs.default.name或fs.defaultFS定义namenode主机.所有以此配置开头的数据节点都将向名称节点报告并添加到集群中。同样,resourcemanager host定义在所有节点的yarn-site.xml中。
我们不需要重启集群中的任何进程来添加新节点。一旦数据节点启动,它将向名称节点报告,并且节点将以这种方式为 HDFS 做出贡献。同样,一旦nodemanager up,它就会向集群的resourcemanager报告,它会贡献给处理层。
在 EMR 中,我们有 3 种类型的节点。
- 主节点
- 核心节点
- 任务节点
对于 EMR 集群,主节点只有一个。这个节点是有namenode和所有master服务的节点,比如Resourcemanager、HBase Master等
核心节点是具有存储和处理能力的节点,即有datanode和nodemanager。我们可以增加核心节点的数量,但不能减少核心节点的数量,因为这会导致数据丢失。
任务节点是只有处理能力的节点。这基本上用于服务瞬态负载。这只有nodemanager。没有数据节点与此节点相关联。我们可以增加或减少任务节点的数量。
在调整集群大小时,现有集群没有受到干扰。 EMR 中不会调用 start-all.sh、stop-all.sh 等脚本。它启动单独的服务并启动集群。所以不考虑主从文件中的条目。
使用 AWS EMR 上的自动缩放,您可以扩展和缩减集群上的节点。可以使用 Cloudwatch 指标(YARNMemoryAvailablePercentage 和 ContainerPendingRatio)触发横向扩展操作。以下示例政策
"AutoScalingPolicy":
{
"Constraints":
{
"MinCapacity": 10,
"MaxCapacity": 50
},
"Rules":
[
{"Name": "Compute-scale-up",
"Description": "Scale out based on ContainerPending Mterics",
"Action":
{
"SimpleScalingPolicyConfiguration":
{"AdjustmentType": "CHANGE_IN_CAPACITY",
"ScalingAdjustment": 1,
"CoolDown":0}
},
"Trigger":
{"CloudWatchAlarmDefinition":
{"AlarmNamePrefix": "compute-scale-up",
"ComparisonOperator": "GREATER_THAN_OR_EQUAL",
"EvaluationPeriods": 3,
"MetricName": "ContainerPending",
"Namespace": "AWS/ElasticMapReduce",
"Period": 300,
"Statistic": "AVERAGE",
"Threshold": 10,
"Unit": "COUNT",
"Dimensions":
[
{"Key": "JobFlowId",
"Value": "${emr:cluster_id}"}
]
}
}
},
{"Name": "Compute-scale-down",
"Description": "Scale in",
"Action":
{
"SimpleScalingPolicyConfiguration":
{"AdjustmentType": "CHANGE_IN_CAPACITY",
"ScalingAdjustment": -1,
"CoolDown":300}
},
"Trigger":
{"CloudWatchAlarmDefinition":
{"AlarmNamePrefix": "compute-scale-down",
"ComparisonOperator": "GREATER_THAN_OR_EQUAL",
"EvaluationPeriods": 3,
"MetricName": "MemoryAvailableMB",
"Namespace": "AWS/ElasticMapReduce",
"Period": 300,
"Statistic": "AVERAGE",
"Threshold": 24000,
"Unit": "COUNT",
"Dimensions":
[
{"Key": "JobFlowId",
"Value": "${emr:cluster_id}"}
]
}
}
}
]
}
您可以参考此博客了解更多详情https://aws.amazon.com/blogs/big-data/dynamically-scale-applications-on-amazon-emr-with-auto-scaling/