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的信息: "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格式数据中获得。