iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Spark性能优化指南——初级篇
  • 690
分享到

Spark性能优化指南——初级篇

Spark性能优化指南——初级篇 2021-09-09 09:09:15 690人浏览 猪猪侠
摘要

原文来我的公众号:spark性能优化指南——初级篇 一. Spark作业原理 我们使用spark-submit提交一个Spark作业之后,这个作业就会启动一个对应的Driver进程。该进程是向集群管理器(Yarn,k8s)申请运行

Spark性能优化指南——初级篇

原文来我的公众号:spark性能优化指南——初级篇

一. Spark作业原理

我们使用spark-submit提交一个Spark作业之后,这个作业就会启动一个对应的Driver进程。该进程是向集群管理器(Yarn,k8s)申请运行Spark作业需要使用的资源,这里的资源指的就是Executor进程。 YARN集群管理器会根据我们为Spark作业设置的资源参数,在各个工作节点上,启动一定数量的Executor进程,每个Executor进程都占有一定数量的内存和CPU core。 在申请到了作业执行所需的资源之后,Driver进程就会开始调度和执行我们编写的作业代码了。 Driver进程会将我们编写的Spark作业代码分拆为多个stage,每个stage执行一部分代码片段,并为每个stage创建一批task,然后将这些task分配到各个Executor进程中执行。 task是最小的计算单元,负责执行一模一样的计算逻辑(也就是我们自己编写的某个代码片段),只是每个task处理的数据不同而已。 一个stage的所有task都执行完毕之后,会在各个节点本地的磁盘文件中写入计算中间结果,然后Driver就会调度运行下一个stage。 下一个stage的task的输入数据就是上一个stage输出的中间结果。如此循环往复,直到将我们自己编写的代码逻辑全部执行完,并且计算完所有的数据,得到我们想要的结果为止。 Spark是根据shuffle类算子来进行stage的划分。如果我们的代码中执行了某个shuffle类算子(比如reduceByKey、join等),那么就会在该算子处,划分出一个stage界限来。 可以大致理解为,shuffle算子执行之前的代码会被划分为一个stage,shuffle算子执行以及之后的代码会被划分为下一个stage。   因此一个stage刚开始执行的时候,它的每个task可能都会从上一个stage的task所在的节点,去通过网络传输拉取需要自己处理的所有key,然后对拉取到的所有相同的key使用我们自己编写的算子函数执行聚合操作(比如reduceByKey()算子接收的函数)。这个过程就是shuffle。 当我们在代码中执行了cache/persist等持久化操作时,根据我们选择的持久化级别的不同,每个task计算出来的数据也会保存到Executor进程的内存或者所在节点的磁盘文件中。   因此Executor的内存主要分为三块: 第一块是让task执行我们自己编写的代码时使用,默认是占Executor总内存的20%; 第二块是让task通过shuffle过程拉取了上一个stage的task的输出后,进行聚合等操作时使用,默认也是占Executor总内存的20%; 第三块是让RDD持久化时使用,默认占Executor总内存的60%。   task的执行速度是跟每个Executor进程的CPU core数量有直接关系的。一个CPU core同一时间只能执行一个线程。而每个Executor进程上分配到的多个task,都是以每个task一条线程的方式,多线程并发运行的。 如果CPU core数量比较充足,而且分配到的task数量比较合理,那么通常来说,可以比较快速和高效地执行完这些task线程。  

二.核心调优参数

num-executors:

该参数用于设置Spark作业总共要用多少个Executor进程来执行。Driver在向YARN集群管理器申请资源时,YARN集群管理器会尽可能按照你的设置来在集群的各个工作节点上,启动相应数量的Executor进程。这个参数非常之重要,如果不设置的话,默认只会给你启动少量的Executor进程,此时你的Spark作业的运行速度是非常慢的。(建议50~100个左右的Executor进程)  

executor-memory:

该参数用于设置每个Executor进程的内存。Executor内存的大小,很多时候直接决定了Spark作业的性能,而且跟常见的JVM OOM异常,也有直接的关联。(根据作业大小不同,建议设置4G~8G,num-executors乘以executor-memory,是不能超过队列的最大内存量的)  

executor-cores:

该参数用于设置每个Executor进程的CPU core数量。这个参数决定了每个Executor进程并行执行task线程的能力。因为每个CPU core同一时间只能执行一个task线程,因此每个Executor进程的CPU core数量越多,越能够快速地执行完分配给自己的所有task线程。(建议设置为2~4个,且num-executors * executor-cores不要超过队列总CPU core的1/3~1/2)  

driver-memory:

该参数用于设置Driver进程的内存(建议设置512M到1G)。  

spark.default.parallelism:

该参数用于设置每个stage的默认task数量。这个参数极为重要,如果不设置可能会直接影响你的Spark作业性能。(建议为50~500左右,缺省情况下Spark自己根据底层hdfs的block数量来设置task的数量,默认是一个HDFS block对应一个task。Spark官网建议设置该参数为num-executors * executor-cores的2~3倍较为合适)  

spark.storage.memoryFraction:

该参数用于设置RDD持久化数据在Executor内存中能占的比例,默认是0.6(原则上是尽可能保证数据能够全部在内存中,但如果发现作业发生频繁的GC,就该考虑是否调小)  

spark.shuffle.memoryFraction:

该参数用于设置shuffle过程中一个task拉取到上个stage的task的输出后,进行聚合操作时能够使用的Executor内存的比例,默认是0.2。也就是说,Executor默认只有20%的内存用来进行该操作。shuffle操作在进行聚合时,如果发现使用的内存超出了这个20%的限制,那么多余的数据就会溢写到磁盘文件中去,此时就会极大地降低性能。(shuffle操作较多时,建议降低持久化操作的内存占比,提高shuffle操作的内存占比比例,避免shuffle过程中数据过多时内存不够用,必须溢写到磁盘上,降低了性能)

 

Randy 微信扫描二维码,关注我的公众号 我的个人网站:Http://www.itrensheng.com/

 

您可能感兴趣的文档:

--结束END--

本文标题: Spark性能优化指南——初级篇

本文链接: https://www.lsjlt.com/news/3422.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL高性能优化指南
    作者:禅与计算机程序设计艺术 1.简介 随着互联网公司网站流量的逐渐增长,数据库服务器的负载也日益增加。如何提升MySQL数据库服务器的性能、节省硬件成本、提升网站的响应速度、节省运营成本是一个重要...
    99+
    2023-10-09
    自然语言处理 人工智能 语言模型 编程实践 开发语言 架构设计
  • PHP 性能优化:数据库优化指南
    PHP 性能优化:数据库优化指南 数据库的性能对 PHP 应用程序的整体性能至关重要。通过实施以下最佳实践,可以显著优化数据库性能: 1. 索引优化 创建必要的索引以加速查询。 确保...
    99+
    2024-05-11
    php 数据库优化
  • PHP 函数性能优化指南
    为了优化 php 函数性能,建议:避免不必要的函数调用。缓存函数调用结果。利用 php 内置扩展。避免传递大数组,可考虑使用引用参数或 json 字符串。通过应用这些最佳实践,可以显著提...
    99+
    2024-04-11
    php 性能优化 redis
  • PHP入门指南:PHP性能优化
    PHP是一种流行的编程语言,特别适合用于构建Web应用程序。然而,随着应用程序的规模不断增大,PHP的性能也成为了一个问题。本篇文章旨在为初学者提供一些有关PHP性能优化的基础知识,帮助他们提高自己的PHP编程水平。使用最新版本的PHPPH...
    99+
    2023-05-21
    PHP 性能优化 入门指南
  • 性能优化指南:性能优化的一般性原则与方法
    【本文转自博客园 作者:xybaby 原文链接:https://www.cnblogs.com/xybaby/p/9055734.html】作为一个程序员,性能优化是常有的事情,不管是桌面应用还是web应用,不管是前端还是后端,不管是单点应...
    99+
    2023-06-05
  • PHP中的性能优化技术指南
    随着网站越来越复杂,PHP程序的性能问题也成为了大多数Web开发人员关注的焦点。为了满足日益增长的访问量,我们需要优化PHP应用程序的性能。下面让我们来了解一些PHP中的性能优化技术。使用缓存缓存是提高PHP应用程序性能的一个重要手段。使用...
    99+
    2023-05-21
    PHP 性能优化 技术指南
  • 摆脱性能瓶颈:ASP 优化指南
    启用 ASP.NET 输出缓存和页面缓存。 使用 Memcached 或 Redis 等内存缓存存储经常访问的数据。 针对 Ajax 调用使用 HTML5 应用程序缓存。 代码优化 尽量减少 ASP.NET 服务器控件的使用。 使用...
    99+
    2024-04-02
  • Golang性能调优指南
    Golang 是一种由 Google 开发的开源编程语言,以其简洁、高效的特点受到许多开发者的青睐。然而,在开发过程中,为了保证程序的性能和效率,我们有时需要对代码进行调优。本文将介绍...
    99+
    2024-03-06
    性能 调优 golang 数据访问
  • Android性能优化系列篇UI优化
    目录前言一、UI优化1.1 系统做的优化1.1.1 硬件加速1.2 优化方案1.2.1 java代码布局1.2.2 View重用1.2.3 异步创建view1.2.4 xml布局优化...
    99+
    2022-11-13
    Android性能UI优化 Android UI优化
  • PHP 性能优化:服务器配置指南
    通过优化服务器配置可以提升 php 应用程序性能,具体措施包括:1. 启用 opcache 以缓存编译过的脚本字节码;2. 优化 php-fpm 设置以提高资源利用率并减少延迟;3. 启...
    99+
    2024-05-10
    php 性能优化 css redis
  • PHP 应用程序性能优化之数据库优化指南
    PHP 应用程序性能优化之数据库优化指南 前言 数据库是 PHP 应用程序的重要组成部分,它的性能直接影响应用程序的整体性能。优化数据库可以显著提高应用程序的速度和响应能力。本文将提供...
    99+
    2024-05-01
    php 数据库优化 mysql redis
  • Spark性能优化的基础是什么
    Spark性能优化的基础是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。前言在大数据计算领域,Spark已经成为了越来越流行、越来越受欢迎的计算平台之一。Spark的功...
    99+
    2023-06-03
  • JavaScript 性能优化指南:从缓慢到惊人
    缓存经常访问的数据,例如 API 响应或大型数据集。 预取将资源加载到浏览器缓存中,以缩短后续请求的响应时间。 压缩和捆绑 压缩 JavaScript 文件以减小文件大小,从而减少下载时间。 捆绑多个 JavaScript 文件以减...
    99+
    2024-03-10
    缓存和预取
  • PHP 微服务容器化性能调优指南
    为优化容器化 php 微服务性能,执行以下步骤:镜像优化:使用多阶段构建、移交 php 可执行文件和启用 opcache。资源分配:调整内存和 cpu 限制,以防止资源不足。网络优化:启...
    99+
    2024-05-08
    php 微服务 mysql linux redis
  • PHP Web应用程序的性能优化指南
    为了提高php web应用程序的性能,可以使用以下优化技巧:使用对象/页面缓存存储经常访问的数据,避免数据库检索。优化数据库查询、选择合适的数据库类型以及减少http请求。优化php设置...
    99+
    2024-05-09
    php 性能优化 css redis nginx
  • Java JSP 优化指南:提升速度和性能
    减少 JSP 页面的大小 使用 CSS 和 JavaScript 文件: 将 CSS 和 JavaScript 放在外部文件中,而不是内联到 JSP 页面中。这将减少页面大小并提高可维护性。 压缩 HTML、CSS 和 JavaScri...
    99+
    2024-03-15
    JSP
  • spark性能优化要注意哪几点
    spark性能优化要注意哪几点,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一.优化方向,序列化1.官网位置2.解释:默认用的是java序列化,但是会很慢,第二...
    99+
    2023-06-02
  • 性能优化进阶篇:ASP 优化大揭秘
    使用 OutputCache 属性对整个页面或部分页面进行缓存。 启用浏览器缓存,使用 HTTP 头(如 Expires、Cache-Control)控制缓存时长。 考虑使用 Response.Buffer 节省网络带宽。 数据库优化...
    99+
    2024-04-02
  • Python 提速大作战:终极性能优化指南
    优化 Python 应用程序的性能对于提高用户体验和维持高吞吐量至关重要。本文将探讨一系列经过验证的技巧和技术,帮助您显著提升 Python 代码的执行速度。 代码优化 使用内置数据类型: NumPy 和 Pandas 等第三方库提供...
    99+
    2024-02-15
    Python 性能优化 代码加速 运行速度提升
  • webpack构建打包的性能优化实战指南
    目录前言一、优化打包构建速度,提升开发体验和效率1.1优化babel-loader1.2IgnorePlugin,避免引入无用模块1.3noParse避免重复模块化解析1.4happ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作