1

当 Apache tez 重用容器时,会发生什么过程。谁能给我解释清楚?

4

1 回答 1

1

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

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

Tez 调度器使用几个参数来决定任务分配——任务局部性要求、如上所述的容器兼容性、集群上的总可用资源以及待处理任务请求的优先级。

当任务完成,并且运行该任务的容器变得可重用时——任务可能不会立即分配给它——因为任务可能不存在,其数据是容器节点的本地数据。Tez 调度程序首先尝试找到一个任务,该任务的数据对于容器来说是本地的。如果不存在这样的任务,调度程序会在容器上保留特定的时间,然后再将任何挂起的任务实际分配给该容器。

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

于 2017-07-27T14:22:01.177 回答