Spark提交参数说明和常见优化

2023-11-12

会用spark,会调api和能用好spark是两回事,在进行开发的过程中,不仅要了解运行原理,还要了解业务,将合适的方法和业务场景合适的结合在一起,才能发挥最大的价值。

spark-submit

进入spark的home目录,执行以下命令查看帮助

bin/spark-submit --help
spark提交任务常见的两种模式

  1. :local/local[K]
  • 本地使用一个worker线程运行spark程序
  • 本地使用K个worker线程运行spark程序
    此种模式下适合小批量数据在本地调试代码
  1. :yarn-client/yarn-cluster
  • yarn-client:以client方式连接到YARN集群,集群的定位由环境变量HADOOP_CONF_DIR定义,该方式driver在client运行。
  • yarn-cluster:以cluster方式连接到YARN集群,集群的定位由环境变量HADOOP_CONF_DIR定义,该方式driver也在集群中运行。
    注意:若使用的是本地文件需要在file路径前加:file://

在提交任务时的几个重要参数

  • executor-cores —— 每个executor使用的内核数,默认为1
  • num-executors —— 启动executors的数量,默认为2
  • executor-memory —— executor内存大小,默认1G
  • driver-cores —— driver使用内核数,默认为1
  • driver-memory —— driver内存大小,默认512M
    下边给一个提交任务的样式
spark-submit \
  --master local[5]  \
  --driver-cores 2   \
  --driver-memory 8g \
  --executor-cores 4 \
  --num-executors 10 \
  --executor-memory 8g \
  --class PackageName.ClassName XXXX.jar \
  --name "Spark Job Name" \
  InputPath      \
  OutputPath
  如果这里通过--queue 指定了队列,那么可以免去写--master

以上就是通过spark-submit来提交一个任务

一些参数的常规设置

  • executor_cores*num_executors
    表示的是能够并行执行Task的数目
    不宜太小或太大!一般不超过总队列 cores 的 25%,比如队列总 cores 400,最大不要超过100,最小不建议低于 40,除非日志量很小。

  • executor_cores
    不宜为1!否则 work 进程中线程数过少,一般 2~4 为宜。

  • executor_memory
    一般 6~10g 为宜,最大不超过20G,否则会导致GC代价过高,或资源浪费严重。

  • driver-memory
    driver 不做任何计算和存储,只是下发任务与yarn资源管理器和task交互,除非你是 spark-shell,否则一般 1-2g

增加每个executor的内存量,增加了内存量以后,对性能的提升,有三点:

  1. 如果需要对RDD进行cache,那么更多的内存,就可以缓存更多的数据,将更少的数据写入磁盘,
    甚至不写入磁盘。减少了磁盘IO。
  2. 对于shuffle操作,reduce端,会需要内存来存放拉取的数据并进行聚合。如果内存不够,也会写入磁盘。如果给executor分配更多内存以后,就有更少的数据,需要写入磁盘,甚至不需要写入磁盘。减少了磁盘IO,提升了性能。
  3. 对于task的执行,可能会创建很多对象。如果内存比较小,可能会频繁导致JVM堆内存满了,然后频繁GC,垃圾回收,minor GC和full GC。(速度很慢)。内存加大以后,带来更少的GC,垃圾回收,避免了速度变慢,性能提升。

常规注意事项

  • 预处理数据,丢掉一些不必要的数据
  • 增加Task的数量
  • 过滤掉一些容易导致发生倾斜的key
  • 避免创建重复的RDD
  • 尽可能复用一个RDD
  • 对多次使用的RDD进行持久化
  • 尽量避免使用shuffle算子
  • 在要使用groupByKey算子的时候,尽量用reduceByKey或者aggregateByKey算子替代.因为调用groupByKey时候,按照相同的key进行分组,形成RDD[key,Iterable[value]]的形式,此时所有的键值对都将被重新洗牌,移动,对网络数据传输造成理论上的最大影响.
  • 使用高性能的算子

参考: https://blog.csdn.net/gamer_gyt/article/details/79135118

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spark提交参数说明和常见优化 的相关文章

  • 我可以在没有 Hadoop 的情况下使用 Spark 作为开发环境吗?

    我对大数据和相关领域的概念非常陌生 如果我犯了一些错误或拼写错误 我很抱歉 我想了解阿帕奇火花 http spark apache org 并使用它仅在我的电脑中 在开发 测试环境中 由于Hadoop包含HDFS Hadoop分布式文件系统
  • 如何解决使用 Spark 从 S3 重新分区大量数据时从内存中逐出缓存的表分区元数据的问题?

    在尝试从 S3 重新分区数据帧时 我收到一个一般错误 Caused by org apache spark SparkException Job aborted due to stage failure Task 33 in stage 1
  • Hadoop 推测任务执行

    在Google的MapReduce论文中 他们有一个备份任务 我认为这与Hadoop中的推测任务是一样的 推测任务是如何实现的 当我启动一项推测任务时 该任务是从一开始就作为较旧且缓慢的任务开始 还是从较旧的任务到达的位置开始 如果是这样
  • 名称节点处于安全模式

    我提到了这些问题名称节点处于安全模式 无法离开 https stackoverflow com questions 15803266 name node is in safe mode not able to leave and SafeM
  • 当我将文件存储在 HDFS 中时,它们会被复制吗?

    我是 Hadoop 新手 当我使用以下方式存储 Excel 文件时hadoop fs putcommoad 它存储在HDFS中 复制因子为3 我的问题是 是否需要3份并分别存储到3个节点中 这是 HDFS 工作的漫画 https docs
  • 公平调度器和容量调度器有什么区别?

    我是 Hadoop 世界的新手 想了解公平调度程序和容量调度程序之间的区别 另外我们什么时候应该使用每一个 请简单地回答一下 因为我在网上读了很多东西 但从中得到的不多 公平调度是一种为作业分配资源的方法 使得所有作业随着时间的推移平均获得
  • Hadoop-reducer 如何获取数据?

    据我所知 映射器为每个减速器生成 1 个分区 减速器如何知道要复制哪个分区 假设有 2 个节点运行用于字数统计程序的映射器 并且配置了 2 个缩减器 如果每个映射节点生成 2 个分区 并且两个节点中的分区都可能包含相同的单词作为键 那么减速
  • 适用于 Python 3.x 的 Hive 客户端

    是否可以使用 Python 3 x 连接到 hadoop 并运行 hive 查询 我正在使用Python 3 4 1 我发现可以按照这里写的方式完成 https cwiki apache org confluence display Hiv
  • 与文件名中的冒号“:”作斗争

    我有以下代码 用于加载大量 csv gz 并将它们转储到其他文件夹中 并将源文件名作为一列 object DailyMerger extends App def allFiles path File List File val parts
  • 为什么我们需要将外部表移动到托管 Hive 表?

    我是 Hadoop 新手 正在学习 Hive 在 Hadoop 权威指南第 3 版中 第 12 页 第428章 最后一段 我不明白下面关于 HIVE 中外部表的段落 一种常见的模式是使用外部表访问存储在 HDFS 中的初始数据集 由另一个进
  • Hive NVL 不适用于列的日期类型 - NullpointerException

    我正在使用 HDFS 上的 MapR Hive 发行版并面临以下问题 如果表的列类型是 日期 类型 则NVL https cwiki apache org confluence display Hive LanguageManual UDF
  • 如何强制 Spark 执行代码?

    我如何强制 Spark 执行对 map 的调用 即使它认为由于其惰性求值而不需要执行它 我试过把cache 与地图调用 但这仍然没有解决问题 我的地图方法实际上将结果上传到 HDFS 所以 它并非无用 但 Spark 认为它是无用的 简短回
  • 以不同用户身份运行 MapReduce 作业

    我有一个与 Hadoop 交互的 Web 应用程序 Cloudera cdh3u6 特定的用户操作应在集群中启动新的 MapReduce 作业 该集群不是一个安全集群 但它使用简单的组身份验证 因此 如果我以自己的身份通过 ssh 连接到它
  • 错误 hive.HiveConfig:无法加载 org.apache.hadoop.hive.conf.HiveConf。确保 HIVE_CONF _DIR 设置正确

    我正在尝试将数据从 sqoop 导入到 hive MySQL use sample create table forhive id int auto increment firstname varchar 36 lastname varch
  • 更改spark_temporary目录路径

    是否可以更改 temporarySpark在写入之前保存临时文件的目录 特别是 由于我正在编写表的单个分区 因此我希望临时文件夹位于分区文件夹内 是否可以 由于其实现原因 无法使用默认的 FileOutputCommiter FileOut
  • Hive 聚集在多个列上

    据我所知 当配置单元表聚集在一列上时 它会执行该分桶列的哈希函数 然后将该行数据放入其中一个桶中 每个桶都有一个文件 即如果有 32 个桶 那么 hdfs 中就有 32 个文件 将 clustered by 放在多个列上意味着什么 例如 假
  • Protobuf RPC 在 Hadoop 2.2.0 单节点服务器上不可用?

    我正在尝试在按照本教程安装的本地单节点集群上运行 hadoop 2 2 0 mapreduce 作业 http codesfusion blogspot co at 2013 10 setup hadoop 2x 220 on ubuntu
  • 通过Oozie命令行指定多个过滤条件

    我正在尝试通过命令行搜索一些特定的 oozie 作业 我使用以下语法进行相同的操作 oozie jobs filter status RUNNING status KILLED 但是 该命令仅返回正在运行的作业 而不是已杀死的作业 需要帮助
  • Hadoop fs 查找块大小?

    在 Hadoop fs 中如何查找特定文件的块大小 我主要对命令行感兴趣 例如 hadoop fs hdfs fs1 data 但看起来这并不存在 有Java解决方案吗 The fsck其他答案中的命令列出了块并允许您查看块的数量 但是 要
  • Hadoop 减速器数量配置选项优先级

    以下3个设置reduce数量的选项的优先级是什么 换句话说 如果三者都设置了 会考虑哪一个呢 Option1 setNumReduceTasks 2 within the application code Option2 D mapredu

随机推荐

  • 量子遗传算法原理与MATLAB仿真程序

    写在前面 1 其实这些智能算法的思想都差不多 只不过是各自搜寻方式 编码方式 种群更新方式等不一样而已 量子遗传算法是在遗传算法的基础上使用了一种新的编码方式 2 直接看前面介绍可能会觉得较难 先浏览概念任何根据案例走一遍就明白了 3 遗传
  • 阿里巴巴Java开发手册(详尽PDF版).

    前言 不知不觉间 2022 年已经过了一半了 作为技术圈中你 准备好迎接最新的变化了吗 在本文中 我们将以编程界最常用的编程语言 Java 为例 分享最为主流的技术与工具 目录 一 编程规约 一 命名风格 二 常量定义 三 代码格式 四 0
  • MDK中undefined常见错误警告解决

    c文件中包含 h文件 添加 h文件和 c文件路径 同名 h文件是否存在重复 加入 ifndef后不易找出该错误 一般在库搬移中会出现该错误 可以通过在工程文件下搜索该 h c文件查看是否有同名存在 这点很重要 有时候编译不过卡了半天就在这个
  • 嵌入式系统的通讯协议:I2C通讯、SPI通讯、USB通讯、SDIO 通讯、I2S通讯、PCI通讯简介

    本文简单的描述了在实际应用中会碰到的一些总线协议 让各位读者对实际系统中的总线有个概念上的理解 一 I2C I2C Inter Integrated Circuit 总线是一种由PHILIPS公司开发的两线式串行总线 用于连接微控制器及其外
  • Chrome 69 域名不显示 www 的解决办法

    Chrome 69 域名不显示 www 的解决办法 复制以下内容到 Chrome 地址栏 选择 Disabled 即可 chrome flags omnibox ui hide steady state url scheme and sub
  • 【Shell牛客刷题系列】SHELL25 nginx日志分析3-统计访问3次以上的IP

    该系列是基于牛客Shell题库 针对具体题目进行查漏补缺 学习相应的命令 刷题链接 牛客题霸 Shell篇 该系列文章都放到专栏下 专栏链接为 专栏 Shell 欢迎关注专栏 本文知识预告 本文首先复习了grep awk sed cut等命
  • CSS3学习笔记(1)

    1 什么是CSS 样式表定义如何显示 HTML 元素 就像 HTML 中的字体标签和颜色属性所起的作用那样 样式通常保存在外部的 css 文件中 我们只需要编辑一个简单的 CSS 文档就可以改变所有页面的布局和外观 2 CSS规则 CSS声
  • 打印1000到2000之间的闰年,并统计闰年的次数。 (C语言)

    分析 判断是否为闰年条件为以下 1 能被4整除并且不能被100整除的是闰年 2 能被400整除的是闰年 代码 include
  • 重写(覆盖)和重载的区别

    牛客网题 下列对函数double add int a int b 进行重载 正确的是 int add int a int b int c int add double a double b double add double a doubl
  • 设置固定ip地址bat文件_iPad/iPhone通过smb与Windows互传文件

    更新 前段时间我的iPhone iPad莫名其妙连不上了 今天又仔细检查了一下 发现是因为电脑的IPv4地址自己变了 原本是192 168 0 104 现在变成了192 168 0 101 也就是smb 之后要输入的地址 查这个地址的方法是
  • stop带有临时表的slave步骤

    author skate time 2014 06 30 stop带有临时表的slave步骤 在stop slave之前一定要确定变量 Slave open temp tables 为0 如果在不为0时 停止了slave server或sl
  • 不要再在以太坊和Metamask开发web时使用密码

    我在ConsenSys为各种客户构建了大量的概念证明 通常他们想要利用以太坊区块链来解决某些业务用例 奇怪的是 这些系统通常设计有标准的网络登录 即用户名和密码 我总是问自己为什么我还在这样做设计 毕竟 这是今天以太网目前可以解决每个烦人的
  • QT学习——Qt工具介绍,Qt助手使用,第一个Qt程序,Qt字符串和字符编码

    一 Qt主要工具介绍 1 qt助手 assistant 2 qt构建器 qmake 3 qt设计师 designer 4 qt转换器 uic 5 qt资源编译器 rcc 6 qt元对象编译器 moc 处理语法扩展 7 qt创造器IDE qt
  • 线程安全:同步代码块

    一 线程安全 如果多个线程在同时运行 而这些线程可能会同时运行这段代码 程序每次运行结果和单线程的结果一样的 而且其他的变量的值和预期的是一样的 就是线程安全的 public class Ticker implements Runnable
  • 嵌入式编写TCP连接过程

    先来一个三次握手和四次挥手 嵌入式连接过程 1 af 为地址族 Address Family 也就是 IP 地址类型 常用的有 AF INET 和 AF INET6 AF 是 Address Family 的简写 INET是 Inetnet
  • Python爬虫常用库及解析库解析

    作者 禅与计算机程序设计艺术 1 简介 随着互联网的快速发展 越来越多的人开始使用网络购物 网络交易 微博阅读等方式进行日常生活 然而在这样的大环境下 如何从海量的数据中提取有价值的信息并有效整合到一起成为困难重重的事情 作为一名具有高度职
  • java jsp公共异常页面_JSP页面的异常处理

    对于jsp页面错误处理这里大致有两种方式 一 在Web xml中配置全局的错误异常处理 即凡是该项目下 即虚拟路径下的所有文件 的任意一个文件错误或者异常 都会跳到指定的错误处理页面 全局的错误处理可以处理两种类型的错误 一种是HTTP代码
  • gin框架10--XML/JSON/YAML/ProtoBuf 渲染

    gin框架10 XML JSON YAML ProtoBuf 渲染 介绍 案例 说明 介绍 本文主要介绍gin 中的 XML JSON YAML ProtoBuf 等常见渲染方法 以及其测试结果 案例 源码 package main imp
  • 构造任意多个HashCode相同的字符串

    在Java中字符串的HashCode的实现如下 JDK8 public int hashCode int h hash if h 0 value length gt 0 char val value for int i 0 i lt val
  • Spark提交参数说明和常见优化

    会用spark 会调api和能用好spark是两回事 在进行开发的过程中 不仅要了解运行原理 还要了解业务 将合适的方法和业务场景合适的结合在一起 才能发挥最大的价值 spark submit 进入spark的home目录 执行以下命令查看