场景描述:面对大量复杂的数据分析需求,提供一套稳定、高效、便捷的企业级查询分析服务意义重大。本文介绍了字节跳动基于SparkSQL构建大数据查询统一服务TQS的一些做法,以及SparkSQL引擎在执行计划调整、数据读取剪枝、SQL兼容性等方面的一些优化。
关键词:迷你SQL优化字节跳动
约95%的joinSQL已经调整为ShuffledHashJoin/BroadcastJoin。优化后的SQL整体速度提高了20%~30%,整体执行时间缩短
基于拼花数据读取的剪枝
以拼花格式数据为对象,在读取数据时进行适当的过滤剪枝,减少了读取的数据量,加快了查询速度
优化点:localsortpoomfilterbirtmaprepen here
基于拼花的数据读取修剪:LocalSort
为高频场排序拼花文件。从而实现读取数据时对行组的过滤
目标:自动选择排序字段,以便在生成文件时自动排序
拼花文件读取原理:
在每个行组的元信息中,将记录其中包含的每个列的最大值和最小值
读取时,如果该值不在最大值和最小值范围内,则跳过行组
生成hive分区文件时,首先读取metastore,得到是否需要使用localsort,如果需要,选择哪个高频列。
基于拼花数据读取的剪枝:布隆过滤器和位图
整体优化结果:命中率指标平均提升30%;产生时间增加10%;[/k0/]之间的开销增加了5%
如何选择合适的行
Local_sort &BloomFilter &位图如何自动生效
基于拼花的数据读取剪枝:预剪枝
基于分别存储和读取列的特点,根据需要返回多列的SQL,根据下推条件筛选选择RowId。通过跳过来读取其他列,从而减少不相关的IO和后续计算谓词的选择:in,=,,isnull,isnotnull
优化结果使特定SQL的平均性能提高了20%
其他优化配置单元/迷你包加载分区移动文件优化:
通过调整暂存目录的位置,可以在加载过程中实现mv文件夹,而不是逐个加载mv文件,从而减少与NameNode的交互次数,合并Spark生成的文件
最后通过添加一个重新分区阶段来合并spark生成的文件。核心电压
在CPU利用率低的情况下,一个纱芯可以启动多个火花芯火花,通过vcore技术访问hivemetastore的特定过滤器:
Get_partitions_by_filter构造成在cast和substring条件下推送hivemetastore,从而减少metastore返回的数据量
运行时调整
在执行SQL之前,通过统一的查询条目,根据成本进行估算,并选择适当的引擎和参数:
1.从SQL分析中提取Hiveexplain逻辑,检查SQL语法的正确性,标记SQL中包含的运算符和输入的数据量
2.自动发动机选择/自动参数优化
自动选择注释结果的执行引擎:小SQL采用火花服务器,其他默认采用火花提交
为标记结果选择不同的运行参数:执行器/内存开销的数量和堆外内存
调优后,SQL在Adhoc30s内占45%,Spark-Submit内存使用平均减少20%。
1.《sparksql 字节跳动 SparkSQL 优化的一些建议》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《sparksql 字节跳动 SparkSQL 优化的一些建议》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/jiaoyu/1538927.html