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

标签 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. 这是我用来获取状态更改的正确 key 吗?如果不是,请提出任何其他解决方案。
  3. 资源管理器 UI 中节点的 DECOMMISSIONING、DECOMMISSIONED 和 LOST 状态有何区别?

更新

我尝试了很多次,但它表现出模棱两可的行为。有时进入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)之间的时间。

最佳答案

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

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

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

请参阅“附件”和“子任务”区域。 简而言之,如果当前正在运行的应用程序主容器和任务容器被正确关闭(和/或在不同的其他节点中重新启动),那么节点管理器被认为是 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。请将其设置为较小的值需要。

关于java - 如何减少Hadoop中从节点的心跳时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38946415/

相关文章:

java - 从 SDcard android 的 txt 文件中提取段落

java - 处理 BufferedImage 中的像素

amazon-web-services - AWS 如何找到与 AMI 关联的快照?

hadoop - ./zkServer.sh status 联系服务时出错。它可能没有运行

hadoop - hbase 批量加载中的奇怪行为

java - 仅当从 java 执行时,plpgsql 中的循环才会停止且没有错误消息

java - 如何使用 org.apache.commons.codec.binary.base64 对 Java 对象进行 Base64 编码?

python - 确定文件夹或文件 key - Boto

amazon-web-services - AWS CFT Glue 在 DynamoDB Target 中添加采样

hadoop - 无法启动master和slave,日志中出现名为 "bogon"的奇怪东西