10月26日,字节跳动在上海总部成功举办了“大数据架构专场”的技术沙龙活动。活动中,来自Kyligence的大数据研发工程师陶加涛与字节跳动的数据仓库架构师郭俊、存储工程师徐明敏,以及阿里云的高级技术专家白宸共同探讨了大数据架构的相关话题。
陶加涛分享了题为《Apache Kylin原理介绍与新架构分享(Kylin On Parquet)》的主题演讲。他介绍了自己在Kyligence的工作经历,特别是在Apache Kylin的商业版本方面。他的演讲分为三个方面:首先,他简要介绍了Apache Kylin及其查询原理;其次,他讲述了团队正在开发的Parquet存储技术,预计将于今年年底贡献给开源社区;最后,他分享了用户广泛使用的精确去重功能及其在Kylin中的实现和扩展。
Apache Kylin是一个开源的分布式分析引擎,能够在Hadoop/Spark之上提供SQL查询接口和多维分析(OLAP)功能,以支持超大规模数据。Kylin最初由eBay Inc开发并贡献给开源社区。它可以在亚秒级时间内查询庞大的Hive表。
作为一个SQL加速层,Kylin可以连接各种数据源(如Hive、Kafka)并集成多种BI系统(如Tableau、PowerBI)。当产品或业务方需要加速查询、提高查询并发度、减少资源占用,并支持完整的SQL语法时,Kylin是一个很好的选择。
Kylin的核心思想是预计算,通过预先计算所有可能的查询结果,利用空间换时间的方式来加速OLAP查询。Kylin的基础理论是立方体(Cube)理论,每个维度组合称为一个Cuboid,所有Cuboid的集合称为Cube。Kylin将预计算后的数据视为一张大宽表,查询时自动选择最合适的Cuboid,从而大幅减少数据扫描量和计算量。
Kylin的查询流程包括以下几个步骤: 1. 根据用户查询转换成查询计划。 2. 重写查询计划,使其能够查询预计算的数据。 3. 选择合适的Cuboid进行查询。 4. 根据查询结果执行聚合操作。
例如,用户查询商品访问表(stock),希望分析商品的PV。Kylin会根据用户查询生成一个SQL语句,并将其重写为适合预计算数据的SQL语句,以提高查询效率。
Kylin当前的开源版本将数据存储在HBase中。当查询准确匹配Cuboid时,Kylin查询服务器端不会做太多计算。然而,当查询较为复杂时,Kylin查询服务器端需要从HBase拉回大量数据,并执行复杂的聚合操作,这可能导致内存溢出(OOM)。此外,HBase的运维难度较高,容易影响Kylin性能的稳定性。
为了解决上述问题,Kyligence研发了基于Spark和Parquet的新一代方案。该方案通过遍历生成的逻辑执行计划树,将每个算子翻译成Spark DataFrame的一个操作。通过这种方式,所有计算都是分布式的,不存在单点瓶颈,可以灵活地扩展系统计算能力。此外,该方案减少了对HBase的依赖,简化了运维工作,并提高了查询的稳定性和性能。
Kylin使用预计算和位图(Bitmap)技术来加速精确去重。这种方法特别适用于大规模数据集,能够实现快速响应。通过使用位图,Kylin可以在毫秒级别内完成精确去重。此外,Kylin还在多个应用场景中展示了其精确去重的优势,包括留存分析、漏斗分析、用户画像和明细分析。
发问:Kylin On Parquet如何使用Spark?
发问:位图如何处理非数字类型的数据?
发问:全局字典何时使用?
发问:构建的Cube会占用大量空间吗?
欢迎加入我们的微信交流群,进一步探讨相关话题(微信号:245915794)。Apache Kylin已经在全球范围内拥有超过1000名用户,是一个成熟的大数据OLAP解决方案。