Spark环境下SQL优化的方法
2021-08-04杨彦彬干祯辉
数字通信世界 2021年7期
杨彦彬,干祯辉
(1.中通服软件科技有限公司,上海 200000;2.杭州东方通信软件技术有限公司,浙江 杭州 310013)
0 引言
随着大数据时代到来,关系型数据结构逐渐被NOSQL所替代。但是,由于传统SQL语法方便易学且普及率高,因此直接废弃难度很大,最终以Hive SQL及Spark SQL为代表的大数据组件也转向支持传统SQL。这些组件提供了SQL解析为分布式运算引擎的功能,但在如何提升执行效率方面则没有更多论述。本文以此为切入点,一方面讨论了SQL迁移后出现的问题原因,另一方面给出了简单实用的解决技巧,以利于在未来生产实践中推广。
1 大数据处理框架Spark概述
Spark是一个日常数据处理框架,它在接受job的时候,内部会对其进行细致划分,分为逻辑执行计划和物理执行。逻辑执行计划是将一个RDD切分成不同的Stage,并产生一系列依赖关系,也就是Task之间窄依赖和宽依赖,其中宽依赖部分形成了Shuffle[1]。大部分Shuffle处后续会切分成多个Stage提交节点后执行Action操作,称之为物理执行。
Spark的Task执行可以分为两种计算形式:流水线性计算和非流水线性计算,前者直接计算完成,有效减少内存空间,典型的是filter()或者map()等操作。而后者则需要借助内存空间完成,典型的是Groupbykey()或者Reducebykey()等操作。因此流水线性计算速度要快于非流水线性计算。图1是Spark整体转换流程[2]。

图1 Spark整体转换流程
2 业务数据迁移带来的问题
Hive SQL及Spark SQL这些组件出现,实现了将收集后的海量数据按照原有业务模型进行计算的可能,但是这个过程中也带来了很多问题,最典型的无疑是数据倾斜。……
登录APP查看全文
