THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!

Apache Kylin : Analytical Data Warehouse for Big Data

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

在集成两者的过程中, 我们主要修改 SCCreator, 在这里我们主要适配了 Kafka Topic 和 Real-time OLAP 所需的一些额外元数据的创建工作, 这两个任务分别来由 KafkaTopicCreator 和 StreamingMetadataCreator 来负责, 最后由 SCCreator 来统一调度. 对于 Metrics System 则不需要改动.

三. 如何使用

1. 开启 Metrics 信息收集信息收集,跟正常步骤一样

Code Block
languagejava
themeRDark
titlekylin.properties
linenumberstrue
kylin.metrics.monitor-enabled=true
kylin.metrics.reporter-job-enabled=true
kylin.metrics.reporter-query-enabled=true
kylin.web.dashboard-enabled=true

2. 准备 System Cube 所需的 Cube 参数文件

我们需要提供一个 Json Array, Array包含的对象为 MetricsSinkDesc.Array,存成一个文件命名为 sink.json , Array 包含的对象为 MetricsSinkDesc。(shaofengshi:对于kafka还需要kylin.cube.algorithm=INMEM这个参数吗?storage_type=3 是不是就是realtime olap?MetricsSinkDesc 这里好像没有看到有任何关系;这个sink.json 就是完整文件了吧)

Code Block
languagexml
themeRDark
titlesink.json
linenumberstrue
[
  {
    "sink": "hive",
    "storage_type": 2,
    "cube_desc_override_properties": {
      "kylin.cube.algorithm": "INMEM",
      "kylin.cube.max-building-segments": "1"
    }
  },
  {
    "sink": "kafka",
    "storage_type": 3,
    "cube_desc_override_properties": {
      "kylin.cube.algorithm": "INMEM",
      "kylin.stream.cube.window": 28800,
      "kylin.stream.cube.duration": 3600,
      "kylin.stream.segment.retention.policy": "fullBuild",
      "kylin.cube.max-building-segments": "20"
    },
    "table_properties": {
      "bootstrap.servers": "{YOUR_KAFKA_SERVERS_LIST}"
    }
  }
]

3. 运行命令,使用上面的sink.json 生成 System Cube 元数据

Code Block
themeRDark
linenumberstrue
./bin/kylin.sh org.apache.kylin.tool.metrics.systemcube.SCCreator -inputConfig sink.json  -output system-cube

4. 创建 Kafka Topic

在 create在 bin/create_kafka_topic_for_system_cubes.sh 中, 根据需求来修改参数 zookeeper 和 partitions. (shaofengshi: 这个脚本是kylin自带的吧,确认一下)

Code Block
languagebash
themeRDark
sh create_kafka_topic_for_system_cubes.sh

5. 导入 从本地导入 System Cube 元数据的定义

Code Block
languagebash
themeRDark
sh bin/metastore.sh restore system-cube/

6. 更新 kylinMetrics.xml (shaofengshi: 这个文件具体位置在哪里?最好写一下)

将默认的 BlockingReservoir 改为 InstantReservoir, 并且同时修改 ReservoirReporter 和 Sink 的类型 (shaofengshi: 修改成kafka集群?最好明确说一下修改成什么).

Code Block
languagexml
themeRDark
titlekylinMetrics.xml
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns="http://www.springframework.org/schema/beans"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">

    <description>Kylin Metrics Related Configuration (System Cube)</description>

    <!-- A Reservoir which don't staged metrics message at all, emit it in no time. Maybe good for debug purpose.-->
    <bean id="instantReservoir" class="org.apache.kylin.metrics.lib.impl.InstantReservoir"/>

    <bean id="kafkaSink" class="org.apache.kylin.metrics.lib.impl.kafka.KafkaSink"/>

    <bean id="initMetricsManager" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
        <property name="targetClass" value="org.apache.kylin.metrics.MetricsManager"/>
        <property name="targetMethod" value="initMetricsManager"/>
        <property name="arguments">
            <list>
                <!-- 
                Sink of System Cube. 
                -->
                <ref bean="kafkaSink"/>

                <!--
                Bind properties for each ActiveReservoirReporter.   
                -->    
                <map key-type="org.apache.kylin.metrics.lib.ActiveReservoir" value-type="java.util.List">

                    <!-- Each ActiveReservoir can have multi ReservoirReporter -->
                    <entry key-ref="instantReservoir">
                        <list>
                            <bean class="org.apache.kylin.common.util.Pair">
                                <!-- Implementation of ReservoirReporter-->
                                <property name="first"
                                          value="org.apache.kylin.metrics.lib.impl.kafka.KafkaReservoirReporter"/>
                                <!-- Properties for specific ReservoirReporter-->
                                <property name="second">
                                    <props>
                                        <prop key="bootstrap.servers">cdh-master:9092,cdh-worker-1:9092,cdh-worker-2:9092</prop>
                                    </props>
                                </property>
                            </bean>
                        </list>
                    </entry>
                </map>
            </list>
        </property>
    </bean>
</beans>

7. 启动 Kylin 并启用 System Cube (shaofengshi: 这里最好提供一个系统截图)

四. 对比

通过将 Sink 设置为 Kafka, 并且使用 Kylin Realtime OLAP 来摄入和构建新的 来流式摄入和构建 System Cube, 我们可以实现:

  1. Metrics 消息从其产生到其对 Kylin 查询系统可见的延迟, 从之前的小时级别延迟下降为秒级延迟. 这将大大提高 Dashboard 数据展示结果的实时性, 十分有利于问题的及时发现和诊断.
  2. 避免之前的定时调度 Cube 构建任务的步骤, 可以依赖于 Real-time OLAP 来完成摄入和自动化调度构建任务. 
  3. Kylin 自己消费自己的 Metrics 信息,减少对外依赖,实现功能闭环。

五. 参考链接

http://kylin.apache.org/docs/tutorial/setup_systemcube.html

...

http://kylin.apache.org/blog/2016/08/27/query-metrics-in-kylin/

关于 System Cube 的 JIRA issue :

Jira
serverASF JIRA
serverId5aa69414-a9e9-3523-82ec-879b028fb15b
keyKYLIN-2721

关于 Dashboard 的 JIRA issue :

Jira
serverASF JIRA
serverId5aa69414-a9e9-3523-82ec-879b028fb15b
keyKYLIN-2726

System Cube 和 Real-time OLAP 的集成的 JIRA issue :

Jira
serverASF JIRA
serverId5aa69414-a9e9-3523-82ec-879b028fb15b
keyKYLIN-4371

(shaofengshi: 这里不需要提供system cube和dashboard的jira了,可以直接提供官网的链接,因为是已经发布的功能了;对于这次集成,除了提供jira外,也请告知社区用户此功能预计在哪个版本中发布,大约多久)