[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. 左表不一定是事实表,也可以是一个维表去关联另一个维表(雪花模型已经支持了)
Skip snapshot for this lookup table选项指的是是否跳过生成 snapshotTable。
Kylin会将维度表加载到内存中供查询,这个加载过程叫做snapshot。由于某些 Lookup 表特别大 (大于 300M),例如某一个维度的基数比较大 ,可能会导致内存OOM,所以在创建 snapshotTable 的时候会限制原始表的大小不能超过配置的一个上限值(kylin.snapshot.max- mb,默认值300)
我们也可以在这里选择不生成snapshot。
跳过构建 snapshot 的 lookup 表将不能搜索,同时不支持设置为衍生维度(Derived)(关于
Derived讲会在第六章专门讲解),因此一般不跳过。
大部分情况下都是使用 “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 在构建的时候会选择符合过滤条件的数据进行构建。
过滤条件不需要写 WHERE ;
过滤条件不能包含日期维度。
都设置完毕后点击"save"。
Cube设计
我们设计了数据模型,数据模型只是把原始数据表组织成了星型模型或者雪花模型,接下来
我们需要根据实际分查询分析需求来设计Cube。注意:
1. 同一个数据模型可以设计多个Cube已支撑多个分析场景,也可以给同一个场景设计多个Cube(优
化Cube升级时很有用);
2. 同一个分析场景或者说语句如果可以走多个Cube,Kylin会自动选择最优的。
接下里,我们分析一下Cube设计的过程