背景介绍
阿里云数据湖分析(DLA)产品提供一站式的数据湖分析与计算服务。DLA Presto可以实现高效的在线分析,主要面向用户探索式分析、报表以及轻量ETL的场景,支持OSS、RDS、AnalyticsDB、MaxCompute、TableStore、ElasticSearch等多种数据源。
DLA Presto的独享的虚拟集群中,当Query的数据量比较大,容易报内存超过限制的错误。但许多时候,用户某些Query是ETL类型的任务,它可以容忍慢一些,但不能失败。对于这种情况,DLA Presto独享版推出大查询功能,能让相同规格的虚拟集群,分析的数据量提升十倍。
新功能介绍
使用场景
当运行在DLA Presto中Query处理的数据量比较大,容易出现类似如下的报错信息。
Query exceeded per-node user memory limit...
出现此异常一般是因为某一节点处理的数据量过大,超出了单节点对内存的限制。这种情况下,你可以先排除你处理的数据是否有数据倾斜或SQL是否写得合理,如果确定数据没有倾斜且SQL写得是合理的,那可以考虑使用DLA Presto的big_query功能。
使用方法
开启的方法很简单,只需要在查询前加一个hint
/*+big_query=true*/ insert into table1 SELECT * FROM table2;
注意事项:
(1)big_query功能只在独享虚拟集群中支持,public(扫描量)集群中不支持该功能。
(2)它可能会增加你的Query运行耗时。
(3)它并不能让你处理任意大小的数据和任意复杂SQL,可以参考的数据量是64Core规格可执行10T的TPCH查询。
(4)当前的Schema的Catalog类型必须是Hive,否则会报如下的错误:
big_query only support hive catalog ...
大查询的原理
DLA Presto大查询的功能基于Presto的Exchange物化和GroupExecution功能,开启该功能后,不再一次性把所有子任务调度起来执行,而是通过把中间数据落到预先分好区的表中,GroupedExecution允许同时只有一部分数据集做处理,能大大减小查询占用的内存,使得64Core规格的DLA Presto虚拟集群能处理的查询数据量由1T增加到10T。
在聚合阶段每个分区独立执行
控制分区并发执行数量减小内存消耗
每个分区单独重试
shuffle
Writer
Aggr
Scan
Writer
Aggr
Scan
Writer
Aggr
Scan
Writer
Aggr
使用DLA Presto的优势
DLA Presto(兼容Presto)的目标是提供比开源自建更高的性价比、开箱即用的体验、方便的数据摄入、MySQL生态带来的简单易用、内置各种优化的数据湖分析计算服务。用户可以先通过使用Serverless版本低成本试用,然后根据使用频率的高低、对资源是否有强独占的需求来决定生产环境使用Serverless版本还是CU版本。DLA SQL还在不断发展中,目前规划中的一些特性包含:
- 按照时间段或者工作负载进行自动扩缩容,帮助用户节省成本。
- 支持文件缓存机制,提升查询性能
- 内置大数据最佳实践,自动拦截Bad SQL
欢迎大家关注我们的钉钉群获取最新的信息:
分享: