配置 Drillbit 共享资源

为了管理一个集群中多用户共享 Drillbit,在内存中配置 Drill 队列和并发,相关描述在前面的章节有介绍,配置内存

配置查询队列

设置 系统选项 启用和管理查询队列,默认是关闭的。这里有两种类型的队列:大和小。你配置的查询,每个队列允许通过配置在sys.options表选项的最大数量:

  • exec.queue.large
  • exec.queue.small
  • exec.queue.threshold

这里 exec.queue.threshold 的配置决定复杂查询是大还是小。复杂查询有更高的阀值。默认是 30000000,表示一个查询将处理的估计行。序列化将要到来的查询,设置小队列的阀值为 0。

有关这些选项的更多信息,见 性能调整 部分。

配置并行化

默认情况下,Drill 记录操作在并行操作的片段数达 100000。在并行化下,集群的操作会尽可能快,这是一个单一的用户。然而,在一个多租户的情况下,你需要减少基于用户需求的并行化。

并行化配置过程

在下面的 sys.options 选项中配置并行化:

  • planner.width.max_per_node核心节点的最大程度分布。
  • planner.width.max_per_query同一个节点的最大值相同,适用于整个群集执行的查询

planner.width.max_per_node

配置 planner.width.max_per_node 来获得更好的并行化,需要控制好。在这种背景下,宽度是指 fanout 或分配的潜力:运行并行查询在核心节点和群集节点的能力。一个物理计划包括中间业务,称为查询的“片段”,即同时运行,在计划中的每个交换操作,产生了并行性的机会。一个交换操作表示在执行中的一个断点,处理可以分发处理。例如,一个文件的单个进程可以流到一个交换操作,然后由一个多进程聚集成片段。

每个节点的最大宽度定义了一个查询的任何片段的最大程度的并行性,设置适用于集群中单一节点的水平。并行节点的默认最大程度计算如下,与理论最大自动缩减(和向下取整),以至于只有 70% 的实际可用量用于 Drill,计算公式如下:

  1. 总量 = Drillbit 可用量(每个节点)* 每个节点的核数 * 0.7

例如,一个单节点的测试系统是双核,计算公式如下:

  1. 1 * 4 * 0.7 = 3

注意:双核有四个线程。

当你修改默认的配置时,你要用应用一些有意义的数字。系统不会自动缩小你的设置。

planner.width.max_per_query

这里 max_per_query 的值也能够设置最大程度的并行化对于给定的任何查询,但是设置应用于执行的查询是作用于整个集群(多个节点)。实际上,每个查询的实际最大宽度是两个值中的最小值:min((节点数 * width.max_per_node),width.max_per_query)

例如,在一个 4 节点的集群上,width.max_per_node 设置为 6,并且 width.max_per_query 设置为 30:

  1. min((4 * 6),30) = 24

在这种情况下,每个查询的有效的最大宽度是 24,而不是 30。

数据隔离

租户可以在集群上使用 Drill 视图和 模拟身份,去共享数据。