本文资料来自2021年12月09日举办的 PrestoCon 2021,议题为《Presto at Tencent at Scale Usability Extension Stability Improvement》,分享者Junyi Huang 和 Pan Liu,均为腾讯软件工程师。Presto 已被腾讯采用为不同业务部门提供临时查询和交互式查询场景。在这次演讲中,作者将分享腾讯在生产中关于 Presto 的实践。

关注 过往记忆大数据公众号回复 10110tx 获取本文资料。

本次分享主要有以下几个内容:

•Presto 在腾讯的使用状况•可用性扩展•稳定性改善•性能优化•未来工作

Presto 在腾讯的使用状况

上面是目前 Presto 在腾讯的使用状况。集群规模为 500+ 台 Worker,每天10W+查询,处理 2+PB 的数据,P50 查询时间在50s内。

用户的 SQL 提交到一个称为 SuperSQL 的中间件中,其实腾讯内部一个统一、智能、跨引擎的 SQL 处理层。 SuperSQL 会解析用户提交过来的 SQL,校验并利用 RBO、CBO 以及 HBO 的东西将 SQL 转发到 Presto 或者 Spark 集群中。比如小或者中等规模的查询转发到 Presto 处理;ETL 转发到 Spark 中。

可用性扩展

在可用性方面,腾讯对 Presto 进行了改造,使其支持 Hive UDF、MapJoin Hint 以及 隐形类型转换等。

查询的 Metrics 会进行保存,供 HBO 、性能分析等使用,同时腾讯 Presto 团队还在做 Presto 历史服务器等功能。

我们知道,原生的 Presto 配置 Catalog 是需要重启集群的。而腾讯对这个进行了改造,使得 Presto 支持动态 Catalog 配置,动态 Catalog 信息是保存到 Catalog Store(猜想应该是元数据等服务)。对 Catalog 的增删操作都是发到 Coordinator,然后再由 Coordinator 同步到 Worker。

Presto 的 Iceberg 数据源的社区进行了一些功能提升,腾讯 Presto 团队将一些有用的 Patch Merge 到自己分支。

稳定性改善

稳定性建设之一是 JVM 调优。主要包括 JDK 由8升级到11.  -XX:GCLockerRetryAllocationCount 增加到 100。

腾讯 Presto 团队弄了一个新的策略:在 Full GC 之后,如果 workers 还出现 OOM 的问题,就会 kill 掉 workers 上使用内存最多的查询。

ORC 文件如果有很多 stripes 的话,很容易导致 Worker 出现 OOM,对于这个问题主要有以下两个解决办法:

  • 将大的 ORC 文件拆分成 stripe 比较合适的小文件,但是这个需要修改用户的数据。

  • 优化 Presto ORC Reader,不需要在不同的 splits 中读取相同 ORC文件的重复 StripeStatistics。

其他扩展性提升:

  • 对重要业务的不同类型工作负载使用独立集群处理;

  • 限制查询的 split 数,避免大查询以及处理许多小文件的查询;

  • 转发到 Presto 的查询失败时会通过 SuperSQL 自动转发到 Hive/Spark,这个操作对用户是无感知的。

  • 减少 hive.dfs-timeout 来避免从 HDFS DataNode 读取数据时等待过长的时间。

性能优化

引入了 Presto on Alluxio,目前 Alluxio 节点和 Presto 是混部的,Presto Alluxio Local Cache 正在测试中。

  • 对不同的数据源使用不同的路由策略。

  • 当路由的时候,会检查 Alluxio 集群的健康,如果 Alluxio 路径不可访问时自动使用 HDFS 路径;

  • 热数据范围是由用户在白名单中指定的,其可以支持多个 Alluxio 集群;

  • 第一次读取数据时,把数据缓存到 Alluxio 中。数据的过期和 evict 都是自动的。

上面是 Presto on Alluxio 的性能测试,主要选取了8中类型的 SQL 进行了测试。(过往记忆大数据备注:性能提升看起来不明显啊?

目前,腾讯的 Presto 是部署在 K8S 上的。

支持通过节点的 CPU 和 内存的使用情况自动扩缩容。

对 distinct Count 查询进行了重写,将其转换成 grouping sets,从而通过部分聚合消除数据倾斜。同样场景下的用户场景性能提升了2-3倍。

优化重分区的用户场景,性能从11分钟提升到6分钟;CPU 利用率从 90% 降为50%。

未来工作

未来工作主要是支持临时表/视图;Presto 历史服务器的实现;在具有不同硬件资源的机器上进行自适应执行。

Presto 在腾讯的应用相关推荐

  1. 万字干货 | 一文揭秘Presto在腾讯资讯业务中的应用

    随着产品矩阵和团队规模的扩张,跨业务.APP的数据处理和分析总是不可避免.一个显而易见的问题就是异构数据源的连通.我们基于PrestoDB构建了业务线内适应腾讯生态的联邦查询引擎,连通了部门内部20+ ...

  2. 腾讯 PB 级大数据计算如何做到秒级?

    天穹 SuperSQL 是腾讯自研,基于统一的 SQL 语言模型,面向机器学习智能调优,提供虚拟化数据和开放式计算引擎的大数据智能融合平台.在开放融合的 Data Cloud 上,业务方可以消费完整的 ...

  3. 浏览器内核Trident/Gecko/WebKit/Presto

    "浏览器内核"主要指渲染引擎(Rendering Engine),负责解析网页语法(如HTML.JavaScript)并渲染.展示网页.因此,所谓的浏览器内核通常也就是指浏览器所采 ...

  4. 腾讯云存储产品矩阵全面升级,发布三维生态战略

    5月10日,腾讯云在北京举行存储产品战略发布会,发布了业界首款十微秒级的极速型云硬盘.业界首款突破百GB 吞吐的文件存储.以及业界首创能够10倍提升数据湖存储分析性能的对象存储三级加速器等新一代云存储 ...

  5. 新书上市 | 流行SQL引擎Presto,官方实战指南来了

    2012年,Facebook的用户数量突破10亿,成为当时全球最大的社交网络.也是在这一年,Facebook的Hive数据仓库达到了250PB,每天需要处理成千上万条查询.在Facebook内部,Hi ...

  6. 目前主流的四大浏览器内核Trident、Gecko、WebKit以及Presto

    浏览器最重要或者说核心的部分是"Rendering Engine",可大概译为"渲染引擎",不过我们一般习惯将之称为"浏览器内核".负责对网 ...

  7. php 腾讯云 文字识别_腾讯科技(成都)有限公司

    成都IT内推圈是由IT行业老兵组建的民间组织,我们希望能为广大IT同仁提供力所能及的帮助,我们不仅提供靠谱的职位,我们更是有温度的圈子!为了帮助更多的朋友寻找到靠谱的内推职位,老农在此号召大家: 1. ...

  8. 阿里腾讯今日头条纷纷翻牌子,ClickHouse到底有什么本事?

    ClickHouse是近年来备受关注的开源列式数据库,主要用于数据分析(OLAP)领域.目前国内社区火热,各个大厂纷纷跟进大规模使用: 今日头条 内部用ClickHouse来做用户行为分析,内部一共几 ...

  9. 腾讯云首次披露云原生智能数据湖全景图,数据湖之争再起波澜

    (图片下载自视觉中国) 数据湖并不是一个很有历史感的概念,从2010年才首次被Pentaho创始人兼首席技术官詹姆斯·狄克逊(James Dixon)提出,至今发展仅有十多年,但已经成为一个谈到大数据 ...

最新文章

  1. android rectF
  2. Layui 表格编辑
  3. python代码大全表解释-python操作列表的函数使用代码详解
  4. 大型机,说爱你不容易
  5. 响应式编程RxJava (一)
  6. 信息奥赛一本通1486: CH 6202 黑暗城堡 最短路径生成树计数
  7. 搭建高可用的redis集群,避免standalone模式带给你的苦难
  8. 面试题45:圆圈中最后剩下的数字
  9. mysql报1840_mysql 帮助手册 以及 warning: World-writable config file 以及 ERROR 1840 (HY000) at line 24:...
  10. My Data Sructure TemplatesClass
  11. PyTorch学习笔记(五):模型定义、修改、保存
  12. 【转载】SQL Server XML Path
  13. 680.验证回文字符串(力扣leetcode) 博主可答疑该问题
  14. java 电子时钟_Java电子时钟实现代码
  15. c语言求范围内最大素数,for语句计算输出10000以内最大素数怎么搞最简单??各位大神们...
  16. fbx模型加载到html,three.js演示如何用FBXLoader来加载fbx模型
  17. 1.6 SSH免密登录
  18. LCP3机器人大冒险
  19. 我的世界服务器自建主城,我的世界服务器
  20. 数商云B2B分销商城系统:助力企业加快分销速度,构建高效智能B2B网上分销平台

热门文章

  1. mysql distinct sum_mysql – SQL:在SUM中放置一个Distinct
  2. 黑格尔哲学讲义(一)
  3. 【使用两个栈实现队列】
  4. 【Excel VBA】轻松搞定数字、文本单元格格式错乱问题
  5. Nacos注册中心集群搭建和AP/CP模式切换
  6. Greenplum部署
  7. matplotlib使用
  8. 号码吉凶算法+对照表
  9. [TDSC 2022] A Multi-shuffler Framework to Establish Mutual Confidence for Secure Federated Learning
  10. git 本地新建分支上传报错The current branch dev has no upstream branch.To push the current branch and setremote