spark外置external shuffle service使用介绍

news2024/11/19 1:51:55

shuffle是什么

shuffle是Hadoop大数据计算中,一个必不可少的环节,通过shuffle可以将不同节点上的同类数据给移动到一起,这在分组,排序,聚合的场景中非常常见,简单图示如下:

MapReduce数据处理模型假设数据以分布式方式存储在多台机器上,并以一些记录的形式组织起来。数据处理分 3 个阶段进行:

shuffle的三个阶段

Map阶段

使用用户自定义的映射函数,来对数据进行处理,这个阶段的主要目标是预处理和过滤数据,map函数会逐条处理数据集中的每一条数据,然后输出一组(K,V)集合,这里可以有三种情况:

  1. 不产生任何数据,也就是说数据被全部过滤掉或者数据源为空
  2. 生成一个 (K,V)对,如果count,max,min,avg,sum等聚合函数
  3. 生成多个 (K,V)对,如查询,去重,处理转换后的数据

Shuffle阶段

这个阶段所有的(K,V)对,也就是 map 阶段产生的所有键值对都按键排序并分布在集群中的机器上

Reduce阶段

对每个节点上的数据按照 K % (reduce number) 进行横跨节点的分发, reduce 函数计算每组具有相同键的键值对的最终结果。这样 K 相同的数据都会被 shuffle 到同一个节点,形成节点内局部有序的状态。如果想要全局有序,还需要在加一个 reduce 阶段,从而完成最终的排序

Spark中的shuffle

默认情况下,MR任务shuffle都是由当前任务内部完成的,也就是启动了一个spark job,这个job在内部就可完成整个shuffle流程,也就是实时对接的模式,类似快递小哥送快递给你,到你家楼下打电话给你,不见你面他就一直等着你,直到你来了之后,他把快递亲自交到你的手中,他才可以去干下一件快递的排送,这种模式就是默认shuffle的工作原理。

但缺点比较明显,就是资源利用率低,因为等你的途中,快递小哥什么都不能干,所以才有了快递代收点这种产物,在spark里面,可以专门部署一个内置或外置的独立的shuffle服务来处理shuffle数据,这样可以有几个优点:

1,提高资源利用率,

2,增加动态资源调度的弹性,避免开启了动态资源调度时,因为shuffle数据的占用,导致executor无法回收的问题,或者因为executor被回收了,造成shuffle数据被销毁,从而触发该子任务的重算流程

3,减少executor内部之间网络带宽和本地带宽的占用

外部独立的shuffle服务的存储可以不占用YARN内部的本地磁盘,使用独立的SSD磁盘或者SSD的云存储再配上100G的网络带宽来加速shuffle处理性能。

shuffle数据的存储

此外提交spark任务默认shuffle的存储目录为/tmp目录,如果worker节点上这个默认的存储目录的大小比较小,可以在

spark-defaults.conf中配置默认目录:

spark.local.dir /path/local/dir1,/path/local/dir1

或者在应用提交时增加参数:

spark-submit --conf "spark.local.dir=/path/to/local/dir" ...

shuffle数据的回收

shuffle 数据的回收与应用的生命周期有关,当应用结束时一般会自动清理,当前某些情况下shuffle数据可能并不会被清理掉,这个时候我们需要编写脚本或程序来周期性的清理,spark中shuffle的清理的配置参数如下:

参数

默认值

解释

版本支持

spark.cleaner.periodicGC.interval

30min

控制触发垃圾收集的频率。

仅当弱引用被垃圾收集时,此上下文清理器才会触发清理。在具有大型驱动程序 JVM 的长时间运行的应用程序中,驱动程序几乎没有内存压力,这种情况可能偶尔会发生或根本不会发生。根本不清理可能会导致执行器在一段时间后耗尽磁盘空间

1.6.0

spark.cleaner.referenceTracking

true

启用或禁用上下文清理

1.0.0

spark.cleaner.referenceTracking.blocking

true

控制清理线程是否应阻塞清理任务(shuffle 除外,这是由 Spark.cleaner.referenceTracking.blocking.shuffle Spark 属性控制的)

1.0.0

spark.cleaner.referenceTracking.blocking.shuffle

false

控制清理线程是否应阻塞随机清理任务

1.1.1

spark.cleaner.referenceTracking.cleanCheckpoints

false

控制在引用超出范围时是否清理检查点文件

动态资源调度

通过动态资源调度,可以提升集群资源利用率,但动态资源调度的executor在被回收后,会造成shuffle数据的丢失,当我们启动了外置独立的shuffle服务就可以解决问题。

配置动态资源调度的两种方式:

第一种:使用默认的shuffle service,但需要注意executor的回收策略

spark.dynamicAllocation.enabled=true
spark.dynamicAllocation.shuffleTracking.enabled=true

第二种:使用外置的shuffle service

spark.dynamicAllocation.enabled=true
spark.shuffle.service.enabled=true

注意:以上的 shuffleTracking 或外部 shuffle 服务的目的是允许删除 executor 而不删除它们生成的 shuffle 文件

启用 shuffleTracking 很简单,但设置外部 shuffle 服务的方法,不同的资源调度器配置都不一样,如standalone,YARN,Mesos等

  1. standalone模式:设置 spark.shuffle.service.enabled = true 即可
  2. Mesos coarse-grained 模式:
    • 启动 $SPARK_HOME/sbin/start-mesos-shuffle-service.sh
    • 设置 spark.shuffle.service.enabled = true

3. yarn 模式:

    • 确保spark-<version>-yarn-shuffle.jar在nodemanager节点的classpath中,可以将这个jar放在hadoop的common目录下
    • 确保这个jar在集群所有 nodemanager 节点的 claapath路径中
    • 在yarn-site.xml中,追加 spark_shuffle选项到 yarn.nodemanager.aux-services配置项的value中,然后将yarn.nodemanager.aux-services.spark_shuffle.class 设置为org.apache.spark.network.yarn.YarnShuffleService
    • 增加 nodemanager 的内存,默认1GB不够用
    • 重启所有的nodemanager节点

动态资源调度的配置项参考:

Configuration - Spark 3.0.1 Documentation

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/691870.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue.js中的状态管理:理解和使用Vuex

目录 前言 Vue.js 样式绑定 Vue.js class class 属性绑定 实例 1 实例 2 实例 3 实例 4 数组语法 实例 5 实例 6 Vue.js style(内联样式) 实例 7 实例 8 实例 9 Vue.js 组件 全局组件 全局组件实例 局部组件 局部组件实例 Prop Prop 实例 动态 Prop Pro…

echarts+echarts-gl vue2制作3D地图+下钻功能+标记点功能,解决dblclick事件失效问题,解决地图下钻后边框不更新保留问题

目录 先看实现效果&#xff1a;​编辑 步骤一 安装echarts和echarts-gl 步骤二 设置地图容器 在methods中设置初始化地图方法并在mounted中调用 在methods中设置初始化地图方法 在mounted中调用 打开页面效果&#xff1a;​编辑 步骤三 1、给地图添加双击事件dblcli…

Linux安装后门监测工具chkrootkit

官网&#xff1a;chkrootkit -- locally checks for signs of a rootkit locally checks for signs of a rootkit Chkrootkit is named Top 10 Tools to Scan Linux Servers for Vulnerability and Malware by Cyber Security News. Debian安装 sudo apt install chkrootkit#…

BigDecimal有哪些坑?

BigDecimal概述 BigDecimal是Java编程语言中的一个类&#xff0c;用于进行高精度的十进制数值计算。它提供了精确的数值表示和计算&#xff0c;可以处理比基本数据类型&#xff08;如double和float&#xff09;更大范围和更高精度的数字。 Java的基本数据类型&#xff08;如i…

在线考试教学系统平台系统源码/视频教学系统PHP源码/在线考试系统PHP源码

在线考试教学系统平台系统源码&#xff0c;视频教学系统PHP源码&#xff0c;在线考试系统PHP源码。 安装说明&#xff1a; 1、部署好网站环境&#xff1a;php5.6mysql 2、将源码传至网站根目录&#xff0c;php源码用二进制上传&#xff0c;或者上传压缩包在空间解压 3、将据库…

独热编码和Embedding

对于一个大小为N词典&#xff0c;给出一个N*N的矩阵。将这些词分别进行编码。再者&#xff0c;例如&#xff0c;香蕉与水果这两个词词意接近&#xff0c;我们引进余弦相似度来计算两者相似度。余弦值越接近1&#xff0c;就表明夹角越接近0度&#xff0c;也就是两个向量越相似。…

团体程序设计天梯赛-练习集L2篇⑧

&#x1f680;欢迎来到本文&#x1f680; &#x1f349;个人简介&#xff1a;Hello大家好呀&#xff0c;我是陈童学&#xff0c;一个与你一样正在慢慢前行的普通人。 &#x1f3c0;个人主页&#xff1a;陈童学哦CSDN &#x1f4a1;所属专栏&#xff1a;PTA &#x1f381;希望各…

css基础(三)

目录 一、CSS三大特性 1.层叠性 2.继承性 3.行高的继承 4.CSS三大特性之优先级 5.优先级注意的问题 6.CSS权重的叠加 二、盒子模型 1.盒子模型组成部分 2.盒子模型边框border 3.边框的复合写法 4.表格细线边框 5.边框会影响盒子实际大小 6.盒子模型内边距padding 7.盒子模型外边…

文心一言 VS 讯飞星火 VS chatgpt (49)-- 算法导论6.2 1题

一、参照图6-2的方法&#xff0c;说明 MAX-HEAPIFY(A&#xff0c;3)在数组 A(27&#xff0c;17&#xff0c;3&#xff0c;16&#xff0c;13&#xff0c;10&#xff0c;1&#xff0c;5&#xff0c;7&#xff0c;12&#xff0c;4&#xff0c;8&#xff0c;9&#xff0c;0)上的操作…

怪物设计记录

一、怪物的对抗性 《怪物猎人世界》 1.生态系的重视&#xff0c;高低差&#xff0c;怪物密度 3.怪物的活动范围 4.瘴气之谷 设定&#xff1a;鲸落等等 5.设定上的爬升 6.怪物设计原则&#xff1a; 和同一只怪物多次战斗&#xff0c;仍然能感觉到乐趣 让玩家尝试不同种类的…

责任链模式(Chain of Responsibility)

别名 命令链&#xff08;Chain of Command&#xff09;。 定义 责任链是一种行为设计模式&#xff0c;允许你将请求沿着处理者链进行发送。收到请求后&#xff0c;每个处理者均可对请求进行处理&#xff0c;或将其传递给链上的下个处理者。 前言 1. 问题 假如你正在开发一…

监听器-Listener

Servlet规范中的监听器-Listener 观察者设计模式, 所有的监听器都是观察者设计模式的体现。 什么是观察者设计模式呢&#xff1f; 它是事件驱动的一种体现形式。就好比在做什么事情的时候被人盯着。当对应做到某件事时&#xff0c;触发事件。 观察者模式通常由以下三部分组成…

【话题达人】你觉得存款难吗?如何看待半数年轻人存款不住10万?这不是基操

导读 近日&#xff0c;有调查称 大概五分之一的年轻人存款在一万元以内。10万元存款是一个“坎”&#xff0c;存款超过10万就会超过53.7%的人。年轻人(23-28) 和 存款 两个词碰撞在一起&#xff0c;引来了广泛的关注和讨论。你认为年轻人存款难吗&#xff1f; 先说结论&#…

程序员之马上结束任务

计算机系的男同学追班里一女同学&#xff0c;结果此女总是躲躲闪闪。 男的看没戏&#xff0c;就另找了一个去追&#xff0c;结果这女的不满意了&#xff0c;质问这男的为啥抛弃她。 男的问&#xff1a;“请教一个电脑问题&#xff0c;如果你点击一个程序&#xff0c;总是提示…

浓浓书香伴新春,TVP邀你共读7本精选好书!

引言 颜之推在《颜氏家训勉学》中曾云“夫所以读书学问&#xff0c;本欲开心明目&#xff0c;利于行耳。”所谓读书学问&#xff0c;就是要开阔自己的胸襟&#xff0c;提高自己的鉴别力&#xff0c;从而有利于亲身实践。岁末年初&#xff0c;庭前飘雪&#xff0c;TVP 带你赴一场…

刚去了家新公司,发现个个都是卷王 , 真想离职了。。。

个个都说想躺平了&#xff0c;可是有一说一&#xff0c;该卷的还是卷。这不&#xff0c;前段时间我们公司来了个00后&#xff0c;才工作一年&#xff0c;跳槽到我们公司起薪15K&#xff0c;都快接近我了。后来才知道人家是个卷王&#xff0c;从早干到晚就差搬张床到工位睡觉了。…

Python元组、集合、字典

总有一天你要一个人在暗夜中&#xff0c;向那座桥走过去 文章目录 一、元组 字符串、元组、列表的总结 二、集合 1.定义空集合 2.创建集合 &#xff08;1&#xff09;直接创建 &#xff08;2&#xff09;set函数 3.列表、元组、字符串、字典的去重 4.向集合中添加元素…

VUE-001-在表格单元格(el-table-column)中添加超链接访问

在进行前端网页开发时&#xff0c;通常列表数据我们使用table展示。那么如何在 el-table-column 单元格中使用超链接呢&#xff1f; 如下即是解决方式的一种&#xff1a; 仅需要将如下代码&#xff1a; <el-table-column prop"url" label"访问链接" …

软件测试入门(测试环境及用例编写)

目录 一、什么是软件环境 二、软件运行环境类型 三、什么是测试用例&#xff08;测试case&#xff09; 四、测试用例包含哪些信息 五、测试用例设计方法 六、如何设计一个功能点的case 一、什么是软件环境 人有人类的生存环境&#xff1b;软件有软件的运行环境 二、软件…

数通王国历险记之TCP协议的三次握手和四次挥手

系列文章目录 数通王国历险记&#xff08;2&#xff09; 目录 前言 一、TCP我们称之为可靠的传输层协议&#xff0c;为什么称它为可靠呢? 二、TCP的建立——三次握手 1&#xff0c;提前知道TCP协议报文中都有些啥&#xff1f; 2.第一次握手 总的来说:就是PC1向PC2发出一个…