Bucket(分桶)数量设置不当带来的问题
问题描述:
上线运行一段时间后,随着越来越多的数据增长,集群每次重启后一周左右,读写就会开始变得越来越慢,直到无法正常进行读写。
问题处理:
- 对数仓表的 Schema 的分析,发现有些表数据并不大,但是 Bucket 却设置的非常大
- 通过
show data from table
命令列出所有表Bucket信息,大部分的Bucket设置不合理 - 按照官方的建议将调整Bucket设置,调整后集群逐步恢复正常的读写
关于 Partition 和 Bucket 的数量和数据量的建议
- 一个表的 Tablet 总数量等于 (Partition num * Bucket num)
- 数量原则: 一个表的 Tablet 数量,在不考虑扩容的情况下,推荐略多于整个集群的磁盘数量
- 数据量原则:单个 Tablet 的数据量理论上没有上下界,但建议在 1G - 10G 的范围内。如果单个 Tablet 数据量过小,则数据的聚合效果不佳,且元数据管理压力大。如果数据量过大,则不利于副本的迁移、补齐,且会增加 Schema Change 或者 Rollup 操作失败重试的代价(这些操作失败重试的粒度是 Tablet)
- **当 Tablet 的数据量原则和数量原则冲突时,建议优先考虑数据量原则
- 在建表时,每个分区的 Bucket 数量统一指定。但是在动态增加分区时(
ADD PARTITION
),可以单独指定新分区的 Bucket 数量。可以利用这个功能方便的应对数据缩小或膨胀 - 一个 Partition 的 Bucket 数量一旦指定,不可更改。所以在确定 Bucket 数量时,需要预先考虑集群扩容的情况。比如当前只有 3 台 host,每台 host 有 1 块盘。如果 Bucket 的数量只设置为 3 或更小,那么后期即使再增加机器,也不能提高并发度
- 举一些例子:假设在有10台BE,每台BE一块磁盘的情况下。如果一个表总大小为 500MB,则可以考虑4-8个分片。5GB:8-16个分片。50GB:32个分片。500GB:建议分区,每个分区大小在 50GB 左右,每个分区16-32个分片。5TB:建议分区,每个分区大小在 50GB 左右,每个分区16-32个分片
注:表的数据量可以通过 SHOW DATA 命令查看,结果除以副本数,即表的数据量
本文转载自: https://blog.csdn.net/weixin_47298890/article/details/128948432
版权归原作者 修破立生 所有, 如有侵权,请联系我们删除。
版权归原作者 修破立生 所有, 如有侵权,请联系我们删除。