我有一个并行度为256的运算符,在128个任务管理器上运行。每当我遇到检查点失败时,它都会在此运算符的同一子任务上发生,例如,总是有子任务129卡住并阻止了检查点。我想通过检查运行子任务129的任务管理器的日志来了解此子任务发生了什么。 Flink中是否可以将子任务ID映射到相应的任务管理器?
答案 0 :(得分:0)
taskmanager.log
文件包含已部署任务的名称,包括其子任务索引。您只需在所有TASK_NAME (129/256)
个文件中搜索taskmanager.log
。
答案 1 :(得分:0)
我能够找到一个琐碎但可行的解决方案,以编程方式在运行时获取所需的地图。
主要思想是其余端点/jobs/: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界面的网址,我只是对其进行了http调用并构建了地图。