По причинам, связанным с исследованиями, я хотел бы записать скорость выполнения всех заданий, чтобы проанализировать, как показатели прогресса меняются с течением времени.
Мне уже удалось перекомпилировать эти JAR-файлы, чтобы зарегистрировать задержку пакетов heartbeat :
- имела oop -yarn-server-common-3.2. 0.jar
- имел oop -yarn-server-nodemanager-3.2.0.jar
- имел oop -yarn-server-resourcemanager-3.2.0.jar
Изначально я думал, что информация о скорости выполнения каждой задачи будет частью пакета heartbeat , отправляемого в ResourceManager . Однако, глядя на шаблон этого протокола (RP C), я не уверен, что эта информация здесь.
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()
. Но как я могу получить эту информацию из пакета heartbeat ? Точнее, я работаю над методом nodeHeartbeat
.
Возможно, это не в этом протоколе. Единственная вещь, в которой я уверен, это то, что это пакет от рабочих к мастеру, который информирует о скорости выполнения каждой задачи. Кто-нибудь знает, где я мог бы найти эту информацию?
Apache Если бы oop такой большой проект, и мы можем легко потеряться в его исходном коде. Будем рады любой помощи!