如何提高单个dataNode的compaction task的并行度? #38830
-
由于各种原因,需要用到大量partition,以及大量segment。因此需要调整cluster,能够尽快完成大量segment compaction的工作。
我的理解是这样的,如果有10个datanode: 10个data node,每个node对应的slotCap是100, 所以对全局来说,我们总共有1000个compaction task slot。(我的理解一个task slot可以提供一个thread,跑一个compaction task) 请问该理解是否准确?通过以上策略能否有效提高compaction task的效率,达到快速降低segment数目的目的。 另外,我希望避免coordinator每次compaction时,轮询所有的segment,因为发现每次coordinator变得很忙时,scaling query node会出现问题(特别慢)。我希望每个小时,trigger一次所有的compaction,但每次trigger compaction,就可以把所有的segment都给merge了。我理解的没错的话,data coord是有个compaction task queue?每次做compaction plan,submit很多compaction task到这个queue里。然后基于maxParallelTaskNum, mixCompactionUsage, l0DeleteCompactionUsage 以及每个data node的dataNode.slot.slotCap 来从task queue里一个个并发完成compaction task,这个理解对吗?谢谢 |
Beta Was this translation helpful? Give feedback.
Replies: 1 comment 7 replies
-
compaction任务不宜并行,过犹不及 |
Beta Was this translation helpful? Give feedback.
尝试调整这几项:
dataCoord.compaction.maxParallelTaskNum 这是一个集群中所能并行的compaction最大任务数
dataCoord.slot.mixCompactionUsage 这是定义单个compaction任务的“工作量”(虚拟)
dataNode.slot.slotCap 这是定义单个datanode执行compaction任务的能力(虚拟)
假设dataNode.slot.slotCap=16, dataCoord.slot.mixCompactionUsage=8,那么每个datanode同一时间里能执行两个compaction任务。但所有datanode上执行的compaction任务数量不会高于dataCoord.compaction.maxParallelTaskNum