容器重用在 Apache Tez 中是如何工作的?重用存储在共享位置的数据是什么?

How container reuse works in Apache Tez? While reusing what is the data stored in shared location?

虽然 Apache tez 重用了容器,但发生了什么过程。谁能给我解释清楚?

请在此处阅读 Hortonworks(最重要的 Tez 贡献者)文档:https://hortonworks.com/blog/re-using-containers-in-apache-tez/

Tez 中的每个顶点指定参数,这些参数在启动容器时使用。这些包括请求的资源(内存、CPU 等)、YARN LocalResources、环境以及属于此 Vertex 的任务的命令行选项。当容器首次启动时,它是为特定任务启动的,并使用为任务(或顶点)指定的参数——然后这就成为容器的签名。当 运行 容器的签名是任务要求的超集时,已经 运行 的容器被认为与另一个任务兼容。

Tez 调度程序使用多个参数来决定任务分配 - 任务位置要求、上述容器的兼容性、集群上的总可用资源以及待处理任务请求的优先级。

当任务完成时,容器 运行 任务可以重新使用——任务可能不会立即分配给它——因为任务可能不存在,数据是本地的容器的节点。 Tez 调度程序首先尝试查找其数据对于容器而言是本地的任务。如果不存在这样的任务,调度程序会在容器中保留特定时间,然后再实际将任何待处理任务分配给此容器。

每个 Tez JVM(或容器)都包含一个对象缓存,可用于在同一容器内的不同任务之间共享数据 运行。这是一个简单的 Key-Object 存储,具有不同级别 visibility/retention。可以缓存对象以供在属于同一顶点的任务中使用,用于 DAG 中的所有任务,以及跨 Tez 会话的任务 运行。