天天看点

客快物流大数据项目(八十三):Kudu的优化

文章目录

​​Kudu的优化​​

​​一、Kudu关键配置​​

​​二、Kudu的使用限制​​

​​1、主键​​

​​2、Cells​​

​​3、字段​​

​​4、表​​

​​5、其他限制​​

​​6、分区限制​​

​​7、扩展建议和限制​​

​​8、守护进程​​

​​9、集群管理限制​​

​​10、复制和备份限制​​

​​11、Impala集成限制​​

​​12、Spark集成限制​​

Kudu的优化

一、Kudu关键配置

TabletServer 在开始拒绝所有传入的写入之前可以消耗的最大内存量:memory_limit_h

ard_bytes=1073741824

客快物流大数据项目(八十三):Kudu的优化

分配给 Kudu Tablet Server 块缓存的最大内存量:block_cache_capacity_mb=512

客快物流大数据项目(八十三):Kudu的优化

二、Kudu的使用限制

1、主键

  • 创建表后,不能更改主键。必须删除并重新创建表以选择新的主键。
  • 创建表的时候,主键必须放在最前边。
  • 主键不能通过 update 更新,如果要修改主键就必须先删除行,然后重新插入。这种操作不是原子性的。(kudu的删除和插入操作无法事务)
  • 不支持自动生成主键,可以通过内置的 uuid 函数表示为主键值。
  • 联合主键由 kudu 编码后,大小不能超过 16KB。

2、Cells

3、字段

  • 默认情况下,Kudu 不允许创建超过 300 列的表。官方建议使用较少列的 Schema 设计以获得最佳性能。
  • 不支持 CHAR、VARCHAR、DATE 和数组等复杂类型。
  • 现有列的类型和是否允许为空,一旦设置后,是不可修改的。
  • Decimal 类型的精度不可修改。也不允许通过更改表来更改 Decimal 列的精度和小数位数
  • 删除列不会立即回收空间。首先必须运行压缩。

4、表

  • 表中的副本数必须为奇数,最多为 7
  • 复制因子(在表创建时设置)不能更改
  • 无法手动运行压缩,但是删除表将立即回收空间

5、其他限制

  • 不支持二级索引。
  • 不支持多行事务。
  • 不支持外键。
  • 列名和表名之类的标识符仅限于有效的 UTF-8 字符串并且其最大长度为 256 个字符。

6、分区限制

  • 表必须根据一个主键 or 联合主键被预先切成 tablet,不支持自动切。表被创建后不支持修改分区字段,支持添加和删除 range 分区(意思分区表,分区字段需提前定义好,kudu 不会自动分)。
  • 已经存在的表不支持自动重新分区,只能创建新表时指定。
  • 丢失副本时,必须通过手动修复方式来恢复。

7、扩展建议和限制

  • 建议 TabletServer 最多为 100 台。
  • 建议 Master 最多 3 台。
  • 建议每个 TabletServer 最大数据为 8T(压缩后)。
  • 建议每台 TabletServer 的 tablet 数为 1000,最多 2000。
  • 创建表的时候,建议在每个 Tablet Server 上,每个表的 Tablet 数最大为 60,也就是 3 节点的话,3 副本,创表分区最大 60,这样每个单 TabletServer 上该表的 Tablets 也就为 60。
  • 建议每个 Tablet 最大为 50GB,超出后可能导致压缩和启动有问题。
  • 建议单 Tablet 的大小<10GB。

8、守护进程

  • 部署至少 4G 内存,理想情况下应超过 16GB。
  • 预写日志(WAL)只能存储在一个磁盘上。
  • 不能直接删除数据目录,必须使用重新格式化数据目录的方式来达到删除目的。
  • TabletServer 不能修改 IP 和 PORT。
  • Kudu 对 NTP 有严格要求,如果时间不同步时,Kudu 的 Master 和 TabletServer 会崩溃。
  • Kudu 仅使用 NTP 进行了测试,不支持其他时间同步工具。

9、集群管理限制

  • 不支持滚动重启。
  • 建议 Kudu 集群中的最大点对点延迟为 20 毫秒。推荐的最小点对点带宽是 10GB。
  • 如果要使用位置感知功能将平板服务器放置在不同的位置,官方建议先测量服务器之间的带宽和延迟,以确保它们符合上述指导原则。
  • 首次启动群集时,必须同时启动所有 Master 服务。

10、复制和备份限制

  • Kudu 当前不支持任何用于备份和还原的内置功能。鼓励用户根据需要使用 Spark 或 Impala之类的工具导出或导入表。

11、Impala集成限制

  • 创建 Kudu 表时,建表语句中的主键字段必须在最前面。
  • Impala 无法更新主键列中的值。
  • Impala 无法使用以下命令创建 Kudu 表 VARCHAR 或嵌套类型的列。
  • 名称包含大写字母或非 ASCII 字符的 Kudu 表在 Impala 中用作外部表时,必须分配一个备用名称。
  • 列名包含大写字母或非 ASCII 字符的 Kudu 表不能用作 Impala 中的外部表。可以在 Kudu 中重命名列以解决此问题。
  • !=和 like 谓词不会下推到 Kudu,而是由 Impala 扫描节点评估。相对于其他类型的谓语,这会导致降低性能。
  • 使用 Impala 进行更新,插入和删除是非事务性的。如果查询在部分途中失败,则其部分效果不会回滚。
  • 单个查询的最大并行度受限于 Table 中 Tablet 的数量。为了获得良好的分析性能,每位主机目标为 10 片或更多 tablets。
  • Impala 的关键字(PARTITIONED、LOCATION、ROWFORMAT)不适用于在创建 Kudu 表时使用。

12、Spark集成限制

  • 必须使用 JDK8,自 Kudu-1.5.0 起,Spark 2.2 是默认的依赖项版本。
  • Kudu 表只能在 Spark SQL 中注册为临时表。
  • 无法使用 HiveContext 查询 Kudu 表。
  • 📢博客主页
  • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢本文由 Lansonli 原创
  • 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨

继续阅读