【spark系列12】spark remote shuffle service(RSS)杂谈

2023-10-27

背景

对于spark remote shuffle service(以下简称RSS),在社区其实早就有探讨SPARK-25299,只不过一直没有达成一致,且目前的内置的shuffle service 也能满足大部分的场景,也就被搁置了,但是由于kubernetes的越来越火热,spark
社区也慢慢的集成了spark on k8s,当然k8s社区也集成了spark,具体区别见spark on k8s 与 spark on k8s operator的对比.
但是就目前的spark on k8s来说shuffle还是存在问题的:

  • shuffle的磁盘问题,挂本地磁盘还是网络磁盘,挂多大, 磁盘的隔离和权限等
  • shuffle的效率问题,磁盘的读写效率低下

对于进一步的原因可以参考为什么企业都会去优化Spark Shuffle Service

所以各个公司就提出了spark shuffle的解决方案,如趣头条和阿里的RSS ,facebook的cosco, LinkedIn的Magnet,以及Facebook的Riffle方案

其中Magnet和Riffle方案都是先将shuffle文件传到本地,然后再进行merge或者upload到远程的服务上
趣头条和阿里的RSS以及cosco实现的更好

spark shuffle的诟病

我们知道一旦进行了shuffle操作以后,很大概率会进行spill,也就是写磁盘的过程。

  1. 对于磁盘的读写是非常耗时间的,而读写磁盘的时间涉及到:
  • 寻道时间
  • 磁盘服务时间

而寻道时间跟文件的读取方式有关,磁盘服务时间跟磁盘的类型有关。
我们能做的就是让文件进行顺序读写,以及减少文件的数量,因为每读一个文件就得重新寻道
2. spark shuffle的过程中会涉及三次写磁盘

  • map端的排序以及spill
  • 合并分区到一个文件
  • reduce端的sort以及spill

而这三次磁盘的写操作无疑给shuffle的效率减少了不少。

RSS

所以一个好的RSS的方案必然从:

  1. 减少shuffle文件数量
  2. 减少读写磁盘的次数
    这两方面来优化。

其实,RSS的优点还是很多的:

  1. 存储和计算分离
    使计算节点和存储节点能够各司其职,而不是交汇在一起。现在的spark和yarn的架构其实还没有达到存储和计算分离的
  2. 动态资源分配
    使用了RSS以后,任务完成以后,可以直接释放所占用的资源,而不是一直占用,直到shuffle文件不需要,这样能大大提高集群的资源利用率
  3. 能够很好的集成资源调度组件,如kubernetes
    以后如果出现新的资源调度组件能够很方便的集成,代码级别几乎不需要修改
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【spark系列12】spark remote shuffle service(RSS)杂谈 的相关文章

随机推荐

  • 8种提升程序猿编程能力的方法+编程思维四个核心:分解、抽象、模式识别和算法

    8种提升程序猿编程能力的方法 对于程序员来说 提高自己的编程能力 算是给自己定的职业发展目标之一 不过定一个成为编程大神的目标很容易 具体做起来可能就不是一件简单的事了 首先 既然决定 我要变得更好 得先知道 更好 是什么样子的 另外 不能
  • C++ 单链表节点交换

    这里提供两种方法 一种是只交换对应的数据 另一种是通过更改指针来交换节点 而更改指针中又可以分为新建节点与不新建节点的方法 1 不更改指针 这个没啥好说的 直接将对应的data交换即可 这里的a c节点都为被交换节点的上一个节点 因为不更改
  • el-form之表单校验自动定位到报错位置

    1 背景 表单校验大多数的表单都会用到 一般情况下只是提示当前哪些项校验不通过 但是如果表单比较需要用户自己去找是哪项校验不通过 这样的用户体验不太好 如果能自动定位到当前校验不通过的表单项体验会更好一些 这里是以elementui 的 e
  • 主线剧情-番外02-设备树详解

    设备树详解 本文 续接 主线剧情03 NXP i MX 系列 u boot 移植基础详解 一文中移植过程小节中有关设备树的内容 编辑整理 By Staok 如有错误恭谢指出 侵删 CC BY NC SA 4 0 注意 本文适合学习设备树的一
  • Spring参数校验和全局异常处理

    目录 一 前言 二 Validation 1 JSR 303 2 Spring Validation 3 Validated和 Valid的区别 三 全局异常处理 1 为何要处理异常 2 RestControllerAdvice 3 返回自
  • Vue项目启动报错:error:cannot find module xxx

    原因 无法找到项目依赖的某个模块 解决办法 1 删掉存放模块的文件夹node module 2 执行清除缓存命令 npm cache clean 如果报错 使用强制清除npm cache clean force 如果还报错 删除packag
  • Unity滑入Button/按键/UI范围检测

    效果展示 鼠标滑入按键的点击范围后 对应的游戏背景会发生改变 将下面的脚本挂在需要检测的UI上即可 记得引用必要的操作 using System Collections using System Collections Generic us
  • 接口测试初认知

    接口测试初认知 一 概念 根据分层自动化测试中的定义 最底层由开发人员编写的单元测试保证代码质量 最上层由功能测试人员手工 UI自动化进行大量的自动化功能测试保证功能的可用 则中间层的接口测试是什么作用呢 接下里我们就学习接口测试 那说到接
  • matplotlib如何降低x轴密度-时间显示问题

    python中轴数据的 稀释 在python中很多时候都会遇到x轴数据过多而显示出问题的问题 因此这篇文章针对于时间显示问题来做出解答 可以到到原始数据是 可以先简单绘制数据图 代码如下 绘制结果图如下 结果无法显示出日期 因此需要导入ti
  • C++压缩解压开源库ZIP

    1 ZIP下载 ZIP 主要是用于简单的压缩和解压 引入比较方便 而且极其易使用 方便用户操作 下载地址 http www codeproject com Articles 7530 Zip Utils clean elegant simp
  • 软连接文件的创建删除

    demo 通过系统命令 实现一个对视频文件可以操作的软连接路径 在Nginx中的HTML页面可直接访问视频文件 目录的创建 文件的链接 文件的删除 include
  • DA14585-我手上的开发板(串口2)

    名字 DA14585 Development Kit Pro DA14585 Development Kit Pro Dialog视频 DA14585 Development Kit Pro Dialog 文件结构参考 DA14585 SD
  • 百度OCR文字识别及使用案例

    百度OCR文字识别使用案例 案例环境 Windows10 Jdk1 8 IDEA2019 3 5旗舰版 一 账号注册及创建应用 1 访问地址 https ai baidu com tech ocr general track cp aipi
  • —————数组循环之终极宝典

    一 数组循环的方法 for forEach map for of filter every find 1 for循环 最基础的循环方式 速度较快 效率较高 而且可以控制数组的任意一项元素 const arr 1 2 3 4 5 for le
  • Java并发编程:线程池的使用

    https www cnblogs com dolphin0520 p 3932921 html Java并发编程 线程池的使用 在前面的文章中 我们使用线程的时候就去创建一个线程 这样实现起来非常简便 但是就会有一个问题 如果并发的线程数
  • 堆排序(Heap Sort)实现

    定义 堆排序 英语 Heapsort 是指利用堆 heap 这种数据结构所设计的一种排序算法 堆是一个近似完全二叉树的结构 并同时满足堆积的性质 即子节点的键值或索引总是小于 或者大于 它的父节点 堆可看作是一个 完全二叉树 的结构 记一个
  • sqli-labs(27a)

    0X01测试闭合 id 1 报错 id 1 正常 0X02构造语句爆数据库名称 id 99 0AUNIon 0ASELECt 0A1 database 3 1 1 和27关一样 只是 变成了 其他语法就是打组合拳 0X03组合拳 27关见
  • python 设置x轴_python matplotlib坐标轴设置的方法

    在使用matplotlib模块时画坐标图时 往往需要对坐标轴设置很多参数 这些参数包括横纵坐标轴范围 坐标轴刻度大小 坐标轴名称等 在matplotlib中包含了很多函数 用来对这些参数进行设置 我们可以对坐标轴进行设置 设置坐标轴的范围
  • activiti学习之并行网关

    写在前面 并行网关用于处理流程并发的场景 可以将流程分发到多个执行流程 也可以让多个执行流程合并为一个执行流 但不是必须一起使用 也就是说并行网关有两种行为 分叉和合并 下面我们来一起看下 场景 学生请假同时由班长和班主任审批 等到班长和班
  • 【spark系列12】spark remote shuffle service(RSS)杂谈

    背景 对于spark remote shuffle service 以下简称RSS 在社区其实早就有探讨SPARK 25299 只不过一直没有达成一致 且目前的内置的shuffle service 也能满足大部分的场景 也就被搁置了 但是由