Amazon EMR 集群的集群缩减选项
注意
自 Amazon EMR 发行版 5.10.0 起,不再支持缩减行为选项。因为 Amazon EC2 中引入了按秒计费,Amazon EMR 集群的默认缩减行为现在在任务完成时终止。
对于 Amazon EMR 发行版 5.1.0 到 5.9.1,有两种缩减行为选项:在用于 Amazon EC2 计费的实例小时边界终止,或者在任务完成时终止。从 Amazon EMR 发行版 5.10.0 开始,在实例小时边界处终止的设置已弃用,因为在 Amazon EC2 中引入了按秒计费。我们不建议在提供了此选项的版本中指定在实例小时边界终止。
警告
如果您使用 AWS CLI 发出 modify-instance-groups
与 EC2InstanceIdsToTerminate
,则这些实例将立即终止,而不考虑这些设置,且无论实例上运行的应用程序的状态如何。通过这种方式终止实例将面临数据丢失以及出现不可预测的集群行为的风险。
当指定在任务完成后终止时,Amazon EMR 首先将拒绝列出来自节点的任务,并耗尽这些任务,然后再终止 Amazon EC2 实例。对于指定的任一行为,Amazon EMR 都不会终止核心实例组中的 Amazon EC2 实例(如果这会导致 HDFS 受损)。
在任务完成时终止
Amazon EMR 让您能够在不影响工作负载的情况下缩减集群。在向下调整操作期间,Amazon EMR 能够正常停止核心节点和任务节点上的 YARN、HDFS 及其它守护进程,而不会丢失数据或中断任务。Amazon EMR 仅缩减已完成所分配的工作并处于空闲状态的实例组大小。对于 YARN NodeManager 正常停止,您可以手动调整节点等待停止的时间。
使用 YARN-site
配置分类中的属性来设置此时间。要使用 Amazon EMR 发行版 5.12.0 及更高版本,请指定 YARN.resourcemanager.nodemanager-graceful-decommission-timeout-secs
属性。要使用早期的 Amazon EMR 发行版,请指定 YARN.resourcemanager.decommissioning.timeout
属性。
如果停止超时过后仍有容器或 YARN 应用程序在运行,则系统会强制停止此节点,且由 YARN 在其它节点上重新计划受影响的容器。默认值为 3600 秒 (1 小时)。您可以将此超时设为任意大的值,以强制自然缩减操作等待更长时间。有关更多信息,请参阅 Apache Hadoop 文档中的 Graceful Decommission of YARN nodes
任务节点组
Amazon EMR 将智能地选择没有针对任何步骤或应用程序运行的任务的实例,并首先将这些实例从集群中删除。如果集群中的所有实例均处于使用状态,Amazon EMR 会等待实例上的任务完成,然后将其从集群中删除。默认等待时间为 1 小时。该值可通过 YARN.resourcemanager.decommissioning.timeout
设置进行更改。Amazon EMR 将动态使用此新设置。您可以将其设置为任意大数字,以确保 Amazon EMR 在缩减集群大小的同时不会终止任何任务。
核心节点组
在核心节点上,必须将 YARN NodeManager 和 HDFS DataNode 进程守护程序都停止才能缩减实例组。对于 YARN,自然缩减可确保标记为停止的节点仅在没有挂起或未完成的容器或应用程序时才转换到 DECOMMISSIONED
状态。如果开始淘汰时,节点上没有任何正在运行的容器,淘汰会立即完成。
对于 HDFS,自然缩减可确保 HDFS 的目标容量大到足以容纳所有现有数据块。如果目标容量不够大,则只停止部分核心实例,以便剩余节点能够处理驻留在 HDFS 中的当前数据。您应确保额外的 HDFS 容量以允许进一步执行淘汰。在尝试减少实例组之前,您还应该尽量减少写入 I/O。过多的写入 I/O 可能会延迟调整大小操作的完成。
另一个限制是默认复制因素:/etc/hadoop/conf/hdfs-site
内的 dfs.replication
。创建集群时,Amazon EMR 会根据集群中的实例数来配置此值:1-3 个实例为 1
;4-9 个实例的集群为 2
;10 个以上实例的集群为 3
。
警告
-
如果单个节点出现故障,则在少于四个节点的集群上将
dfs.replication
设置为 1 可能会导致 HDFS 数据丢失。建议您使用具有至少四个核心节点的集群来处理生产工作负载。 -
Amazon EMR 不允许集群扩展
dfs.replication
下方的核心节点。例如,如果是dfs.replication = 2
,则最小核心节点数为 2。 -
当您使用托管扩缩、自动扩缩或选择手动调整集群大小时,建议您将设置
dfs.replication
为 2 或更高。
自然缩减不允许您将核心节点减少到低于 HDFS 复制因子。这是为了允许 HDFS 因副本不足而关闭文件。要避开此限制,请降低重复因子并重启 NameNode 进程守护程序。