出于研究原因,我想记录所有任务的进度,以便分析进度随时间的变化。
我已经设法重新编译了这些jar,以便记录心跳数据包的延迟:
hadoop-yarn-server-common-3.2.0.jar
hadoop-yarn-server-nodemanager-3.2.0.jar
hadoop-yarn-server-resourcemanager-3.2.0.jar
最初,我认为每个任务的进度信息都是发送给resourcemanager的heartbeat数据包的一部分。但是,通过查看这个协议(rpc)的模板,我不太确定这些信息是否在这里。
message NodeHeartbeatRequestProto {
optional NodeStatusProto node_status = 1;
optional MasterKeyProto last_known_container_token_master_key = 2;
optional MasterKeyProto last_known_nm_token_master_key = 3;
optional NodeLabelsProto nodeLabels = 4;
repeated LogAggregationReportProto log_aggregation_reports_for_apps = 5;
repeated AppCollectorDataProto registering_collectors = 6;
optional NodeAttributesProto nodeAttributes = 7;
optional uint64 sendingTime = 8; # related to my latency calculation (ignore it)
}
仅供参考,本协议在课堂上使用 NodeHeartbeatRequest
.
如果我深入研究源代码,我感兴趣的价值似乎就在其中 TaskStatus
打电话给 getProgress()
方法。但是我怎样才能从心跳数据包中得到这些信息呢?更确切地说,我正在研究 nodeHeartbeat
方法。
可能不在这个协议里。我唯一能确定的是,他们是一个从工人到主人的信息包,通知每个任务的进度。有人知道我在哪里能找到这些信息吗?
apachehadoop是一个如此庞大的项目,我们很容易迷失在它的源代码中。任何帮助都将不胜感激!
暂无答案!
目前还没有任何答案,快来回答吧!