跳到主要内容

容器组方案

HivePlus 提供了三种将 ContainerGroup 分配给 Vertex 的方案:per-vertexper-map-reduceall-in-one

Per-vertex 方案

在 per-vertex 方案中,每个 Vertex 分配自己的 ContainerGroup。Per-vertex 方案对典型查询没有实际用处,因为 Vertex 之间无法共享 ContainerWorkers。

cg.pervertex

Per-map-reduce 方案

在 per-map-reduce 方案中,所有 Map Vertex 被归入 Map ContainerGroup,所有 Reduce Vertex 被归入 Reduce ContainerGroup。Per-map-reduce 方案可能有其用处,因为 Map Vertex 通常负责读取输入数据,因此具有与主要负责处理实时生成的中间数据的 Reduce Vertex 不同的运行时特性。例如,使用 per-map-reduce 方案,Map Vertex 可以将其所有 TaskAttempts 发送到启用了 LLAP I/O 的 ContainerWorker,而 Reduce Vertex 则在位于 Yarn 容器中的普通 ContainerWorker 中执行其 TaskAttempts。

cg.permapreduce

All-in-one 方案

在 all-in-one 方案中,所有 Vertex 被归入一个 ContainerGroup。All-in-one 方案在大多数情况下是理想的选择,因为它允许任何 TaskAttempt 使用任何 ContainerWorker,从而实现所有 ContainerWorker 的均匀利用率。例如,只有当 DAGAppMaster 队列中没有任何 Vertex 的 TaskAttempts 准备好时,ContainerWorker 才会被释放。

cg.allinone

指定 ContainerGroup 方案

可以在 hive-site.xml 中使用键 hive.mr3.containergroup.scheme 指定 ContainerGroup 方案:

  • per-vertex 表示 per-vertex 方案
  • per-map-reduce 表示 per-map-reduce 方案
  • all-in-one 表示 all-in-one 方案(这是默认方案)

在 per-vertex 或 per-map-reduce 方案下,以下四个键指定分配给每个 ContainerWorker 的资源:

  • hive.mr3.map.containergroup.vcores 用于 Map ContainerWorker 的 CPU 核心数
  • hive.mr3.map.containergroup.memory.mb 用于 Map ContainerWorker 的内存(MB)
  • hive.mr3.reduce.containergroup.vcores 用于 Reduce ContainerWorker 的 CPU 核心数
  • hive.mr3.reduce.containergroup.memory.mb 用于 Reduce ContainerWorker 的内存(MB)

在 all-in-one 方案下,以下两个键指定分配给每个 ContainerWorker 的资源:

  • hive.mr3.all-in-one.containergroup.vcores 用于 CPU 核心数
  • hive.mr3.all-in-one.containergroup.memory.mb 用于内存(MB)