“7-2+BIGO海量数据的Ad-Hoc分析实践与改进.pdf”是关于在BIGO公司进行大规模数据Ad-Hoc分析的实践经验及改进措施的分享,出自2021年的DataFunSummit技术峰会。嘉宾唐云在演讲中详细介绍了Presto(Trino)作为主要查询引擎的应用,以及在实际操作中遇到的问题及其解决方案。
Presto(Trino)是一种高性能的分布式SQL查询引擎,特别适合处理大规模的数据分析。它的主要特点包括:
1. **MPP架构**:采用Massively Parallel Processing(大规模并行处理)架构,能够高效地处理大数据查询。
2. **ANSI SQL语法支持**:提供完整的SQL功能,使用户可以方便地进行数据查询和分析。
3. **流水线式作业能力**:能够快速返回查询结果,实现数据的即时响应。
4. **多数据源支持**:不仅支持Hive数据源,还可以连接到其他多种数据存储系统。
5. **线程级别调度**:精细的资源调度策略,优化了查询性能。
在BIGO公司,Presto(Trino)主要用于处理大部分的Hive数据源的大数据Ad-hoc查询,通过各种编程语言(如Java、Python、Go、JavaScript、C)的JDBC接口进行查询,同时也在Oozie调度的ETL任务中发挥作用。系统规模达到250+个节点,每天执行超过4万个查询,扫描的数据量超过2.5PB。
然而,使用Presto(Trino)的过程中也遇到了一系列问题,包括:
1. **不支持Hive语法**:某些特定的Hive语法,如`lateral view`、`explode`、`insert overwrite`等,在Presto中不被支持。
2. **缺乏高可用性**:系统可能因单点故障而中断服务。
3. **任务优先级和资源滥用问题**:不同任务间的优先级无法有效管理和控制,导致资源被滥用。
4. **查询入口管理困难**:多种Ad-hoc查询入口使得系统管理复杂。
5. **结果查看和下载不便**:不支持查询结果的重复查看和下载。
6. **其他问题**:包括语法差异、创建表的差异、数据加载、隐式转换等问题。
针对这些问题,BIGO团队采取了逐步解决的策略,具体措施可能包括但不限于:
1. **Hive语法支持**:通过扩展或自定义Presto解析器,实现对Hive特殊语法的支持。
2. **高可用性增强**:可能通过设置集群复制和故障切换机制,提高系统的可用性和稳定性。
3. **任务优先级和资源管理**:可能引入更精细的任务调度策略,根据优先级分配资源,避免资源滥用。
4. **统一查询入口**:整合查询接口,便于管理和监控。
5. **结果查看和下载功能**:开发相应的功能模块,允许用户查看和下载查询结果。
6. **解决语法差异**:对不兼容的语法进行适配,确保与Hive的兼容性。
通过这些改进,BIGO成功提升了其Ad-Hoc分析的效率和用户体验,同时也为其他面临类似挑战的公司提供了有价值的参考经验。