如何减少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
问题-
- 在运行 EMR集群(Hadoop集群)中检查mapreduce.jobtracker.expire.trackers.interval值的命令是什么?
- 这是我用来获取状态更改的正确密钥吗?如果不是,请提出任何其他解决方案。
- 资源管理器中节点的 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/丢失)更改之间的时间。
可以使用"hdfs getconf"。请参考这个post
这些 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
您的问题已在 link:
中得到解答
参考"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。请根据需要将其设置为较小的值。
hdfs getconf -confKey mapreduce.jobtracker.expire.trackers.interval
正如另一个答案中提到的:
yarn.resourcemanager.nodemanagers.heartbeat-interval-ms
应该根据你的网络设置,如果你的网络有高延迟,你应该设置一个更大的值。
3。
它在 DECOMMISSIONING 中,当有 运行 个容器时,它正在等待它们完成,以便这些节点可以退役。
它在 LOST 中停留太久。在超过设置的超时时间并且无法完成节点的退役后达到此状态。
DECOMMISSIONED 是节点退役完成的时间。
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.
我正在处理 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值的命令是什么?
- 这是我用来获取状态更改的正确密钥吗?如果不是,请提出任何其他解决方案。
- 资源管理器中节点的 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/丢失)更改之间的时间。
可以使用"hdfs getconf"。请参考这个post
这些 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
您的问题已在 link:
中得到解答
参考"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。请根据需要将其设置为较小的值。
hdfs getconf -confKey mapreduce.jobtracker.expire.trackers.interval
正如另一个答案中提到的:
yarn.resourcemanager.nodemanagers.heartbeat-interval-ms
应该根据你的网络设置,如果你的网络有高延迟,你应该设置一个更大的值。
3。 它在 DECOMMISSIONING 中,当有 运行 个容器时,它正在等待它们完成,以便这些节点可以退役。
它在 LOST 中停留太久。在超过设置的超时时间并且无法完成节点的退役后达到此状态。
DECOMMISSIONED 是节点退役完成的时间。
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.