OLAP引擎Kylin——Cube构建过程

  |   0 评论   |   1,816 浏览

概述

任务流如下图

image.png

我们可以通过Job页看到详细信息

image.png

Cube构建过程

作业整体描述

Job作业的整体描述信息,如Job名称、Job的ID、Job状态、耗时、MapReduce等待时长等

image.png

生成中间临时数据

image.png

如果存在临时表就删除

USE default
DROP TABLE IF EXISTS kylin_intermediate_pvuv_cube_bd1feadc_c967_4638_8125_e879c866b481;

创建外部表

CREATE EXTERNAL TABLE IF NOT EXISTS kylin_intermediate_pvuv_cube_bd1feadc_c967_4638_8125_e879c866b481
(
WEB_ACCESS_FACT_TBL_DAY date
,WEB_ACCESS_FACT_TBL_REGIONID string
,WEB_ACCESS_FACT_TBL_CITYID string
,WEB_ACCESS_FACT_TBL_SITEID string
,WEB_ACCESS_FACT_TBL_OS string
,WEB_ACCESS_FACT_TBL_PV bigint
,WEB_ACCESS_FACT_TBL_COOKIEID string
)
STORED AS SEQUENCEFILE
LOCATION 'hdfs://ns1/kylin/kylin_metadata/kylin-2fc3fc75-6d3a-4e73-bbe4-d3b6bab07c0a/kylin_intermediate_pvuv_cube_bd1feadc_c967_4638_8125_e879c866b481'

插入数据

INSERT OVERWRITE TABLE kylin_intermediate_pvuv_cube_bd1feadc_c967_4638_8125_e879c866b481 SELECT
WEB_ACCESS_FACT_TBL.DAY as WEB_ACCESS_FACT_TBL_DAY
,WEB_ACCESS_FACT_TBL.REGIONID as WEB_ACCESS_FACT_TBL_REGIONID
,WEB_ACCESS_FACT_TBL.CITYID as WEB_ACCESS_FACT_TBL_CITYID
,WEB_ACCESS_FACT_TBL.SITEID as WEB_ACCESS_FACT_TBL_SITEID
,WEB_ACCESS_FACT_TBL.OS as WEB_ACCESS_FACT_TBL_OS
,WEB_ACCESS_FACT_TBL.PV as WEB_ACCESS_FACT_TBL_PV
,WEB_ACCESS_FACT_TBL.COOKIEID as WEB_ACCESS_FACT_TBL_COOKIEID
FROM DEFAULT.WEB_ACCESS_FACT_TBL as WEB_ACCESS_FACT_TBL 
INNER JOIN DEFAULT.REGION_TBL as REGION_TBL
ON WEB_ACCESS_FACT_TBL.REGIONID = REGION_TBL.REGIONID
INNER JOIN DEFAULT.CITY_TBL as CITY_TBL
ON WEB_ACCESS_FACT_TBL.CITYID = CITY_TBL.CITYID
WHERE (WEB_ACCESS_FACT_TBL.DAY >= '2016-07-01' AND WEB_ACCESS_FACT_TBL.DAY < '2016-07-31')

这一步执行完成后location指定的目录下就有了原始数据的文件,为接下来的任务提供了输入

创建事实表的Distinct Columns

image.png

单击钥匙查看参数

image.png

根据参数output的路径,我们可以产看这一步的输出

image.png

构建维度字典

image.png

查看参数

image.png

这一步是根据上一步生成的 Distinct Columns文件和维度表计算出所有维度表的词典信息

保存Cuboid的统计信息

image.png

创建HTable

image.png

查看参数

image.png

我们可以通过HBase Shell查看一下表结构

image.png

Tips:表名可以通过查看#13 Step Name: Load HFile to HBase Table的参数找到

image.png

计算生成Base Cuboid数据文件

image.png

查看参数

 -conf /usr/local/kylin/conf/kylin_job_conf.xml -cubename pvuv_cube -segmentid bd1feadc-c967-4638-8125-e879c866b481 -input FLAT_TABLE -output hdfs://ns1/kylin/kylin_metadata/kylin-2fc3fc75-6d3a-4e73-bbe4-d3b6bab07c0a/pvuv_cube/cuboid/level_base_cuboid -jobname Kylin_Base_Cuboid_Builder_pvuv_cube -level 0 -cubingJobId 2fc3fc75-6d3a-4e73-bbe4-d3b6bab07c0a

计算第N层的Cuboid文件

image.png

这个流程由多个步骤组成,步骤的数量是根据维度组合的cuboid的总数决定的

比较一下Build Base Cuboid和Build N-Dimension Cuboid : level 4的参数内容

image.png

Build N-Dimension Cuboid : level 4

image.png

可以看出上一层Cuboid执行的输入是下一层计算的输出(即4-Dimension的输入来源于Base Cuboid)

查看一下输出

image.png

基于内存构建Cube

image.png

查看一下参数

image.png

注意一下,这里的配置文件是/usr/local/kylin/conf/kylin_job_conf_inmem.xml,这是Fase Cubing的配置文件

具体可参考《Fast(in-mem) Cubing算法

我们查看一下该文件


<configuration>
    <property>
        <name>mapreduce.job.split.metainfo.maxsize</name>
        <value>-1</value>
        <description>The maximum permissible size of the split metainfo file.
            The JobTracker won't attempt to read split metainfo files bigger than
            the configured value. No limits if set to -1.
        </description>
    </property>
    <property>
        <name>mapreduce.map.output.compress</name>
        <value>true</value>
        <description>Compress map outputs</description>
    </property>
    <!--
    The default map outputs compress codec is org.apache.hadoop.io.compress.DefaultCodec,
    if SnappyCodec is supported, org.apache.hadoop.io.compress.SnappyCodec could be used.
    -->
    <!--
    <property>
        <name>mapreduce.map.output.compress.codec</name>
        <value>org.apache.hadoop.io.compress.SnappyCodec</value>
        <description>The compression codec to use for map outputs
        </description>
    </property>
-->
    <property>
        <name>mapreduce.output.fileoutputformat.compress</name>
        <value>true</value>
        <description>Compress the output of a MapReduce job</description>
    </property>
    <!--
    The default job outputs compress codec is org.apache.hadoop.io.compress.DefaultCodec,
    if SnappyCodec is supported, org.apache.hadoop.io.compress.SnappyCodec could be used.
    -->
    <property>
        <name>mapreduce.output.fileoutputformat.compress.codec</name>
        <value>org.apache.hadoop.io.compress.SnappyCodec</value>
        <description>The compression codec to use for job outputs
        </description>
    </property>
    <property>
        <name>mapreduce.output.fileoutputformat.compress.type</name>
        <value>BLOCK</value>
        <description>The compression type to use for job outputs</description>
    </property>
    <property>
        <name>mapreduce.job.max.split.locations</name>
        <value>2000</value>
        <description>No description</description>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>3</value>
        <description>Block replication</description>
    </property>
    <property>
        <name>mapreduce.task.timeout</name>
        <value>7200000</value>
        <description>Set task timeout to 1 hour</description>
    </property>
    <!--Additional config for in-mem cubing, giving mapper more memory -->
    <property>
        <name>mapreduce.map.memory.mb</name>
        <value>3072</value>
        <description></description>
    </property>
    <property>
        <name>mapreduce.map.java.opts</name>
        <value>-Xmx2700m -XX:OnOutOfMemoryError='kill -9 %p'</value>
        <description></description>
    </property>
    <property>
        <name>mapreduce.task.io.sort.mb</name>
        <value>200</value>
        <description></description>
    </property>

发现主要是调整了压缩及Map端内存大小,因为部分聚合姚芳到Map端计算需要更多的内存

将Cuboid转换为HFile文件

image.png

查看一下参数

image.png

输入数据来源

hdfs://ns1/kylin/kylin_metadata/kylin-2fc3fc75-6d3a-4e73-bbe4-d3b6bab07c0a/pvuv_cube/cuboid/*

输出hfile文件

hdfs://ns1/kylin/kylin_metadata/kylin-2fc3fc75-6d3a-4e73-bbe4-d3b6bab07c0a/pvuv_cube/hfile

HBase表名

KYLIN_SBBPKWXZPL

将HFile文件导入到HBase中

image.png

查看参数

image.png

更新Cube信息

image.png

清理中间表

image.png


读后有收获可以支付宝请作者喝咖啡