i有一个并联= 256在128个任务经理上运行的操作员。每次我遇到检查点故障时,它都会在该操作员的同一子任务中发生,例如,它总是被卡住并阻止检查点的子任务129。我想通过检查SubTask 129正在运行的任务管理器的日志来了解此子任务的发生了什么。有没有办法将子任务管理员映射到相应的任务管理器?
taskmanager.log
文件包含包括其子任务索引的部署任务的名称。您可以简单地在所有taskmanager.log
文件中搜索TASK_NAME (129/256)
。
我能够找到一个琐碎的解决方案,而是在编程运行时获得所需的映射的工作解决方案。
主要思想是休息端/乔布斯/:jobid/vertices/:vertexid为格式的特定顶点提供必要的信息
{
"id": "804e...",
"name": "Map -> Sink",
...
"subtasks": [
{
"subtask": 0,
"host": "ip-10-xx-yy-zz:36ddd"
},
...
]
}
主要困难是以编程方式获取Web接口URL。我能够以这种方式得到它(可能有一个更优雅的解决方案(:
val env = FieldUtils
.readField(getRuntimeContext.asInstanceOf[StreamingRuntimeContext], "taskEnvironment", true)
.asInstanceOf[RuntimeEnvironment]
try {
println("trying to get cluster client...")
val client = new RestClusterClient[String](env.getTaskManagerInfo.getConfiguration, "rest")
return client.getWebInterfaceURL
} catch {
case e: Exception =>
println("Failed to get cluster client : ")
e.printStackTrace()
}
给定Web接口URL,我只是对其进行了HTTP调用并构造了地图。