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.namefs.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/