您当前的位置:首页 > 电脑百科 > 站长技术 > 服务器

Apache Spark优化工具包

时间:2020-07-22 09:30:15  来源:  作者:
Apache Spark优化工具包

> Source: Pixabay

 

Apache Spark是一种开放源代码的分布式计算引擎,目前是用于内存中批处理驱动的数据处理的最受欢迎的框架(它还支持实时数据流传输)。 得益于其先进的查询优化器,DAG调度程序和执行引擎,Spark能够非常高效地处理和分析大型数据集。 但是,在没有仔细调整的情况下运行Spark作业仍会导致性能下降。

在博客文章中,我将分享一些Spark性能调优的技巧,以帮助您解决和加快运行缓慢的Spark作业。

(本文提到的所有功能均来自PySpark,您可以使用Spark API文档找到与Scala / JAVA等效的功能。)

分区不均匀

当数据集最初由Spark加载并成为弹性分布式数据集(RDD)时,所有数据均匀地分布在分区之间。 但是,在用户对其应用某些类型的数据操作之后,这些分区可能会变得不均匀。 例如,groupByKey操作可能导致分区偏斜,因为一个键可能比另一个键包含更多的记录。 此外,由于Spark的DataFrameWriter允许使用partitionBy将分区数据写入磁盘,因此磁盘上的分区也可能不均匀。

在DataFrame中重新平衡偏斜的分区将极大地提高Spark在DataFrame上的处理性能。 您可以使用getNumPartitions函数检查DataFrame中的分区数,并通过运行简单的Spark作业来查找每个分区中的记录数,例如:

from pyspark.sql.functions import spark_partition_id
df.withColumn("partition_id", spark_partition_id()) 
  .groupBy("partition_id") 
  .count()
  .show()

如果发现DataFrame的分区大小高度不均匀,请在对它进行任何分析之前,使用重新分区或合并函数对DataFrame进行重新分区。 还建议在将数据写回磁盘之前,先对内存中的数据进行分区。 RDD模块也支持这些重新分区功能。

坚持RDD的缺点

由于惰性执行原理,除非用户明确调用操作来收集结果,否则Spark不会对数据集执行任何实际的转换。 此外,如果用户希望对中间结果应用其他转换,Spark将需要从头开始重新计算所有内容。 为了允许用户更有效地重用日期,Spark可以使用持久性或缓存功能将数据缓存在内存和/或磁盘中。

但是,缓存并不总是一个好主意。 Spark缓存数据集后,Catalyst优化器优化进一步转换的能力将受到限制,因为它不再能够改善源数据级别的修剪。 例如,如果将过滤器应用于在源数据库中建立索引的列,则Catalyst将无法利用索引来提高性能。

因此,仅当缓存数据将在以后多次重用时才建议使用缓存数据。 迭代探索数据集或调整ML模型时。

Apache Spark优化工具包

> Source: Pixabay

 

基于成本的优化器(CBO)

基于成本的优化器(CBO)通过向Catalyst提供其他表级统计信息,可以加快Spark SQL作业的速度,这对于连接许多数据集的作业特别有用。 使用者可以通过将spark.sql.cbo.enabled设置为true(默认值)来启用CBO。

为了充分利用CBO,用户需要保持列级和表级统计信息都是最新的,从而使CBO可以使用准确的估算来优化查询计划。 为此,在对表运行SQL查询之前,请使用ANALYZE TABLE命令收集统计信息。 记住在修改表之后再次分析表,以确保统计信息是最新的。

广播Join

除了启用CBO,在Spark中优化连接数据集的另一种方法是使用广播联接。 在无序连接中,两个表中的记录都将通过网络传输给执行器,当一个表比另一个大得多时,这是次优的。 在广播联接中,较小的表将被发送给执行程序,以与较大的表联接,从而避免了通过网络发送大量数据的情况。

用户可以通过spark.sql.autoBroadcastJoinThreshold配置控制广播联接,指示要广播的表的最大大小。 此外,即使表的大小大于spark.sql.autoBroadcastJoinThreshold,也可以使用广播提示来告诉Spark广播表:

from pyspark.sql.functions import broadcast
broadcast(spark.table("tbl_a")).join(spark.table("tbl_b"), "key")

垃圾收集(GC)

由于所有Spark作业都占用大量内存,因此确保有效进行垃圾收集非常重要-我们希望产生较少的内存"垃圾"以减少GC时间。 要了解您的Spark作业是否在GC中花费过多时间,请在Spark UI中检查"任务反序列化时间"和" GC时间"。

例如,由于Spark需要反序列化更多对象,因此使用用户定义函数(UDF)和lambda函数将导致更长的GC时间。 还建议避免创建中间对象并将不必要的RDD缓存到JVM堆。

TL; DR:

· 使用重新分区或合并来重新平衡不均匀的分区。

· 仅当数据将被多次重用时才保留数据。

· 使用ANALYZE TABLE命令可以维护CBO的最新统计信息。

· 为小表启用广播连接以加快连接速度。

· 通过使用较少的UDF并避免缓存大对象来优化GC。

(本文翻译自Xinran Waibel的文章《Apache Spark Optimization Toolkit》,参考:https://towardsdatascience.com/apache-spark-optimization-toolkit-17cf3e491992)



Tags:Apache Spark   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
1. 目标在本教程中,我们将讨论Apache Spark和Apache Flink之间的比较。Apache spark和Apache Flink都是用于大规模批处理和流处理的开源平台,为分布式计算提供容错和数据分布...【详细内容】
2020-07-31  Tags: Apache Spark  点击:(108)  评论:(0)  加入收藏
聚合是数据分析任务中广泛使用的运算符,Spark为此提供了坚实的框架。 以下是使用Spark可以针对大数据进行聚合的五种不同方式。RDD上的GroupByKey或ReduceByKey转换:RDD是Spa...【详细内容】
2020-07-24  Tags: Apache Spark  点击:(57)  评论:(0)  加入收藏
> Source: Pixabay Apache Spark是一种开放源代码的分布式计算引擎,目前是用于内存中批处理驱动的数据处理的最受欢迎的框架(它还支持实时数据流传输)。 得益于其先进的查询优...【详细内容】
2020-07-22  Tags: Apache Spark  点击:(77)  评论:(0)  加入收藏
Databricks 上周发布了 Apache Spark 3.0,并将此作为新版 Databricks Runtime 7.0 的一部分。3.0.0 版本包含 3400 多个补丁,为 Python 和 SQL 功能带来了重大进展。Spark 是...【详细内容】
2020-06-22  Tags: Apache Spark  点击:(70)  评论:(0)  加入收藏
▌简易百科推荐
阿里云镜像源地址及安装网站地址https://developer.aliyun.com/mirror/centos?spm=a2c6h.13651102.0.0.3e221b111kK44P更新源之前把之前的国外的镜像先备份一下 切换到yumcd...【详细内容】
2021-12-27  干程序那些事    Tags:CentOS7镜像   点击:(1)  评论:(0)  加入收藏
前言在实现TCP长连接功能中,客户端断线重连是一个很常见的问题,当我们使用netty实现断线重连时,是否考虑过如下几个问题: 如何监听到客户端和服务端连接断开 ? 如何实现断线后重...【详细内容】
2021-12-24  程序猿阿嘴  CSDN  Tags:Netty   点击:(12)  评论:(0)  加入收藏
一. 配置yum源在目录 /etc/yum.repos.d/ 下新建文件 google-chrome.repovim /etc/yum.repos.d/google-chrome.repo按i进入编辑模式写入如下内容:[google-chrome]name=googl...【详细内容】
2021-12-23  有云转晴    Tags:chrome   点击:(7)  评论:(0)  加入收藏
一. HTTP gzip压缩,概述 request header中声明Accept-Encoding : gzip,告知服务器客户端接受gzip的数据 response body,同时加入以下header:Content-Encoding: gzip:表明bo...【详细内容】
2021-12-22  java乐园    Tags:gzip压缩   点击:(9)  评论:(0)  加入收藏
yum -y install gcc automake autoconf libtool makeadduser testpasswd testmkdir /tmp/exploitln -s /usr/bin/ping /tmp/exploit/targetexec 3< /tmp/exploit/targetls -...【详细内容】
2021-12-22  SofM    Tags:Centos7   点击:(7)  评论:(0)  加入收藏
Windows操作系统和Linux操作系统有何区别?Windows操作系统:需支付版权费用,(华为云已购买正版版权,在华为云购买云服务器的用户安装系统时无需额外付费),界面化的操作系统对用户使...【详细内容】
2021-12-21  卷毛琴姨    Tags:云服务器   点击:(6)  评论:(0)  加入收藏
参考资料:Hive3.1.2安装指南_厦大数据库实验室博客Hive学习(一) 安装 环境:CentOS 7 + Hadoop3.2 + Hive3.1 - 一个人、一座城 - 博客园1.安装hive1.1下载地址hive镜像路径 ht...【详细内容】
2021-12-20  zebra-08    Tags:Hive   点击:(9)  评论:(0)  加入收藏
以下是服务器安全加固的步骤,本文以腾讯云的CentOS7.7版本为例来介绍,如果你使用的是秘钥登录服务器1-5步骤可以跳过。1、设置复杂密码服务器设置大写、小写、特殊字符、数字...【详细内容】
2021-12-20  网安人    Tags:服务器   点击:(7)  评论:(0)  加入收藏
项目中,遇到了一个问题,就是PDF等文档不能够在线预览,预览时会报错。错误描述浏览器的console中,显示如下错误:nginx代理服务报Mixed Content: The page at ******** was loaded...【详细内容】
2021-12-17  mdong    Tags:Nginx   点击:(7)  评论:(0)  加入收藏
转自: https://kermsite.com/p/wt-ssh/由于格式问题,部分链接、表格可能会失效,若失效请访问原文密码登录 以及 通过密钥实现免密码登录Dec 15, 2021阅读时长: 6 分钟简介Windo...【详细内容】
2021-12-17  LaLiLi    Tags:SSH连接   点击:(16)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条