Kylin

Kylin

Kylin基础概念
    即席查询工具,多为分析工具,OLAP(在线分析处理)
    Cube:多个维度组合进行随机数据聚合的其中一个组合。
    REST Server:是一套面向应用程序的开发接口,提供了包括查询、触发cube、获取元数据等
    查询引擎:获取并解析用户的查询,将结果返回,spark作为查询引擎。
    路由层:将SQL转换为cube,在已有的cube上查询步出来,就转换为直接读取源文件
    元数据管理:存储cube的元数据,存储在mysql。
    构建引擎:从MR作为cube构建,替换为Spark(由原来的逐层构建变成元数据/构建cube),parquet替换hbase。
    单节点能支撑70/s查询。
Kylin流程
    1.先创建项目。然后进行数据源的同步。
    2.构建模型(new model),选择对应的事实表、lookup表(维度表) 链接条件
    3.选择对应的维度:(后面再构建cube的时候可以选择这些字段) 选择对应的指标。
    4.选择分区字段格式(事实表)、维表里面的脏数据进行过滤
    5.构建cube(new cube) ,选择维度字段(结果就包含这些字段了),维表里面的需要改成normal维度
    6.选择度量值,(Refresh Setting)底层sgement合并文件   
    7.最终的结果查询:还是查询以前的表名,只不过会返回很快。
        连接方式和字段、指标等 都不能超过设置的model,查询没有的字段会报错。
        事实表在前,维度表在后,否则会报错(inner join也是一样的) 只能count(*) 或者建的指标
定时构建
    python -c "import base64;print base64.standard_b64encode('ADMIN','KYLIN')" 获取密钥
    endTime:过滤分区时间
    curl -X PUT -H "Authorization: Basic MMMMMM" -H 'Content-Type: application/json' -d '{"endTime":'$endTime', "buildType":"BUILD"}' http://ip:7070/kylin/api/cubes/my_clone/rebuild
Kylin优化理论
    Sparder:后台一直运行的spark进程,负责接收查询任务
        kylin.query.spark-conf 开头的参数作为运行参数
    衍生维度:使用的时候,加快cube构建的速度,减慢查询得速度。
    聚合组:是一种剪枝工具。
        强制维度(Mandatory Dimensions):必须包含这个维度,自己不能单独出现。
        层级维度(Hierarchy Dimensions):年月日,省市区,低层级不能单独出现。
        联合维度(Joint Dimensions):要么一起出现,要么不出现。
#
    Cube构建;设置构建参数 
        spark.executor.memory:
            文件>100and 精确去重 = 20G
            文件>100or (文件>10and 精确去重)= 16G
            文件>10G  or (文件>1G  and 精确去重)= 10G
            文件>1G   or 精确去重               = 4G  other 1G
        spark.executor.cores:
            文件>1G   or 精确去重   =5  other 1
        spark.executor.memoryOverhead:
            文件>100and 精确去重 = 6G
            文件>100or (文件>10and 精确去重)= 4G
            文件>10G  or (文件>1G  and 精确去重)= 2G
            文件>1G   or 精确去重               = 1G  other 512M
        spark.executor.instances:
            1.kylin.engine.base.executor.instances=5
            2.cubeid个数计算:0-100:1 100-500:2 500-1000:3 1000+:4  结果*1的值
            3.yarn资源可获取的  和上面值取最小值
        spark.sql.shuffle.partitions =  max(2,最大文件大小/32M)
        全局字典:精确去重:字段映射 + bitmap  减少下面的值,加快构建速度
            kylin.dictionary.globalV2-threshold-bucket-size=500000
            使用全局字典指标:(dount distinct)  Return Type:(Precisely (More Memory And Storage Needed))
            需要yarn资源配置:设置单个yarn资源的最大核数
                <property><name>yarn.scheduler.maximum-allocation-vcores</name><value>8</value></property>
            查看全局字典:hdfs 上有一个dict/global_dict/EMP/  目录 每次构建都生成新的
        Rowkeys:顺序设置很重要,过滤维度放在前面,基数维度小的放前面
        Shard By:表示最终生成文件partationBy 减少扫描文件
    减少小文件:
        kylin.storage.columnar.shard-size-mb=128M ShardBy文件最大大小
        kylin.storage.columnar.shard-rowcount=2500000 ShardBy文件最大行数
        kylin.storage.columnar.shard-countdistinct-rowcount=1000000 精确去重cube的bitmap大小
        kylin.storage.columnar.repartition-threshold-size-mb=128M 每个parquet文件的最大大小
        调整上面大小,合并小文件
        spark.sql.files.maxPartitionBytes=128M 合并小文件进行读取
3.X Cube构建算法
    逐层构建:构建4个维度->构建3个维度->构建2个维度->构建1个维度 HDFS 效率比较低,速度慢
    快速构建:整个任务使用一个MAP/REDUCE 进行聚合  其实就是Combiner 
posted @ 2022-10-20 21:22  Kotlin  阅读(154)  评论(0编辑  收藏  举报
Live2D