MR3 Shuffle Handler
MR3 在运行时系统中提供自己的 shuffle handler。Shuffle handler 作为 DaemonTask 实现,ContainerWorker 运行自己的 shuffle handler 线程。凭借自己的 shuffle handler,MR3 可以在没有外部 shuffle 服务的环境中运行,最明显的是在 Kubernetes 上。
运行多个 shuffle handler
MR3 与现有执行引擎(如 Tez 和 Spark)的区别在于允许 ContainerWorker 并发运行多个 shuffle handler。 在 Tez 的情况下,每个节点上只能运行一个 shuffle handler,这意味着节点上的所有 Tez 容器共享公共 shuffle handler。在 Spark 的情况下,工作守护进程只能运行一个 shuffle handler。相比之下,MR3 的 ContainerWorker 可以运行多个自己的 shuffle handler。

在单个 ContainerWorker 中支持多个 shuffle handler 是一个重要特性,结合推测执行,使 MR3 能够规避 Fetch 延迟。更多详情请参阅消除 Fetch 延迟。