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

时间:2016-08-14 20:39:30

标签: java amazon-web-services hadoop mapreduce amazon-emr

我正在使用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. 在资源管理器UI中DECOMMISSIONING与DECOMMISSIONED与LOST状态之间有什么区别?
  4. 更新

    我尝试了很多次,但它显示出模棱两可的行为。有时,它会转到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)的设置,以减少状态从RUNNING更改为其他状态(DECOMMISSIONING / DECOMMISIONED / LOST)之间的时间。

2 个答案:

答案 0 :(得分:4)

  1. 您可以使用“hdfs getconf”。请参阅此帖Get a yarn configuration from commandline

  2. 这些链接提供有关节点管理器运行状况检查以及您必须检查的属性的信息:

  3. 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”:

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

    1. 您的疑问将在以下链接中得到解答:

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

    2. 请参阅“附件”和“子任务”区域。  简单来说,如果当前正在运行的应用程序主机和任务容器正确关闭(和/或在不同的其他节点中重新启动),那么节点管理器将被称为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 :(得分:0)

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

  2. 正如其他答案所述: yarn.resourcemanager.nodemanagers.heartbeat-interval-ms应根据您的网络进行设置,如果您的网络延迟较高,则应设置更大的值。

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

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

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

    参考:Resize a Running Cluster

      

    对于YARN NodeManager停用,您可以手动调整时间   节点通过设置等待退役   yarn.resourcemanager.decommissioning.timeout里面   /etc/hadoop/conf/yarn-site.xml;此设置是动态的   传播。