Spark闭包

闭包的作用可以理解为:函数可以访问函数外部定义的变量,但是函数内部对该变量进行的修改,在函数外是不可见的,即对函数外源变量不会产生影响。

其实,在学习Spark时,一个比较难理解的点就是,在集群模式下,定义的变量和方法作用域的范围和生命周期。这在你操作RDD时,比如调用一些函数map、foreach时,访问其外部变量进行操作时,很容易产生疑惑。为什么我本地程序运行良好且结果正确,放到集群上却得不到想要的结果呢?

首先通过下边对RDD中的元素进行求和的示例,来看相同的代码本地模式和集群模式运行结果的区别:

Spark为了执行任务,会将RDD的操作分解为多个task,并且这些task是由executor执行的。在执行之前,Spark会计算task的闭包即定义的一些变量和方法,比如例子中的counter变量和foreach方法,并且闭包必须对executor而言是可见的,这些闭包会被序列化发送到每个executor。在集群模式下,driver和executor运行在不同的JVM进程中,发送给每个executor的闭包中的变量是driver端变量的副本。因此,当foreach函数内引用counter时,其实处理的只是driver端变量的副本,与driver端本身的counter无关。driver节点的内存中仍有一个计数器,但该变量对executor是不可见的!executor只能看到序列化闭包的副本。因此,上述例子输出的counter最终值仍然为零,因为counter上的所有操作都只是引用了序列化闭包内的值。在本地模式下,往往driver和executor运行在同一JVM进程中。那么这些闭包将会被共享,executor操作的counter和driver持有的counter是同一个,那么counter在处理后最终值为6。

但是在生产中,我们的任务都是在集群模式下运行,如何能满足这种业务场景呢?

这就必须引出一个后续要重点讲解的概念:Accumulator即累加器。Spark中的累加器专门用于提供一种机制,用于在集群中的各个worker节点之间执行时安全地更新变量。

一般来说,closures – constructs比如循环或本地定义的方法,就不应该被用来改变一些全局状态,Spark并没有定义或保证对从闭包外引用的对象进行更新的行为。如果你这样操作只会导致一些代码在本地模式下能够达到预期的效果,但是在分布式环境下却事与愿违。如果需要某些全局聚合,请改用累加器。对于其他的业务场景,我们适时考虑引入外部存储系统、广播变量等。

Original: https://www.cnblogs.com/itboys/p/13026758.html
Author: 大葱拌豆腐
Title: Spark闭包

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/8818/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Python实操模拟题

    实操题 1.Redis数据库操作 阅读下列说明及运行结果, 打开”考生文件夹\10002″文件夹中的素材,阅读代码,在空(1)至(10)处填写正确代码,操作…

    大数据 2023年2月20日
    016
  • 【Spark深入学习-11】Spark基本概念和运行模式

    1.大数据基础 1.1 大数据平台基本框架 从全局了解一下大数据技术的基本框架,在宏观上有个认识,不至于盲人摸象。董先生贴出来的这个图,可以说是非常通用且普遍的一张图, 不管你是哪…

    2022年8月17日
    0103
  • 一个接口优雅的实现 Spring Cloud OAuth2 自定义token返回格式

    针对Spring Security OAuth2.0 想要陈某补充一些知识,如下: 今天这篇文章就来回答其中一个问题: 如何自定义token的返回格式? 本篇文章对应视频,介绍更加…

    大数据 2023年2月20日
    010
  • SQLite数据库存储

    一、前言 Android系统是内置了数据库的! SQLite是一款轻量级的关系型数据库,它的运算速度非常快,占用资源很少,通常只需要几百KB的内存就足够了,因而特别适合在移动设备上…

    大数据 2023年2月22日
    013
  • 激活监控数据的运营价值—基于Zabbix监控体系的智能运维闭环建设

    根据国际数据公司(IDC)《IDC FutureScape: 全球人工智能市场2021 预测中国启示》报告预测,到2024年,智能化运维(AIOps)将成为IT运营的新常态,至少有…

    大数据 2022年9月16日
    0113
  • SQL Server Management Studio(SSMS)无法连接到服务器,及解决方案

    目录 一.问题 二.解决 1.若是Windows10系统,点击开始,找到SQL Server 2019 配置管理器,对于其它系统,大同小异,直接搜索即可。 2.点开SQL Serv…

    大数据 2023年2月15日
    044
  • dolphinscheduler3.0生产环境搭建+hadoop+kerberos

    遵循官网的流程,先把一般的东西建好,这里就不重复了。 [En] Follow the process of the official website to build the ge…

    大数据 2023年2月19日
    09
  • 第五章 Feign负载均衡详解

    目录 一、Feign简述 二、Feign来源与宗旨 三、Feign的使用案例 1. 创建 父工程及公共api 见 第三章 2. 创建 Eureka 服务 见 第三章 3. 创建 订…

    大数据 2023年3月2日
    010
  • redis常见命令

    1、redis-cli -p 6379开启redis命令;2、shutdown停止redis服务;3、一共16个库,可以通过select index来切换数据库,默认是0数据库;4…

    大数据 2023年2月8日
    012
  • MySQL排查慢查询SQL

    根据MySQL自带慢日志功能定位慢SQL 1、查询有关query的相关变量: show global variables like ‘%quer%’; 参数解释: log_quer…

    大数据 2023年2月15日
    011
  • openLooKeng视图详解

    前言 视图是从一个或多个表导出的虚拟的表,区分权限是其重要作用之一。举个例子,在班级里,班主任需要掌握全班同学各科成绩,获悉整体状态以便全面指导,而数学老师只需要知道同学们的数学成…

    大数据 2023年2月12日
    011
  • Zookeeper

    1.1 Zookeeper的简介 1. 是一个分布式管理框架,用java语言编写的 2. 主要为分布式应用程序(hdfs,hbase)提供协调服务管理 3. 提供了类似于Unix的…

    大数据 2023年3月3日
    09
  • Android学习之网上商城(上)

    前言 到了重新开班的时候,这门课就更难受了,因为两周还有三场考试,开课的时候还要复习,真的很耗费精力,也收获颇丰。接下来,让我们总结一下我们在本课程中所学到的知识。 [En] Wh…

    大数据 2023年2月6日
    0303
  • Python3.9数据库SQLite3学起(1)

    Python3.9数据库SQLite3学起(1) 一、数据库的安装与连接 * 1、SQLite3与PyCharm2022的连接匹配 2、完成第一个例子(上帝视角) 一、数据库的安装…

    大数据 2023年2月22日
    08
  • 【Redis】Redis实现排行榜及相同积分按时间排序

    在日常的开发中,经常会碰到需要对用户的分值等进行排序,比如在游戏里面需要对战斗力进行排行,在组队活动中需要对各个队伍的贡献值进行排行,在微信中需要对各个好友的步数进行排行,此时一般…

    大数据 2023年2月13日
    012
  • 实训任务5:ZooKeeper节点操作

    抵扣说明: 1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。 Original: https:…

    大数据 2023年3月3日
    010
最近整理资源【免费获取】:   👉 程序员最新必读书单  | 👏 互联网各方向面试题下载 | ✌️计算机核心资源汇总