如何减少Hadoop中从节点的心跳时间

How to decrease heartbeat time of slave nodes in Hadoop

我正在处理 AWS EMR。

我想尽快得到死亡任务节点的信息。但是根据 hadoop 中的默认设置,心跳每 10 分钟共享一次。

这是 mapred-default 中的默认键值对 - mapreduce.jobtracker.expire.trackers.interval : 600000ms

我尝试使用 - this link

将默认值修改为 6000 毫秒

之后,每当我从 EMR 集群中终止任何 ec2 机器时,我都看不到状态变化那么快。(在 6 秒内)

资源管理器 REST API - http://MASTER_DNS_NAME:8088/ws/v1/cluster/nodes

问题-

  1. 在运行 EMR集群(Hadoop集群)中检查mapreduce.jobtracker.expire.trackers.interval值的命令是什么?
  2. 这是我用来获取状态更改的正确密钥吗?如果不是,请提出任何其他解决方案。
  3. 资源管理器中节点的 DECOMMISSIONING 与 DECOMMISSIONED 与 LOST 状态之间有什么区别 UI?

更新

我尝试了很多次,但它表现出模棱两可的行为。有时进入DECOMMISSIONING/DECOMMISIONED状态,有时10分钟后直接进入LOST状态

我需要一个快速的状态变化,这样我就可以触发一些事件。

这是我的示例代码 -

List<Configuration> configurations = new ArrayList<Configuration>();

        Configuration mapredSiteConfiguration = new Configuration();
        mapredSiteConfiguration.setClassification("mapred-site");
        Map<String, String> mapredSiteConfigurationMapper = new HashMap<String, String>();
        mapredSiteConfigurationMapper.put("mapreduce.jobtracker.expire.trackers.interval", "7000");
        mapredSiteConfiguration.setProperties(mapredSiteConfigurationMapper);

        Configuration hdfsSiteConfiguration = new Configuration();
        hdfsSiteConfiguration.setClassification("hdfs-site");
        Map<String, String> hdfsSiteConfigurationMapper = new HashMap<String, String>();
        hdfsSiteConfigurationMapper.put("dfs.namenode.decommission.interval", "10");
        hdfsSiteConfiguration.setProperties(hdfsSiteConfigurationMapper);

        Configuration yarnSiteConfiguration = new Configuration();
        yarnSiteConfiguration.setClassification("yarn-site");
        Map<String, String> yarnSiteConfigurationMapper = new HashMap<String, String>();
        yarnSiteConfigurationMapper.put("yarn.resourcemanager.nodemanagers.heartbeat-interval-ms", "5000");
        yarnSiteConfiguration.setProperties(yarnSiteConfigurationMapper);

        configurations.add(mapredSiteConfiguration);
        configurations.add(hdfsSiteConfiguration);
        configurations.add(yarnSiteConfiguration);

这是我更改为 AWS EMR(内部 Hadoop)的设置,以减少状态从 运行 其他状态(DECOMMISSIONING/DECOMMISIONED/丢失)更改之间的时间。

  1. 可以使用"hdfs getconf"。请参考这个post

  2. 这些 link 提供有关节点管理器健康检查和您必须检查的属性的信息:

https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/ClusterSetup.html

https://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/NodeManager.html

参考下面的"yarn.resourcemanager.nodemanagers.heartbeat-interval-ms"link:

https://hadoop.apache.org/docs/r2.7.1/hadoop-yarn/hadoop-yarn-common/yarn-default.xml

  1. 您的问题已在 link:

    中得到解答

    https://issues.apache.org/jira/browse/YARN-914

参考"attachments"和"sub-tasks"区域。 简单来说,如果当前 运行 应用程序主容器和任务容器被正确关闭(and/or 在不同的其他节点中重新启动),那么节点管理器被认为是 DECOMMISSIONED(优雅地),否则它丢失了。

更新:

"dfs.namenode.decommission.interval"用于HDFS数据节点退役,如果你只关心节点管理器,那也没关系。 在特殊情况下,数据节点不需要是计算节点。

尝试yarn.nm.liveness-monitor.expiry-interval-ms(默认600000 - 这就是为什么你报告状态在10分钟内变为LOST,根据需要将其设置为较小的值)而不是 mapreduce.jobtracker.expire.trackers.interval.

您已将"yarn.resourcemanager.nodemanagers.heartbeat-interval-ms"设置为5000,这意味着心跳每5秒发送一次到资源管理器,而默认值为1000。请根据需要将其设置为较小的值。

  1. hdfs getconf -confKey mapreduce.jobtracker.expire.trackers.interval

  2. 正如另一个答案中提到的: yarn.resourcemanager.nodemanagers.heartbeat-interval-ms应该根据你的网络设置,如果你的网络有高延迟,你应该设置一个更大的值。

3。 它在 DECOMMISSIONING 中,当有 运行 个容器时,它正在等待它们完成,以便这些节点可以退役。

它在 LOST 中停留太久。在超过设置的超时时间并且无法完成节点的退役后达到此状态。

DECOMMISSIONED 是节点退役完成的时间。

参考:Resize a Running Cluster

For YARN NodeManager decommissioning, you can manually adjust the time a node waits for decommissioning by setting yarn.resourcemanager.decommissioning.timeout inside /etc/hadoop/conf/yarn-site.xml; this setting is dynamically propagated.