kylin使用笔记
kylin used to summerize
1.create project
2.load table
3.create model
3.1 dimensions
3.2 measures
3.3 partition
4.build cube by model
4.1 dimensions
4.2 measures
4.3 auto merge date
4.4 Aggregation Groups
通过使用多个聚合组,可以大大降低Cube中Cuboid数量
group one
Max Dimension Combination
可以设置多个维度
Includes
一个Cube有(M+N)个维度,如果把这些维度都放置在一个组里,那么默认会有2(M+N) 个Cuboid
Mandatory Dimensions(强制维度)
指的是那些总是会出现在Where条件或Group By 语句里的维度。在指定某个维度为Mandatory Dimensions 后,Kylin可以不予计算那些不包含此维度的Cuboid,从而减少计算量.
Hierarchy Dimensions(层级维度)
例如:年月日、省市区,三级维度联合使用
Joint Dimensions(联合维度)
将多个维度视作为一个维度,在进行组合计算的时候,它们要们一起出现,要么均不出现
通常适用于以下几种情况:
总是一起查询的维度
彼此之间有一定映射关系,如USER_ID 和 EMAIL
基数很低的维度,如性别、布尔类型的属性
gorup two
…
5.Rowkeys
Dimensions 是rowkey,Metrics是value
顺序:高频维度>低频维度
6.Mandatory Cuboids
维度组合白名单(Mandatory Cuboids)确保想要构建的Cuboid能被成功构建
7.Cube Engine
如果你的Cube只有简单度量(如SUM、MIN、MAX),建议使用Spark。如果Cube中有复杂类型度量(如COUNT DISTINCT、TOP_N),建议使用MapReduce。
8.Advanced Dictionaries
Global Dictionary
可以将一个非Integer的值转为Integer值,以便bitmap进行去重,如果要计算的COUNT DISTINCT的列本身已经是Integer类型,那就不需要定义Global Dictionary。并且Global Dictionary会被所有segment共享,因此支持跨segments做上卷去重操作。
Segment Dictionary
虽然也是用于精确计算COUNT DISTINCT 的字典,但与Global Dictionary不同的是,它是基于一个segment的值构建的,因此不支持跨segments的汇总计算。如果你的cube 不是分区的,或者能保证你的所有SQL按照partition column 进行group by,那么最好使用Segment Dictionary 而不是 Global Dictionary,这样可以避免单个字典过大的问题。
9.Advanced ColumnFamily
如果有超过一个的COUNT DISTINCT或 Top_N 度量,可以将它们放在更多的列簇中,以优化HBase的I/O:
10.Configuration Overwrites
kylin.engine.mr.base-cuboid-config-override.mapreduce.reduce.memory.mb=6500
kylin.engine.mr.base-cuboid-config-override.mapred.map.child.java.opts=-Xmx6g
kylin.engine.mr.config-override.mapreduce.map.memory.mb 16384
kylin.engine.mr.config-override.mapreduce.reduce.memory.mb 16384
kylin.storage.hbase.max-region-count 250
kylin.engine.mr.reduce-count-ratio 3
kylin.engine.mr.max-reducer-number 1200
kylin.cube.size-estimate-countdistinct-ratio 0.0735
11.cube构建过程
Cube的构建过程如下,由任务引擎调度执行:
(1).创建临时Hive平表(从Hive中读取数据)
(2).计算各维度的不同值,并收集各Cuboid的统计数据
(3).创建并保存字典
(4).保存Cuboid统计信息
(5).创建HTable
(6).计算Cube(一轮或若干轮计算)
(7).将Cube计算结果转为HFile
(8).加载HFile到HBase
HBase BulkLoad 将HFile导入到HBase 集群
(9).更新Cube元数据
(10).垃圾回收