Kylin优化实战(一):资源调整

     Kylin优化的角度很多,一边做一边更新。

Kylin介绍:http://kylin.apache.org/cn/ 中文文档,比较友好。

Kylin搭建:https://blog.csdn.net/xiaozhaoshigedasb/article/details/87942242

     首先,就是资源方面,实际上对于Kylin的计算来说,要求的资源不算多,因为底层(默认)计算引擎是M-S-R范式基于磁盘的计算框架MapReduce,尤其是CPU,要求很低很低,但是内存配置高点的话, 还是对性能提升有好处的,一方面是计算,缓冲区大小变大,对计算帮助很大; 另外一反面就是查询,因为Kylin中间结果的存储是依托于HBase的,HBase本身就很吃内存。

     MapReduce方面,可以通过在Kylin的配置文件中覆盖掉原有MapReduce的参数配置。在conf目录下,kylin_job_conf.xml 和 kylin_job_conf_inmem.xml 中参数,以键值对的性质,按照如下格式替换:     kylin.engine.mr.config-override. =

  • 从 Yarn上 获得更多内存,可以这样设置:
    kylin.engine.mr.config-override.mapreduce.map.java.opts=-Xmx7g 和 kylin.engine.mr.config-override.mapreduce.map.memory.mb=10240

  • 指定MR任务的资源队列,可以设置(在此之前,需要现在yarn上配置资源队列):
    kylin.engine.mr.config-override.mapreduce.job.queuename={queueName}

  • 配置MR任务执行时的一些内存参数:
    mapreduce.reduce.shuffle.merge.percent(default0.66)溢写到磁盘
    mapreduce.task.io.sort.mb(default:100)根据不同的硬件尤其是内存的大小来调整,调大的话,会减少磁盘spill的次数此时如果内存足够的话,一般都会显著提升性能

     这个配置可以在项目或者cube级别。HBase方面,根据自己集群配置的硬件条件,尽量给大内存。在cube构建过程中,对HBase的读写会非常频繁,合理的分配内存至关重要。

HBase 存储
kylin.storage.hbase.table-name-prefix:默认值为 KYLIN_
kylin.storage.hbase.namespace:指定 HBase 存储默认的 namespace,默认值为 default
kylin.storage.hbase.coprocessor-local-jar:指向 HBase 协处理器有关 jar 包
kylin.storage.hbase.coprocessor-mem-gb:设置 HBase 协处理器内存大小,默认值为 3.0(GB)
kylin.storage.hbase.run-local-coprocessor:是否运行本地 HBase 协处理器,默认值为 FALSE
kylin.storage.hbase.coprocessor-timeout-seconds:设置超时时间,默认值为 0
kylin.storage.hbase.region-cut-gb:单个 Region 的大小,默认值为 5.0
kylin.storage.hbase.min-region-count:指定最小 Region 个数,默认值为 1
kylin.storage.hbase.max-region-count:指定最大 Region 个数,默认值为 500
kylin.storage.hbase.hfile-size-gb:指定 HFile 大小,默认值为 2.0(GB)
kylin.storage.hbase.max-scan-result-bytes:指定扫描返回结果的最大值,默认值为 5242880(byte),即 5(MB)
kylin.storage.hbase.compression-codec:是否压缩,默认值为 none,即不开启压缩
kylin.storage.hbase.rowkey-encoding:指定 Rowkey 的编码方式,默认值为 FAST_DIFF
kylin.storage.hbase.block-size-bytes:默认值为 1048576
kylin.storage.hbase.small-family-block-size-bytes:指定 Block 大小,默认值为 65536(byte),即 64(KB)
kylin.storage.hbase.owner-tag:指定 Kylin 平台的所属人,默认值为 [email protected]
kylin.storage.hbase.endpoint-compress-result:是否返回压缩结果,默认值为 TRUE
kylin.storage.hbase.max-hconnection-threads:指定连接线程数量的最大值,默认值为 2048
kylin.storage.hbase.core-hconnection-threads:指定核心连接线程的数量,默认值为 2048
kylin.storage.hbase.hconnection-threads-alive-seconds:指定线程存活时间,默认值为 60
kylin.storage.hbase.replication-scope:指定集群复制范围,默认值为 0
kylin.storage.hbase.scan-cache-rows:指定扫描缓存行数,默认值为 1024
JVM参数调优(在HBase的env脚本中进行调整)
export HBASE_OPTS="-verbose:gc -XX:+PrintGCDetails -Xloggc:${HBASE_LOG_DIR}/hbase-gc.log -XX:+PrintGCTimeStamps -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime \
-server -Xmx20480m -Xms20480m -Xmn10240m -Xss256k  -XX:SurvivorRatio=4 -XX:MaxPermSize=256m -XX:MaxTenuringThreshold=15 \
-XX:ParallelGCThreads=16 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC  -XX:CMSFullGCsBeforeCompaction=5 -XX:+UseCMSCompactAtFullCollection \
-XX:+CMSClassUnloadingEnabled  -XX:CMSInitiatingOccupancyFraction=70 -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSMaxAbortablePrecleanTime=5000     \

     Kylin的参数调整方面,有关cube设计、大小、以及合并等参数:

数据类型精度(一般不做修改):
kylin.source.hive.default-varchar-precision:指定 varchar 字段的最大长度,默认值为256
kylin.source.hive.default-char-precision:指定 char 字段的最大长度,默认值为 255
kylin.source.hive.default-decimal-precision:指定 decimal 字段的精度,默认值为 19
kylin.source.hive.default-decimal-scale:指定 decimal 字段的范围,默认值为 4
Cube 设计:

kylin.cube.ignore-signature-inconsistency:Cube desc 中的 signature 信息能保证 Cube 不被更改为损坏状态,默认值为 FALSE
kylin.cube.aggrgroup.max-combination:指定一个 Cube 的聚合组 Cuboid 上限,默认值为 32768
kylin.cube.aggrgroup.is-mandatory-only-valid:是否允许 Cube 只包含 Base Cuboid,默认值为 FALSE,当使用 Spark Cubing 时需设置为 TRUE
kylin.cube.rowkey.max-size:指定可以设置为 Rowkeys 的最大列数,默认值为 63,且最大不能超过 63
kylin.cube.allow-appear-in-multiple-projects:是否允许一个 Cube 出现在多个项目中
kylin.cube.gtscanrequest-serialization-level:默认值为 1
kylin.metadata.dimension-encoding-max-length:指定维度作为 Rowkeys 时使用 fix_length 编码时的最大长度,默认值为 256
kylin.web.hide-measures: 隐藏一些可能不需要的度量,默认值是RAW
Cube 大小估计:

kylin.cube.size-estimate-ratio:普通的 Cube,默认值为 0.25
kylin.cube.size-estimate-memhungry-ratio:已废弃,默认值为 0.05
kylin.cube.size-estimate-countdistinct-ratio:包含精确去重度量的 Cube 大小估计,默认值为 0.5
kylin.cube.size-estimate-topn-ratio:包含 TopN 度量的 Cube 大小估计,默认值为 0.5
Cube 构建算法:

kylin.cube.algorithm:指定 Cube 构建的算法,参数值可选 auto,layer 和 inmem, 默认值为 auto,即 Kylin 会通过采集数据动态地选择一个算法 (layer or inmem),如果用户很了解 Kylin 和自身的数据、集群,可以直接设置喜欢的算法
kylin.cube.algorithm.layer-or-inmem-threshold:默认值为 7
kylin.cube.algorithm.inmem-split-limit:默认值为 500
kylin.cube.algorithm.inmem-concurrent-threads:默认值为 1
kylin.job.sampling-percentage:指定数据采样百分比,默认值为 100
Cube 构建:

kylin.storage.default:指定默认的构建引擎,默认值为 2,即 HBase
kylin.source.hive.keep-flat-table:是否在构建完成后保留 Hive 中间表,默认值为 FALSE
kylin.source.hive.database-for-flat-table:指定存放 Hive 中间表的 Hive 数据库名字,默认值为 default,请确保启动 Kylin 实例的用户有操作该数据库的权限
kylin.source.hive.flat-table-storage-format:指定 Hive 中间表的存储格式,默认值为 SEQUENCEFILE
kylin.source.hive.flat-table-field-delimiter:指定 Hive 中间表的分隔符,默认值为 \u001F
kylin.source.hive.redistribute-flat-table:是否重分配 Hive 平表,默认值为 TRUE
kylin.source.hive.redistribute-column-count:重分配列的数量,默认值为 3
kylin.source.hive.table-dir-create-first:默认值为 FALSE
kylin.storage.partition.aggr-spill-enabled:默认值为 TRUE
kylin.engine.mr.lib-dir:指定 MapReduce 任务所使用的 jar 包的路径
kylin.engine.mr.reduce-input-mb:MapReduce 任务启动前会依据输入预估 Reducer 接收数据的总量,再除以该参数得出 Reducer 的数目,默认值为 500(MB)
kylin.engine.mr.reduce-count-ratio:用于估算 Reducer 数目,默认值为 1.0
kylin.engine.mr.min-reducer-number:MapReduce 任务中 Reducer 数目的最小值,默认值为 1
kylin.engine.mr.max-reducer-number:MapReduce 任务中 Reducer 数目的最大值,默认值为 500
kylin.engine.mr.mapper-input-rows:每个 Mapper 可以处理的行数,默认值为 1000000,如果将这个值调小,会起更多的 Mapper
kylin.engine.mr.max-cuboid-stats-calculator-number:用于计算 Cube 统计数据的线程数量,默认值为 1
kylin.engine.mr.build-dict-in-reducer:是否在构建任务 Extract Fact Table Distinct Columns 的 Reduce 阶段构建字典,默认值为 TRUE
kylin.engine.mr.yarn-check-interval-seconds:构建引擎间隔多久检查 Hadoop 任务的状态,默认值为 10(s)

你可能感兴趣的:(Kylin)