Apache Kylin 创建cube过程每一步的优化思路。包括创建model的优化思路、创建cube时的优化思路、kylin相关配置文件的优化思路
cube设计优化的目的包括:
创建model的过程以及优化思路
这一步就是输入model名称,下面可以加上描述来表示这个model的信息
优化思路:
这一步是选择事实表和维度表
优化思路:
选择希望作为维度的列
优化思路:
选择希望作为度量的列,需要注意的是度量只能从事实表选择
优化思路:
选择分区列
优化思路:
创建cube的过程以及优化思路
选择model,输入cube名称,输入通知邮件
优化思路
选择维度
优化思路
1.维度选择时可以只选择哪些维度出现在cube中和哪些维度不出现在cube中。这样可以避免维度爆炸。具体操作就是将维度表的主键选为Normal,维度表的其他列选择为Derived
具体案例:https://www.jianshu.com/p/be07962d84cb
选择度量
优化思路
更新设置
合并后cube的查询效率会有所提升,建议开启合并
高级设置,重头戏来了
优化思路
这里可以搜集所有针对一个cube的查询函数,根据sql出现次数,可以根据查询评率在前N个的sql设置对应的N个或更少的聚合组
所有sql中都会出现的维度或者80%的SQL中会出现的维度建议设置为必要维度
年月日和省市区以及类似的有层级关系的维度建议设置为层级维度
对应关系是1对1的维度建议设置为联合维度
建议按照查询每个维度被查询的频率,在rowkey中以从前到后的方式设置维度在rowkey里的顺序
建议根据所有必须要满足的SQL整理对应的维度组合,将这些维度设置到白名单中
如果度量很多,例如超过200个,建议将指标分两份分别放到2个列簇中
这里可以在cube级别覆盖部分 kylin.properties 中的配置
保存cube后一个cube就建好了
每个配置文件的可优化参数
1. hbase中设置压缩格式,建议使用snappy或gzip;
snappy比gzip更快,gzip比snappy压缩率更高,以snappy为例。
kylin.storage.hbase.compression-codec=none
修改为如下
kylin.storage.hbase.compression-codec=snappy
2.每个mapper处理的行数默认为100w,如果集群资源充足,可以调小,增加并行度
kylin.engine.mr.mapper-input-rows=500000
3.每个任务启动的最小reducer可以设置为2
kylin.engine.mr.min-reducer-number=2
4.针对存在超高基维度的cube,构建时可以设置如下参数
kylin.engine.mr.build-uhc-dict-in-additional-step=TRUE
kylin.engine.mr.uhc-reducer-count=5
yarn配置如果是cdh可以通过界面修改,如果是开源hadoop需要修改配置文件
yarn容器的内存决定了mapreduce的并行度,推荐内存配置如下(按需自行修改)
注意:这里的配置不止影响cube,同时会决定spark on yarn任务的内存配置等其他基于yarn组件的任务内存大小。如果不确定修改成多大,请咨询hadoop集群运维或cdh管理员。
1.容器的内存
yarn.nodemanager.resource.memory-mb = 32 GB
2.容器最大内存
yarn.scheduler.maximum-allocation-mb = 32 GB
3.容器虚拟cpu内核
yarn.nodemanager.resource.cpu-vcores = 16 cores
在 $KYLIN_HOME/conf/setenv.sh 中存在对 KYLIN_JVM_SETTINGS 的两种示例配置。
默认配置使用的内存较少,用户可以根据自己的实际情况,注释掉默认配置并取消另一配置前的注释符号以启用另一配置,从而为 Kylin 实例分配更多的内存资源,该项配置的默认值如下:
export KYLIN_JVM_SETTINGS="-Xms1024M -Xmx4096M -Xss1024K -XX`MaxPermSize=512M -verbose`gc -XX`+PrintGCDetails -XX`+PrintGCDateStamps -Xloggc`$KYLIN_HOME/logs/kylin.gc.$$ -XX`+UseGCLogFileRotation -XX`NumberOfGCLogFiles=10 -XX`GCLogFileSize=64M"
# export KYLIN_JVM_SETTINGS="-Xms16g -Xmx16g -XX`MaxPermSize=512m -XX`NewSize=3g -XX`MaxNewSize=3g -XX`SurvivorRatio=4 -XX`+CMSClassUnloadingEnabled -XX`+CMSParallelRemarkEnabled -XX`+UseConcMarkSweepGC -XX`+CMSIncrementalMode -XX`CMSInitiatingOccupancyFraction=70 -XX`+UseCMSInitiatingOccupancyOnly -XX`+DisableExplicitGC -XX`+HeapDumpOnOutOfMemoryError -verbose`gc -XX`+PrintGCDetails -XX`+PrintGCDateStamps -Xloggc`$KYLIN_HOME/logs/kylin.gc.$$ -XX`+UseGCLogFileRotation -XX`NumberOfGCLogFiles=10 -XX`GCLogFileSize=64M"
1.设置hive压缩,以snappy为例
mapreduce.map.output.compress.codec
org.apache.hadoop.io.compress.SnappyCodec
mapreduce.output.fileoutputformat.compress.codec
org.apache.hadoop.io.compress.SnappyCodec
2.
1.设置mapreduce输出压缩,以snappy为例
mapreduce.map.output.compress.codec
org.apache.hadoop.io.compress.SnappyCodec
mapreduce.output.fileoutputformat.compress.codec
org.apache.hadoop.io.compress.SnappyCodec
1.设置mapreduce输出压缩,以snappy为例
mapreduce.map.output.compress.codec
org.apache.hadoop.io.compress.SnappyCodec
mapreduce.output.fileoutputformat.compress.codec
org.apache.hadoop.io.compress.SnappyCodec
https://www.jianshu.com/p/be07962d84cb
http://kylin.apache.org/cn/docs/tutorial/create_cube.html
http://kylin.apache.org/cn/docs/howto/howto_optimize_cubes.html