Apache Kylin in Logistics: Optimizing OLAP for Big Data Analytics
This article discusses the implementation of Apache Kylin as an OLAP engine for logistics data, focusing on optimizing cube building and query performance to handle large-scale, high-dimensional data analytics.
1. Background
随着顺丰末端物流业务的发展,越来越多的末端物流数据接入大数据平台。末端物流业务作为我司主要的物流科技载体,不仅涉及的业务场景较广,而且对后端服务的要求更高(亿级数据量下数据统计、灵活维度组合下的数据查询、查询服务响应要求亚秒级、要求服务24小时响应)。在这样的业务背景下,传统的TiDB和Impala查询不能满足业务需求,使用稳定高效的OLAP引擎是最佳的选择。
2. Apache Kylin Introduction
Apache Kylin是Hadoop大数据平台上的一个开源的联机分析处理(OLAP)引擎。它采用多维立方体预计算技术,利用空间换取了时间,将大数据的SQL查询速度从之前的分钟乃至数小时级别提升到亚秒级别,在复杂的查询场景中表现优秀。
3. Kylin Architecture
Kylin的系统架构分为上半区的在线查询部分和下半区离线构建部分。离线构建部分从Hadoop、Hive等数据源中抽取数据构建cube,保存在HBase中。实时部分通过REST API或JDBC提交SQL查询,解析为基于Cube的物理执行计划,查询存储在HBase中预计算好的Cube结果。
4. Kylin Components
维度(dimension) :维度是观察数据的角度。例如,末端物流业务AOI维度宽表中aoi编码和网点编码就是维度。 度量(measure) :度量是被聚合的统计值,如收件量。 超高基列(UltraHigh Cardinality, UHC) :行数多余100万的维度,如末端物流业务AOI维度宽表中aoi编码每日数量约在400万左右。 数据立方体(Cube) :一组用于分析数据的相关度量值和维度,作为存储和分析的基本单位。 Cuboid :某一维度组合下,度量聚合后的结果集合。 Cube Segment :针对数据源中的某一片度计算出来的cube数据。
5. Kylin Optimization
优化方式包括: - Cuboid 剪枝优化:通过聚合组(AggregationGroup)减少不必要的Cuboid构建。 - 层级维度:处理维度之间的层级关系,如地域层级。 - 联合维度:将经常同时查询的维度组合成联合维度。 - 衍生维度:将维度表上的维度设置为衍生维度。 - 必要维度:将查询时where或group by中的必要条件设置为必要维度。 - 并发粒度优化:通过设置分片维度,将数据分布到不同分区。 - Rowkey 顺序调整:将经常过滤或查询的维度放在前面。 - Rowkey 编码调整:优化编码格式以减少存储空间和提高查询效率。
6. Optimization Results
优化前Cuboid数量约16个,优化后减少90.6%至约1.4个。 构建时间从500分钟优化到150分钟,提升70%。 查询时间大于5s的查询量减少94%。
7. Future Outlook
未来展望包括: - 搭建Kafka数据源到Kylin的流式构建架构,实现分钟级数据更新。 - 切换MapReduce构建方式到Spark引擎,提高构建效率。
Beijing SF i-TECH City Technology Team
Official tech channel of Beijing SF i-TECH City. A publishing platform for technology innovation, practical implementation, and frontier tech exploration.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.