跳到主要内容

调度

本页提供有关为 HivePlus 设置调度策略的指南。请参阅 DAG/任务调度 了解简介。

为了满足特定环境的需求,用户可能需要调整以下配置键(全部在mr3-site.xml中)。

  • mr3.dag.queue.scheme用于将 DAG 分配到任务队列
  • mr3.dag.priority.scheme用于分配 DAG 优先级
  • mr3.vertex.priority.scheme用于更新 Vertex 优先级
  • mr3.taskattempt.queue.scheme用于选择调度任务的方案

对于容量调度,另外两个配置键mr3.dag.queue.capacity.specsmr3.dag.queue.name被使用。

信息

用户可以改用hive-site.xml中的hive.mr3.dag.queue.capacity.specshive.mr3.dag.queue.name,它们分别映射到mr3.dag.queue.capacity.specsmr3.dag.queue.name

通用设置

对于mr3.vertex.priority.scheme,默认值postorder通常是最佳选择。将其设置为normalize可用于为每个查询分配大致(但不完全)公平份额的集群资源。

对于mr3.taskattempt.queue.scheme,默认值indexed通常是最佳选择。

在具有许多持续运行的并发 DAG 的大型集群中,将mr3.taskattempt.queue.scheme设置为spark以获得更高的吞吐量。

启用 LLAP I/O 时,建议将mr3.taskattempt.queue.scheme.strict设置为 true,特别是在读取输入数据可能很慢的公有云环境中。

仅批处理环境

由于吞吐量通常是批处理工作负载的主要关注点,因此将mr3.dag.queue.scheme设置为common,将mr3.dag.priority.scheme设置为fifo

仅交互式环境

如果每个查询应分配严格公平份额的集群资源,请将mr3.dag.queue.scheme设置为individual。在这种情况下,mr3.dag.priority.scheme可以被忽略。

如果不是,请将mr3.dag.queue.scheme设置为common并遵循以下建议:

  • mr3.dag.priority.scheme设置为concurrent以最小化周转时间。
  • 如果每个用户提交的查询具有相似特征,则可以将mr3.dag.priority.scheme设置为fifo以最大化吞吐量。

混合环境

最好启用容量调度,将mr3.dag.queue.scheme设置为capacity,其中批处理查询被路由到优先级最低的任务队列。请参阅 DAG/任务调度 了解设置容量调度的mr3.dag.queue.capacity.specs(或hive.mr3.dag.queue.capacity.specs)的示例。

使用容量调度,用户可以设置配置键hive.mr3.dag.queue.name来为每个单独的查询指定任务队列。

在允许每个用户使用任何任务队列的合作环境中,单个 HiveServer2 实例就足够了。

在限制更严格的环境中,每个任务队列与特定级别的权限相关联,需要多个 HiveServer2 实例。管理员应为每个任务队列创建一个单独的 HiveServer2 实例,每个实例配置有hive.mr3.dag.queue.name的固定值。为了实施访问控制,普通用户不应被允许覆盖hive.mr3.dag.queue.name的值。这可以通过将hive.mr3.dag.queue.name包含在配置键hive.conf.restricted.list的值中来实现。

信息

或者用户可以实现一个自定义 Hive hook 来检查hive.mr3.dag.queue.name的值。

对于mr3.dag.priority.scheme,请遵循仅交互式环境的指南。