KUDU使用注意点和心得体会

Kudu使用了一段时间,记录下中间踩过的坑(基础用法跳过)

1、Kudu创建表时,PK字段一定要写在表结构的最前面。

2、Hash分区只能在创建表时修改,而Range分区可以在使用过程中动态改变。

3、Range分区在动态改变时,通过python api新增一个Range分区(key代表字段名称,ymd代表"yyyy-MM-DD")示例代码如下:

kudu_tbl = kudu_client.table(tbl_name)
alterer = kudu_client.new_table_alterer(kudu_tbl)
alterer.add_range_partition(
    lower_bound={key: ymd}, upper_bound={key: ymd},
    lower_bound_type=kudu.INCLUSIVE_BOUND, upper_bound_type=kudu.INCLUSIVE_BOUND)
table = alterer.alter()

4、一次性将大量数据读入Kudu,会报Server timeout错误,解决方案2个(可以同时使用):

(1)增加memory_limit_hard_bytes配置的值

(2)将大量数据分批写入Kudu表

5、Kudu的Python api需要注意版本选择,目前部门用的cdh5.13,kudu1.4,但是python api用的1.4(没有匹配的1.5版本,安装python api时要注意)

6、通过impala使用kudu表,既可以通过impala直接创建kudu表(store as kudu),也可以先单独创建kudu表,再通过通过impala做外部表映射(create external table)。

7、通过cdh的clouder manager重启kudu服务后,

通过命令:kudu cluster ksck <master_addresses> 查看kudu各个服务和节点状态时,开始一段时间各个kudu表会不可用,需要等待一段时间才会正常(重启之后,kudu内部需要自动做各种处理工作),这时不要慌,耐心等待即可。

8、通过python的os.system提交命令imapal sql时,注意字段名称是否含有特殊字段,若有则需要做转义,否则impala-shell运行时会根据特殊字段切分字段名称,导致报错。

9、读取Kudu表时,需要根据分区字段读取,尽可能少加载数据,切记一次性读取全量表(数据表很大时,读取性能会有很大问题)。

10、通过python api写入数据时 ,需要控制flush数据量,否则会内存问题,建议每间隔N条记录(根据实际情况选择)刷新一次。

11、kudu表的现有限制(未来版本限制或许会移除),举几个需要重点注意的栗子:

  • 字段数目不要超过300
  • PK的类型选择,不能float和bool等
  • 单个表在单个tablet server上的最大tablets数目为60,单个tablet server上最大tablet数目为2000(在设计表分区的时候需要重点考虑)

猜你喜欢

转载自blog.csdn.net/qm5132/article/details/82797516