Kylin初探

[root@hadoop001 ~]# $KYLIN_HOME/bin/sample.sh

一开始会报错,

ERROR : FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:Got exception: org.apache.hadoop.security.AccessControlException Permission denied: user=root, access=EXECUTE, inode="/warehouse/tablespace/managed/hive":hive:hadoop:drwx------


解决方案

 

重启hdfs服务组件和kylin即可

继续执行如下命令

[root@hadoop001 ~]# $KYLIN_HOME/bin/sample.sh

当你看到这个画面时,示例数据就已经导入成功,并且已经成功创建了Cube。

上一步cube成功之后系统会提示重启kylin或者重新加载元数据让数据生效,我们选择重新加载

进入Hive

0: jdbc:hive2://hadoop001:2181/default> show tables;

很显然这里用的是增量构建,它选择的分区字段是KYLIN_SALES.PART_DT,start data已经默认给出来了,这是因为cube定义时已经指定了。如果你吃不准开始和结束时间到底怎么设置,可以在hive使用 以下语句查看下KYLIN_SALES.PART_DT的最大和最小值。

select min(part_dt),max(part_dt) from kylin_sales;

进入Monitor页面查看构建任务job列表

值得注意的是,由于中途hadoop001内存不够,于是,我把所有服务停掉,然后加内存,再重启服务,打开Kylin页面,发现任务只完成了40%多,接着自动从上次未完成的点开始继续运行

等了良久,终于构建完成

查询Cube

查询构建完成的cube再次执行基本瞬间返回数据,基本是毫秒级别就可以 查询出来,这是因为kylin支持缓存的功能。

select count(*) from kylin_sales;

select part_dt,sum(price) as total_selled,count(distinct seller_id) as sellers from kylin_sales group by part_dt order by part_dt;

Kylin的数据源可以是以下三种:

1. Hive
2. Kafka(since kylin v1.6)
3. jdbc datasource

设计Cube

导入数据源定义

数据准备好了之后,Kylin是不知道的,因此我们需要导入数据源的定义到Kylin。

为了方便管理,Kylin提出了Project的概念,可以理解为Model和Cube的分组,在这个分组上可以进行 权限等等管理。因此我们先创建或者选择project,然后把数据源定义导入到当前project下

Calculate column cardinality 是否计算列的基数,这里暂且不计算

上图中,我们选择需要库和表,然后确定是否计算列的基数,最后点击 Sync按钮开始同步数据源定义。如果选择了计算列的基数,那么导入数据源定义之后会启动MapReduce任务去计算每个表各个列的基数。所谓列的基数就是该列的唯一值有多少个,我们这里先选择不计算基数。

我们看到由于没有选择计算列的基数所以Cardinality列为空。

建立数据模型的第一步是选择事实表,然后通过多次点击“Add Lookup Table”添加需要的维表(Lookup Table)以及关联字段(建立事实表和维表的关联关系)

在添加维表的时候需要注意几点:

1. 左表不一定是事实表,也可以是一个维表去关联另一个维表(雪花模型已经支持了)

  1. Skip snapshot for this lookup table选项指的是是否跳过生成 snapshotTable。

    Kylin会将维度表加载到内存中供查询,这个加载过程叫做snapshot。由于某些 Lookup 表特别大 (大于 300M),例如某一个维度的基数比较大 ,可能会导致内存OOM,所以在创建 snapshotTable 的时候会限制原始表的大小不能超过配置的一个上限值(kylin.snapshot.max- mb,默认值300)

    我们也可以在这里选择不生成snapshot。

  2. 跳过构建 snapshot 的 lookup 表将不能搜索,同时不支持设置为衍生维度(Derived)(关于

    Derived讲会在第六章专门讲解),因此一般不跳过。

  3. 大部分情况下都是使用 “Left Join”,其他两种 Join 方式不是很常用。

    当所有的维表都关联完成之后就能在下方看到所有的信息了。通过上述的操作即可将事实表以及维 度表联系起来,构成一个数据模型。然后我们可以点击“Prev”返回上一步做信息修改,也可以点击 “Next”进入下一步。

在 Dimensions页面选择可能参与计算的维度,这里被选择的只是在 Cube 构建的时候拥有被选择 资格的维度,并不是最后参与 Cube 构建的维度,推荐将维度表中的字段都选择上。注意 Dimension可以来自事实表和维表。

一般而言,日期、商品种类、区域等会作为维度。

需要说明的是:一个字段不能即是Dimension又是Measure(可以两者都不是)。

在 Settings 页面可以设置分区以和过滤条件,其中分区是为了系统可以进行增量构建而设计的,目前 Kylin 支持基于日期的分区,在 “Partition Date Column” 后面选择事实表中的日期字段,然后选择日期 格式即可。需要注意的几点:

1. 时间分区列只能是事实表的字段
2. 时间分区列可以支持日期或更细粒度的时间分区;
3. 时间分区列支持的数据类型有 Timestamp/Date/String/Varchar/Int/Integer/BigInt 等; 4. Partition Date Column非必选,如果不选就是full build(全量构建);
5. Has a separate "time of the day" column选项是为了处理日期和时间在两个字段的情况。

过滤条件设置后,Kylin 在构建的时候会选择符合过滤条件的数据进行构建。

  1. 过滤条件不需要写 WHERE ;

  2. 过滤条件不能包含日期维度。

都设置完毕后点击"save"。

Cube设计

我们设计了数据模型,数据模型只是把原始数据表组织成了星型模型或者雪花模型,接下来

我们需要根据实际分查询分析需求来设计Cube。注意:
1. 同一个数据模型可以设计多个Cube已支撑多个分析场景,也可以给同一个场景设计多个Cube(优

化Cube升级时很有用);
2. 同一个分析场景或者说语句如果可以走多个Cube,Kylin会自动选择最优的。

接下里,我们分析一下Cube设计的过程

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值