Kylin 认识及使用RESTful API进行cube的增量更新

 Kylin 认识及使用RESTful API进行cube的增量更新

版本:

spark 2.2.0

kylin:2.5.0

首次登入界面:

首先要创建project:

如果想要查看当前有多少个project:

点击Manage Project:

创建完Project之后,就可以导入hive的数据(kylin是查询hive的数据,根据预计算将结果预写入HBase里面存储):

导入数据之后,就开始创建Model:

填写model的名字:

点击Next,然后选择导入的hive表数据:

点击Next之后,选择model指定hive表数据的维度(维度通常是大范围比如sql里面group by后面的字段,而指标是要统计的字段):

选择完维度之后,就要选择指标:

指标选择之后,需要进行一些设置,选择hive表时间分区的字段和格式,然后save完成:

创建完model之后,就要创建cube,类似model,选择之前创建的model,然后填写cube:

选择维度:

选择指标,count是默认的:

进行设置:

Auto merge Thresholds:是build有多份小数据,需要定时进行字段合并Merge,可以设置Merge的时间间隔,Partition start Date

是build的开始分区时间。

然后下一步可以选择kylin的执行引擎:

下一步可以设置一些属性:

完成创建cube:

完成之后就可以对cube进行操作:

Drop:丢弃现有cube,条件:无Pending, Running, Error 状态的job.
Edit:编辑现有cube,条件:cube需处于disable状态。
Refresh:重建某已有时间段数据,针对于已build时间段的源数据发生了改变的情况。
Merge:手动触发merge操作。
Enable:使拥有至少一个有效segment的cube从disable变为enable状态。
Purge:清空所有该cube的数据。
Clone:克隆一个新的cube,可设置新的名字,其他相关配置与原cube相同。
Disable:使一个处于ready状态的cube变为Disable状态,查询不会从disable的cube中获取数据。

首先可以对创建的cube进行build进行预计算,然后可以在Monitor进行查看build过程:

当build成功之后就可以在Insight进行sql查询数据(查询的表还是hive的表名称,只是要使用cube里面的维度之后,这样才是对Hbase的预计算结果进行查询,不然就是直接使用MapReduce查询hive的原数据,速度非常慢)。

接下来我们要处理上线之后定时任务,因为hive是以时间作为分区,每天有增量数据,所以需要再kylin每天增量写入数据:

1:Kylin的认证是basic authentication,加密算法是Base64,加密的明文为username:password;在POST的header进行用户认证:
curl  -X POST -H "Authorization: Basic xxxxxxxx=" -H 'Content-Type: application/json' http://hostname:port/kylin/api/user/authentication

可以在hive或者spark-sql里面进行base64加密算法获取:

select base64('username:password');

2:在认证完成之后,可以复用cookie文件(不再需要重新认证),向Kylin发送GET或POST请求,比如,查询cube的信息:
curl -b cookiefile.txt -H 'Content-Type: application/json' http://hostname:port/kylin/api/cubes/cube_name
返回信息:
{"uuid":"xxxxxxxxxxxx","last_modified":1540804968611,"version":"2.5.0.20500","name":"cube_name","owner":"username","descriptor":"cube_name","display_name":"cube_name",

"cost":50,"status":"DISABLED","segments":[],"create_time_utc":1540535981140,"cuboid_bytes":null,"cuboid_bytes_recommend":null,"cuboid_last_optimized":0,"snapshots":{}}

通过RESTful API查询SQL:
curl -b cookiefile.txt --user username:password -X POST -H 'Content-Type: application/json' -d '{"sql":"select count(1) from table_name group by partition_name", "offset":0, "limit":10, "acceptPartial":false, "project":"project_name"}' http://hostname:port/kylin/api/query

其中,offset为sql中相对记录首行的偏移量,limit为限制记录条数;二者在后台处理时都会拼接到sql中去。发送sql query的curl命令:

熟悉了curlful API之后然后进行sh的定时:

#!/bin/bash
cubeName=cube_name
today=`date -d "1 days ago" +%Y-%m-%d`
tdTs=`date -d "$today 08:00:00" +%s`
endTime=$(($tdTs*1000))
curl -b cookiefile.txt --user username:password -X PUT -H 'Content-Type: application/json' -d '{"startTime":'xxxxxxx',"endTime":'$endTime',"buildType":"BUILD"}' http://hostname:port/kylin/api/cubes/$cubeName/rebuild

startTime : 做增量时,startTime 为上一次build的endTime。 
endTime:时间精确到毫秒。 
buildType:可选BUILD,MERGE,REDRESH

注意事项:通过RESTful API向kylin进行build和rebuild的时候一定要观察kylin的web界面下面的Montior进程,否知一不小心运行太多进程导致服务器崩掉。

当cube build过程中出错,重新执行

curl -b cookfile.txt  -X PUT -H "Content-Type: application/json"  http://hostname:port/kylin/api/jobs/uuid/resume

uuid:从cube提交build时返回的json格式数据中获得。

猜你喜欢

转载自blog.csdn.net/qq_37050993/article/details/83573008