Spark中的闭包引用和广播变量

news/2024/10/12 18:15:12

闭包引用

概念

所有编程语言都有闭包的概念,闭包就是在一个函数中引用了函数外的变量。

Spark中,普通的变量是在Driver程序中创建的,RDD的计算是在分布式集群中的task程序上进行的。因此,当分布式算子的函数引用了外部的变量时,Driver会把该变量序列化后通过网络发送给每一个task(只针对普通对象)。

spark中所谓"闭包引用",只是看起来类似各种编程语言中的闭包。而本质上就是对某个对象进行序列化+复制,即Driver把分布式算子中引用的外部变量序列化后,发送给每个task来使用。

在闭包函数内对外部变量进行修改,闭包外的变量的并不会改变。因为在闭包函数内的修改,只是在task上对复制过来的闭包对象副本的修改,并不会影响到driver端的原对象,他们是存在于两台机器上的独立的文件,互不影响。

好处

应用于大表join小表的场景,将小表数据(字典表、维度表)发送到大表所在节点的内存中,在map阶段完成join,无需通过两个rdd去join,省去了shffule操作。

适用条件

1、闭包引用的对象,必须实现序列化接口:extends Serializable

2、被引用的对象,数据量不能太大,否则会导致task端内存溢出。

单例对象的闭包引用

单例对象(object对象)只在每个executor进程中持有一份,由其中的多个task线程共享。不要在task中对单例对象进行修改操作,否则会产生线程安全问题。而普通对象在每个task线程中都持有一份,不存在线程安全问题。

广播变量

闭包引用的场景中,Spark为每个task都复制了一份它需要的数据,当数据量较大且task较多时,必然会给网络io和内存资源造成很大压力,而广播变量只给每个executor发送一份变量副本,由多个task共享。

和闭包引用的区别

1、闭包引用中,是由driver给每个executor直接发送数据。广播变量中,是通过bittorrent协议来发送数据的,可以减少通信成本。(所有executor遵循了人人为我,我为人人的原则)。

2、闭包引用中,每个task持有一份引用对象的副本,并可以修改(只在该task线程生效);广播变量中,一个executor只持有一份广播变量的副本,由多个task共享,该数据是只读的,不可修改。

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

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

相关文章

Godot.NET C#IOC重构(9-10):三连击,攻击框

目录前言AnimationPlayer和AnimatedSprite2D将导出属性添加到关键帧里面。状态机构建核心代码完整代码实现效果碰撞框和受攻击框全局类HitBox:攻击框HurtBox:受击框实现效果添加Player攻击总结 前言 这篇博客来深入讲解一下Godot中的AnimationPlayer AnimationPlayer和Animated…

[MDP.AspNetCore] 實作OAuth協定SSO Server/Client專案範例

團隊負責的系統變多的時候,使用SSO Server提供統一身分驗證,讓團隊只需要維護一份用戶資料及一個身分驗證服務。除了減少團隊維護成本之外,也讓使用者不用記憶多個站台的帳號密碼,提供更好的使用者體驗。 本篇文章,介紹使用MDP.AspNetCore的NuGet套件,所建立的實作OAuth協…

深入 Django 模型层:数据库设计与 ORM 实践指南

title: 深入 Django 模型层:数据库设计与 ORM 实践指南 date: 2024/5/3 18:25:33 updated: 2024/5/3 18:25:33 categories:后端开发tags:Django ORM 模型设计 数据库关系 性能优化 数据安全 查询操作 模型继承第一章:引言 Django是一个基于Python的开源Web应用程序框架,它遵…

中考常见同义词和同义短语总结

about(大约)= or soa couple of=several =a fewa (large) number of= manya little =a little bita lot of=lots of= many/mucha piece of advice =a suggestiona quarter to five =four forty-fivea teacher with experience =an experienced teachera two-hour walk= two hou…

exhentai服务器不稳定怎么解决

exhentai服务器不稳定问题可以归因于以下几个原因及解决方案:网站流量过大:避开高峰时段访问,使用加速器或代理服务器。服务器硬件故障:联系技术支持,尝试不同的连接或浏览器。网络连接问题:检查连接稳定性,确保带宽充足,优先使用有线连接。浏览器缓存或cookie问题:清…

虚拟机嵌套 VMWare

VMWare Workstation Pro 开启嵌套,关键是这里,如下图:

解决创建SpringBoot工程加载较慢的问题

设置Server URL 将 https://start.spring.io 改为 https://start.aliyun.com 如图所示:启动演示 如图所示 ,启动成功

photoshop使用小技巧

如何按照选区新建文档?选区情况下,按Ctrl+C,然后新建即可看见"新建剪贴板文档",这个就是尺寸一样的了。