关键字:kylin、streaming table
Kylin从1.5版本开始,引入了Streaming Table,目的是为了减低OLAP分析的延时(比如Druid、ElasticSearch都支持实时数据流)。
Streaming Table周期性的从Kafka中读取数据,根据Model和Cube的定义,将计算好的数据写入HBase,以供查询。
从1.5.2版本开始,官网上给出了Streaming Table详细的使用文档:http://kylin.apache.org/docs15/tutorial/cube_streaming.html
本文基于Kylin 1.5.2.1,介绍在Kylin中基于Kafka定义Streaming Table,从而完成准实时Cube的构建。
Kafka中的数据
目前提供的Streaming Table,在Kafka中的数据必须是JSON格式,并且必须包含一个timestamp类型的字段,用作时间序列。
应该可以自己写解析器解析Kafka中的数据,这个后面再研究。
Kafka中Topic为: kylinlog2
数据格式如下:
{"city" : "上海","province" : "上海","createtime" : 1465714957000,"siteid" : "633","cookieid" : "c61cc3e9802863f5","isrv" : "0","logserver" : "logserver___172.16.213.4"} {"city" : "广州","province" : "广东","createtime" : 1465714957000,"siteid" : "927","cookieid" : "62c35a31e7c030b9","isrv" : "1","logserver" : "logserver___172.16.213.4"} {"city" : "深圳","province" : "广东","createtime" : 1465714957000,"siteid" : "1351","cookieid" : "1b866ce761e3119c","isrv" : "1","logserver" : "logserver___172.16.213.4"}
定义Streaming Table
在DataSource中添加”Add Streaming Table”。
复制一条JSON格式的数据,点击>>后,右边解析出JSON中包含的字段及其格式,另外,会自动添加出年、季度、月、周等时间上的衍生维度,可以根据实际需要保留或舍弃。
配置Kafka Cluster的链接信息。
保存后,可以在Tables下面看到该Streaming Table。
定义Model
基于上面的Streaming Table,定义Model。
定义维度。注意维度中一般不要将timestamp类型的时间序列作为维度,这样会导致cuboid太多,影响性能。而是选择需要的时间衍生维度,例如小时、天。
定义指标。我这里需要根据cookieid去重计算UV。
保存Model。
定义Cube
根据前面的lxw1234_streaming_model定义cube.
定义维度。
定义指标,PV和UV。
设置合并和保留时间。
保存Cube.
Build Cube
在命令行运行:
$KYLIN_HOME/bin/streaming_build.sh lxw1234_streaming_cube 300000 0
官网对于Build命令的说明如下:
The build is triggered, a separate log file will be created in $KYLIN_HOME/logs/ folder, e.g, streaming_STREAMING_CUBE_1462471500000_1462471800000.log; As the delay is 0, margin is 5 minutes, the build will take a while as most of time is waiting for message to arrive. After about 7 to 10 mintues, the build will finish.
Go to Kylin web GUI, refresh the page, and then click the cube, you should see its “source records” is a positive number now (usually be 150; 30 records per minute); Click the “HBase” tab you should see a segment is created, with a start time and end time (range is 5 mintues).
Build成功完成后,可以在Model页面看到Cube的元数据已更新,比如记录数和HBase中的HTable等。
这时候,需要选择Action中的Enable,将Cube可用。
查询Cube
可以正常查询Cube。
Streaming Table的自动更新
目前的版本中只提供了命令行更新,因此,需要在crontab中配置计划任务来周期性调用build命令,完成更新。
详见官方文档说明。
这块还得好好研究和改进。
如果觉得本博客对您有帮助,请 赞助作者 。