Apache Kylin : Analytical Data Warehouse for Big Data
Welcome to Kylin Wiki.
1. Background
System cube 是 kylin 为了更好地进行自我监控所创建的一组 cube,从 kylin-2.3.0 版本开始支持,更多关于 system cube 的信息可以参考 System Cube Introduction_CN。
在 kylin3.x 和 kylin2.x 中,构建好的 cube 数据存储在 HBase 中,所以system cube 所收集的 query metrics 基本上都是与 HBase rpc 相关的 metrics;而 Kylin4 中实现了新的构建和查询引擎,HBase 存储也已经被新的 Parquet 存储所代替,原有的 metrics 在 kylin4 中已经不存在。
为了使 system cube 能够在 kylin4 中正常工作,帮助用户监控构建和查询情况,需要重新定义新的 system cube query metrics ,相应的 system cube 所依赖的三张 query 相关的 hive 表结构也会发生改变。
2. Configuration
默认情况下,system cube 是关闭的,开启 system cube 需要做以下配置:
kylin.metrics.monitor-enabled=true
kylin.metrics.reporter-query-enabled=true
kylin.metrics.reporter-job-enabled=true
通常情况下,system cube 配合 Dashboard 功能一起使,你可以做以下配置来开启 Dashboard:
kylin.web.dashboard-enabled=true
kylin4 在收集查询相关的 metrics 时,会将每条 query 相关的 metrics 记录作为一条数据暂时保存在内存的 cache 中,当 cache 中的记录保存时间超过 过期时间 或者总记录数超过 最大容量 时,将需要从cache移除的记录包装成一定的格式传递到 MetricsSystem 中,这里的 过期时长 和 最大容量 是通过以下配置决定的,它们的默认值为 300(秒) 和 10000(条),你可以在 kylin.properties 中修改他们的值:
kylin.metrics.query-cache.expire-seconds=300
kylin.metrics.query-cache.max-entries=10000
在 MetricsSystem 中的记录会再经过 一定时间 或者到达 一定数量 ,才会被保存到 hdfs。这里的 一定时间 默认为 10(minutes),一定数量 默认为 10 条。你可以通过修改配置文件 $KYLIN_HOME/tomcat/webapps/kylin/WEB-INF/classes/kylinMetrics.xml 中的配置项来修改这两个值,“index=1” 的配置项表示累计多少条数据必然会插入 Hive,“index=2” 的配置项表示累计多长时间必然会插入 Hive,单位为分钟):
3. 创建 System cube
用户在 Kylin 中的每一个查询或构建操作,都会被记录在 Hive 表中,共有 5 张 Hive 表,它们分别对应了 5 个 System Cube 的事实表:
Hive Table Name | Description | System Cube Name |
hive_metrics_query_execution_qa | Collect query level and spark execution level related metrics | KYLIN_HIVE_METRICS_QUERY_EXECUTION_QA |
hive_metrics_query_spark_job_qa | Collect query spark job level related information | KYLIN_HIVE_METRICS_QUERY_SPARK_JOB_QA |
hive_metrics_query_spark_stage_qa | Collect query spark stage level information | KYLIN_HIVE_METRICS_QUERY_SPARK_STAGE_QA |
hive_metrics_job_qa | Collect job related metrics | KYLIN_HIVE_METRICS_JOB_QA |
hive_metrics_job_exception_qa | Collect job related metrics | KYLIN_HIVE_METRICS_JOB_EXCEPTION_QA |
使用 system cube 之前,需要准备以上 Hive 表和 cube,你可以选择 手动创建 或者 使用 system-cube.sh 脚本自动创建。
3.2 手动创建 System cube
Step1、准备配置文件
在 KYLIN_HOME 目录下创建一个配置文件 SCSinkTools.json。例如:
Step2、生成 metadata
在 KYLIN_HOME 文件夹下运行以下命令生成相关的 metadata:
通过这个命令,相关的 metadata 将会生成且其位置位于 <output_forder>
下。细节如下,system_cube 就是我们的 <output_forder>:
Step3、创建 Hive 表
运行下列命令生成上面表格中的 5 张 Hive 表:
默认情况下,这些表将会创建于 Hive 中名为 kylin 的 database 下,可以通过配置项 kylin.metrics.prefix 对默认值 kylin 进行修改。
Step4、上传 metadata
然后我们需要通过下列命令上传 metadata 到 metastore:
Step5、Reload metadata
最后在 kylin web ui 中 Reload metadata,可以看到一组 system cubes 出现在名为 KYLIN_SYSTEM 的 project 下。
Step6、定时构建system cube
创建 system cube 后,随着 metrics 信息被写入 hive,需要定时构建这些 cube,以便写入 hive 中的 metrics 信息可以在 kylin 中快速查询。
可以使用如下方法来实现定期构建 system cube:
1、创建一个 shell 脚本,通过调用 org.apache.kylin.tool.job.CubeBuildingCLI 来构建系统 Cube。例如:
2、定期运行这个 shell 脚本。可以通过添加一个如下的 cron job 来实现:
3.2 自动创建 System cube
你可以使用 ${KYLIN_HOME}/binsystem-cube.sh 的脚本来帮助你自动完成以上操作:
创建System Cube:
sh system-cube.sh setup
构建System Cube:
sh bin/system-cube.sh build
为System Cube 添加定时任务:
bin/system.sh cron