kylin学习

kylin的概念:
kylin重要的术语
kylin架构:
kylin制作cube的步骤
kylin中cube的设置:
cube几种优化方式:
kylin的count distinct的调优方式(步骤)
参考:http://lxw1234.com/archives/2016/08/714.htm,
http://lxw1234.com/archives/2016/08/712.htm
答:Count Distinct(去重计数)是一种非常常用的指标度量,比如一段时间内的UV、活跃用户数等等;
Apache Kylin提供了两种Count Distinct计算方式,一种是近似的,一种是精确的,精确的Count Distinct指标在Build时候
会消耗更多的资源(内存和存储),Build的过程也比较慢
count distinct有近似的和精准的两种
------近似count distinct-------
Apache Kylin使用HyperLogLog算法实现了近似Count Distinct,提供了错误率从9.75%到1.22%几种精度供选择;
算法计算后的Count Distinct指标,理论上,结果最大只有64KB,最低的错误率是1.22%;
这种实现方式用在需要快速计算、节省存储空间,并且能接受错误率的Count Distinct指标计算
------精准count distinct ----------
从1.5.3版本开始,Kylin中实现了基于bitmap的精确Count Distinct计算方式。当数据类型为tiny int(byte)、small int(short)以及int,
会直接将数据值映射到bitmap中;当数据类型为long,string或者其他,则需要将数据值以字符串形式编码成dict(字典),再将字典ID映射到bitmap;

默认情况下,Kylin在每个Segment中,将数据值编码到一个字典中,同一个数据值,在不同Segment中编码后的ID值也是不同的,
因此在这跨两个Segment中进行Count Distinct计算时候,结果是不正确的;

在1.5.3版本中,Kylin引进了”Global Dictionary”,用来确保同一个数据值编码后的ID值始终是相同的,与此同时,字典的容量也进行了扩充,
一个字典的最大容量达到了20亿,之前默认的字典最大容量为500万。全局字典可以代替之前的默认字典。

当前版本1.5.3的UI中,没有提供定义全局字典的地方,需要手动修改Cube的json:
在这里插入图片描述

在状态为DISABLED的Cube列表中,点击”Admins”菜单下的”Edit(JSON)”,进入Cube JSON描述的编辑页面,

添加下面的JSON:
在这里插入图片描述

其中,在override_kylin_properties 中增加了两个Cube的配置参数,用于增加Mapper的运行内存。
dictionaries 中定义了对USER_ID字段使用全局字典。
也就是说,在定义全局字典同时,最好将mapper的内存提高,因为全局字典非常消耗内存

全局字典存在的局限性
由于Global Dictionary 底层基于bitmap,其最大容量为Integer.MAX_VALUE,即21亿多,如果全局字典中,累计值超过Integer.MAX_VALUE,那么在Build时候便会报错。
因此,使用全局字典还是有容量的限制。

总结:
选择哪种Count Distinct计算方式呢?

  1. 如果能接受1.22%以内的误差,近似计算肯定是最好的方式;
  2. 如果业务需要精确去重计数,那么肯定得选择精确Count Distinct;
  3. 如果不需要跨Segment(天)的去重,或者字段值是tinyint/smallint/int, 或者字段去重后的值小于500万,那么就是用默认字典;
    否则,就需要配置全局字典,同时,如果可以,则是用”reuse”来进行优化。

kylin的streaming table的使用:
参考:http://lxw1234.com/archives/2016/06/686.htm
结合kafka实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值