我正在研究 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
问题-
- 在运行的EMR集群(Hadoop集群)中查看mapreduce.jobtracker.expire.trackers.interval值的命令是什么?
- 这是我用来获取状态更改的正确 key 吗?如果不是,请提出任何其他解决方案。
- 资源管理器 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)之间的时间。
最佳答案
您可以使用“hdfs getconf”。请引用此贴Get a yarn configuration from commandline
这些链接提供了有关节点管理器健康检查和您必须检查的属性的信息:
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
您的查询已在此链接中得到解答:
请参阅“附件”和“子任务”区域。 简而言之,如果当前正在运行的应用程序主容器和任务容器被正确关闭(和/或在不同的其他节点中重新启动),那么节点管理器被认为是 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/