kudu 使用杂记

参考文章: kudu 使用杂记

Kudu支持的数据类型与Java数据类型对照表

Kudu数据类型Java数据类型
BOOLBoolean
INT8Byte
INT16Short
INT32Integer
INT64Long
UNIXTIME_MICROSLong
STRINGSTRING
BINARYbyte[]
FLOATFloat
DOUBLEDouble
DECIMALBigDecimal

impala 和 kuduClient 的选择

  1. impala 的查询速度要快于 kuduClient 的 scan
  2. insert 的速度都很快 upsert/update/delete 如果用主键的话也都很快,但impala的并发性能比较差,所以这种操作尽量用 kuduClient 的原生 api 进行操作
  3. 原生api update、delete、upsert 只能根据主键操作,如果需要其他条件则需要拿到主键再进行操作,因此不如impala写sql方便。

使用impala和原生api操作kudu中遇到的一点问题

1. impala用sql操作 set version = version + 1 ,version 必须是 bigint,因为 version(int)+1 结果是bigint

2. json中的 ” 会被转义为 \” 而当作为sql存入的时候 \” 又会被反译 为 ” 所以,再取出来就不是规范的json格式了。。不过这个问题是所有拼接 sql 提交查询的共性问题

//所以把其中的 \ 替换为 \\ , " 替换为 \"
str = str.replaceAll("\\\\","\\\\\\\\").replaceAll("\"","\\\\\"");
// ps : replaceAll 的参数是正则,所以 \\\\ = 正则 \\ = 真正的 \ 

3. kudu 支持最大300列,每个字段不超过64K(包括String类型和二进制类型)。一般每列不建议超过1k,每行不建议超过100K。

4. impala 大小写不敏感,kudu 大小写敏感,Impala建表时的大小写除了表名其他的所有字段都会变成小写进入kudu

impala 会保存 kudu 的 schema,所以使用impala查询全程大小写混搭无所谓的,但用 kudu 原生api,要注意,表名区分大小写,列名全程小写。

5. impala 建一个数据库 wx ,建一个表 test,在kudu中没有 数据库的概念,impala会把它声明为, impala::db.tableName -> impala::wx.test

6. 使用原生kudu api upsert 时,除了传入主键的几个字段外,not null的字段也必须传入,否则更新不了,如果用 impala 写sql 就会报错的,但用原生 api 正常返回 OperationResponse 里面有错误信息,如果不主动检查是发现不了更新失败的。

7. 用原生 api 进行删除操作,只能set 主键作为条件,其他的字段都不能设置,会失败,在 OperationResponse 可以看到错误信息。但如果用 impala 的话,where 条件就无所谓了,更正常 sql 一样, impala 会处理。

参数设置

Kudu Tablet Server Block Cache Capacity
block_cache_capacity_mb 512M -> 1G


Kudu Tablet Server Hard Memory Limit
memory_limit_hard_bytes 默认 4G -> 30 G  这个参数尽量大,机器 80% 左右

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值