Spark Sql 作业优化

     2023-04-17     253

关键词:

【中文标题】Spark Sql 作业优化【英文标题】:Spark Sql Job optimization 【发布时间】:2018-09-30 18:46:03 【问题描述】:

我有一个工作,它包含大约 9 条 sql 语句来从 hive 中提取数据并写回 hive db。它目前正在运行 3 小时,考虑到处理数据的火花能力,这似乎太长了。该应用程序总共启动 11 个阶段。

我使用 Spark UI 做了一些分析,发现以下灰色区域可以改进:

作业 5 中的第 8 阶段具有 1.5 TB 的随机输出。 作业 4 和作业 5 之间的时间间隔为 20 分钟。我读到了这个时间间隔,发现 spark 执行 IO 超出 spark 作业,这反映了两个作业之间的间隔,可以在驱动程序日志中看到。

我们有一个由 800 个节点组成的集群,每个队列的资源有限,我使用下面的 conf 提交作业:

--执行人数 200 -- 执行器核心 1 -- 执行器内存 6G -- 部署模式客户端

也附上 UI 的图片。

现在我的问题是:

我在哪里可以找到这项工作的驱动程序日志? 在图片中,我看到一长串添加的 Executor,我总和超过 200,但在 Executor 选项卡中,数字正好是 200。对此有何解释? 在所有阶段中,只有一个阶段的 TASK 约为 35000,而其余阶段只有 200 个任务。我应该增加执行者的数量还是应该使用 spark 的动态分配工具?

【问题讨论】:

这 9 条单独的 SQL 语句是针对 HDFS 中的同一张表还是 N 表? 前两个 SQL 从主表拉数据到一个公用表。查询的其余部分使用公用表根据过滤条件生成输出。 【参考方案1】:

以下是可以在一定程度上指导你的思维过程:

每个执行器必须有一个核心吗?执行者不必总是很胖。您可以在一个执行器中拥有更多核心。这是创建苗条与肥胖执行者之间的权衡。

配置shuffle分区参数spark.sql.shuffle.partitions

确保从 Hive 读取数据时,您使用的是 Sparksession(基本上是 HiveContext)。这会将 HDFS 中的数据和 Hive 的 Metastore 中的模式信息拉入 Spark 内存。

是的,资源的动态分配是一种有助于分配正确资源集的功能。这比固定分配要好。

【讨论】:

spark学习之作业优化(代码片段)

...法优化和数据倾斜的技巧,今天我们来学习spark中的作业优化,也就是job优化。对往期内容感兴趣的同学可以参考👇:链接:spark学习之处理数据倾斜.链接:spark学习之sparksql语法优化.链接:spark学习之资源调度.链接:spark学 查看详情

spark sql:如何优化多个巨大的配置单元表连接

...join【发布时间】:2019-01-2220:00:53【问题描述】:有sparksql作业:spark.sql(s"""SELECT*FROM(select*fromdefault.table1wherecreated_dtbetweendate\'2018-01-01\'and\ 查看详情

Python Spark 作业优化

】PythonSpark作业优化【英文标题】:PythonSparkJobOptimization【发布时间】:2018-09-0217:07:32【问题描述】:我正在使用在Dataproc集群上运行PySpark(2.3)3个节点(4个CPU)每个8GB内存。数据有近130万行4列,即:Date,unique_id(Alphanumeric),category(1... 查看详情

EMR 上 Spark 批处理作业的优化

】EMR上Spark批处理作业的优化【英文标题】:OptimizationofSparkbatchjobonEMR【发布时间】:2020-02-1320:46:01【问题描述】:我们正在EMR集群上运行spark-job,集群配置如下所示。Resources:NodeType:CORE-2INSTANCESOFr4.8xlarge32vCore,244GiBmemory,EBSonlystorag... 查看详情

优化 Spark AWS GLUE 作业

】优化SparkAWSGLUE作业【英文标题】:OptimizingsparkAWSGLUEjobs【发布时间】:2020-12-1821:04:26【问题描述】:我正在使用pysparkAWSGLUE从Aurorapostgres读取8个表,经过转换并加入写入一个大小约为2-5GB的红移表,读取表大小如下92GB、20GB、68MB... 查看详情

使用 Spark 作业服务器的 Spark SQL 作业中的错误“此上下文的作业类型无效”

】使用Spark作业服务器的SparkSQL作业中的错误“此上下文的作业类型无效”【英文标题】:Theerror"Invalidjobtypeforthiscontext"insparkSQLjobwithSparkjobserver【发布时间】:2016-01-2708:47:52【问题描述】:我使用spark作业服务器创建了一... 查看详情

Spark SQL 作业的 Spark 修复任务号

】SparkSQL作业的Spark修复任务号【英文标题】:SparkfixtasknumberforSparkSQLjobs【发布时间】:2016-08-0913:13:05【问题描述】:我经常看到ApacheSpark安排一系列阶段,其中涉及固定的200个任务。由于这种情况不断发生在许多不同的工作中,... 查看详情

spark学习之路sparkcore的调优之开发调优[转](代码片段)

...尝试使用Spark的原因很简单,主要就是为了让大数据计算作业的执行速度更快、性能更高。然而,通过Spark开发出高性能的大数据计算作业,并不是那么简单的。如果没有对Spark作业进行合理的调优,Spark作业的执行速度可能会很... 查看详情

spark性能优化指南——基础篇

...尝试使用Spark的原因很简单,主要就是为了让大数据计算作业的执行 查看详情

spark性能优化指南——基础篇

...尝试使用Spark的原因很简单,主要就是为了让大数据计算作业的执行速度更快、 查看详情

spark记录sparkcore的调优之开发调优(代码片段)

...尝试使用Spark的原因很简单,主要就是为了让大数据计算作业的执行速度更快、性能更高。然而,通过Spark开发出高性能的大数据计算作业,并不是那么简单的。如果没有对Spark作业进行合理的调优,Spark作业的执行速度可能会很... 查看详情

spark性能优化指南——基础篇转

...尝试使用Spark的原因很简单,主要就是为了让大数据计算作业的执行 查看详情

Spark SQL:为啥一个查询有两个作业?

】SparkSQL:为啥一个查询有两个作业?【英文标题】:SparkSQL:Whytwojobsforonequery?SparkSQL:为什么一个查询有两个作业?【发布时间】:2016-10-1121:03:39【问题描述】:实验我在Spark1.6.1上尝试了以下sn-p。valsoDF=sqlContext.read.parquet("/batchPo... 查看详情

转载spark性能优化:资源调优篇

  在开发完Spark作业之后,就该为作业配置合适的资源了。Spark的资源参数,基本都可以在spark-submit命令中作为参数设置。很多Spark初学者,通常不知道该设置哪些必要的参数,以及如何设置这些参数,最后就只能胡乱设置... 查看详情

spark性能优化指南——高级篇

...大数据计算中一个最棘手的问题——数据倾斜,此时Spark作业的性能会比期望差很多。数据倾斜调优,就是使用各种技术方案解决不同类型的数据倾斜问题,以保证Spark作业的 查看详情

Spark sql 查询优化

】Sparksql查询优化【英文标题】:Sparksqlqueryoptimization【发布时间】:2019-02-1210:12:04【问题描述】:我想在spark数据框中加载一个数据表。我的数据库中有2个表。是否需要写2次完整连接选项?有什么办法可以写一次公共部分,然... 查看详情

如何将 Spark SQL 批处理作业结果写入 Apache Druid?

】如何将SparkSQL批处理作业结果写入ApacheDruid?【英文标题】:HowtowriteSparkSQLbatchjobresultstotheApacheDruid?【发布时间】:2019-11-1108:34:35【问题描述】:我想将Spark批处理结果数据写入ApacheDruid。我知道Druid有本地批量摄取,例如index_par... 查看详情

spark优化:合理分配资源

...资源与性能的提升,是成正比的;写完了一个复杂的spark作业之后,进行性能调优的时候,首先第一步,我觉得,就是要来调节最优的资源配置;在这个基础之上,如果说你的spark作业,能够分配的资源达到了你的能力范围的顶... 查看详情