SPARK当前是主流大数据计算引擎,它涵盖了各种类型的计算操作,例如离线批处理处理,SQL处理,流媒体/真实时间计算,机器学习,图形计算等。是快速操作,可以满足多元化的数据计算和处理要求,例如UDF,大小桌子以及多道路输出。
作为国内专业数据智能服务提供商,它被引入在早期版本1.3中引入SPARK,并根据Spark的Construction Digital Warehouse,以脱机和实时计算执行大型数据。在计算引擎中,它没有在元数据管理中进行重大改进和升级。。
▲在实际业务方案中推动SparkSQL和HIVEQL来计算3T数据,上图显示了运行速度。DATA表明,在锁定队列的前提下(120G内存,<50 core),SparkSQL2的计算速度。3是Hive 1.2的5-10倍。
对于企业而言,效率和成本始终是他们在处理和计算大量数据处理和计算时必须注意的问题。如何使SPARK的优势充分发挥作用,并在进行大数据操作时真正降低成本和效率?SPARK性能调整积累了多年并与您共享。
众所周知,正确的参数配置非常有助于提高SPARK的使用效率。因此,对于不了解基本原理的Spark用户,我们提供了参数配置模板,这些模板可以直接复制操作以帮助相关数据开发和分析师,分析师使用SPARK进行离线批处理处理和SQL报告分析。
推荐的参数配置模板如下:
对于愿意理解Spark基本原理的读者,本文分类了三个常见的任务提交方法的互动图,例如独立任务,纱线 - 客户和纱线群集,以帮助相关用户了解Spark的核心技术原理,以更直观地了解Spark的核心技术原理并阅读阅读以进行阅读。发现以下高级内容是基础。
独立
纱线客户
纱线群
在理解上述三个常见任务的基本交互之后,将从三个方面进行,包括存储格式,数据倾斜和参数配置,以共享推动Spark性能调整的高级姿势。
众所周知,不同的SQL发动机的不同存储格式不同。例如,Hive更倾向于兽人,并且Spark更倾向于镶嵌。这要求文件格式最好使用列存储,并且可以进行分配。因此,我们建议使用基于GZIP,Snappy和Zlib.ther的parquet和orc和压缩算法的列型存储文件格式。我们建议使用Parquet+Gzip,ORC+ZLIB组合方法。这种组合方法考虑了列存储和细分情况。与TXT+GZIT的行存储和不加区分区的组合方法相比,最好满足上述大数据方案的需求。
例如,一个以在线推动500G在线推出的数据,在不同的集群环境和SQL引擎下,不同存储文件格式和算法组合的性能测试。测试数据显示,在相同的资源条件下,Parquet+Gz存储格式在至少比多值查询和多个表上的文本+GZ存储格式高60%。
结合测试结果,我们梳理了不同集群环境推荐的存储格式,并推荐使用SQL引擎,如下所示:
同时,我们还测试了parquet+gz,orc+zlib的内存消耗。将表的单个历史分区数据作为示例,parquet+gz,orc+zlib保留了26%和49%的存储空间,TXT+GZ分别。
完整的测试结果如下:下表:
可以看出,Parquet+Gz,Orc+Zlib确实对降低成本和效率产生了重大影响。
Phive和Spark以打开指定文件格式的压缩算法
件构建表格时指定文件格式
?在线表音调
表ctas观看
数据倾斜分为两种情况:地图倾斜和减少倾斜。本文的重点是降低的倾斜,例如组合和加入,通常在SQL中,可能是最难的命中区域。当数据倾斜时,通常是表现为:一部分任务的一部分比同一批次的任务慢得多,数据数据的量明显大于其他任务,某些任务室,Spark Shuffle文件的丢失等。如下图所示,持续时间列和ShufflereadSize/Records列,我们显然可以发现某些任务处理数据的数量已大大增加,这需要时间增加,从而导致数据倾斜:
如何解决数据倾斜?
我们总结了7种数据倾斜解决方案,以帮助您解决常见数据倾斜问题:
解决方案1:使用Hive ETL预处理数据
也就是说,在数据血之间的关系中,倾斜问题向前移动,因此下游用户无需考虑数据倾斜问题。
下该方案适用于具有强大下游交互的业务,例如第二级/分钟查询级别。
解决方案2:过滤少量导致倾斜的键
也就是说,消除了倾斜的大钥匙,该方案通常与百分比相结合。如果99.99%的ID记录数量小于100,则可以删除100个以外的100个ID。
型在统计方案中,该方案更实用,在详细的情况下,您需要查看过滤大键是否集中并且关注业务。
解决方案3:改善洗牌操作的并行性
也就是说,通过添加Shuffle Write Task.sparksql2.3的spark.sql.shuffle.partition参数进行动态调整以实现部分均匀分配的数量。以下参数以启动脚本并对值进行动态调整:
,此方案非常简单,但是键的统一分配可以扮演更好的优化角色。在分区中,每个任务都可以并行处理50条记录和10个任务运行号。它只需要原始的1/10。例如,有一百万个大钥匙记录,因此大钥匙仍将分配给一个任务。
解决方案4:转动减少加入到Mapjoin
它指的是地图结束上的联接,并且不采用洗牌过程。示出SPARK为例,可以将小的RDD数据发送到每个工人节点上的每个工作人员节点(NM),并且在每个工作人员节点上进行了连接。
小此方案适用于联接表场景的小表(数据量超过100 g)。此处的小表的默认阈值是10m,并且该阈值下方的小表可以分配到工作节点。可调节的上限需要小于容器分配的内存。
解决方案5:示例倾斜键和分裂连接操作
如下图所示:表A联接B,表A有大键,B。没有大键,其中大键的ID是1个,并且有3个记录。
如何拆分联接操作?
*****当单个任务处理太多时,该方案的本质仍在降低数据倾斜的风险,并且适合于更少的大键的情况。
解决方案6:使用随机前缀和扩展RDD执行加入
例如,表A,表A中的表A,有一个大键,还有大键B。作为一个例子:
大该方案适合更大的关键,但也将增加资源消耗。
解决方案7:组合仪
也就是说,在地图侧进行组合仪操作,以减少随机降低的数据量。
*****此方案适合累积场景和其他场景。
在实际情况下,建议分析相关开发人员的特定情况,并且上述方法也可以结合使用复杂问题。
火花参数配置
为了响应倾斜的情况,我们进行了整理并总结了参数配置参考表格,以帮助每个人执行Spark性能调整。这些参数的设置适用于大约2T数据的见解和应用,这些数据基本上满足了大多数场景的调整需求。
目前,Spark已开发为Spark3.X,最新版本是Spark 3.1.2发布(6月1日,2021年)。Spark3.x的许多新功能,例如动态分区修剪,PANDAS API的重大改进和亮点嵌套柱的增强和向下推动,为进一步实现降低成本和效率提供了好主意。未来,推动将继续关注Spark的演变,并继续发展实践和共享。