spark广播变量 和 累加器

1 为什么使用广播变量 和 累加器

变量存在的问题:在spark程序中,当一个传递给Spark操作(例如map和reduce)的函数在远程节点上面运行时,Spark操作实际上操作的是这个函数所用变量的一个独立副本。这些变量会被复制到每台机器上,并且这些变量在远程机器上的所有更新都不会传递回驱动程序,通常跨任务的读写变量是低效的。

广播变量的目的就是解决变量存在的问题,变量声明为广播变量,那么知识每个executor拥有一份,这个executor启动的task会共享这个变量,节省了通信的成本和服务器的资源。

总的来说:累加器是用来对信息进行聚合,广播变量是用来分发较大的只读对象。

 

2 如何定义  和  还原  广播变量

int a = 3;
Broadcast<Integer> broadcast = sc.broadcast(a);  //定义广播变量
int c = broadcast.value; //还原广播变量

 

3 广播变量注意事项

(1)变量一旦被定义为一个广播变量,那么这个变量只能读,不能修改

(2)能不能将一个RDD使用广播变量广播出去?

       不能,因为RDD是不存储数据的。可以将RDD的结果广播出去。

(3) 广播变量只能在Driver端定义,不能在Executor端定义。

(4) 在Driver端可以修改广播变量的值,在Executor端无法修改广播变量的值。

(5)如果executor端用到了Driver的变量,如果不使用广播变量在Executor有多少task就有多少Driver端的变量副本。

(6)如果Executor端用到了Driver的变量,如果使用广播变量在每个Executor中只有一份Driver端的变量副本。

 

4 广播变量的优化

当广播一个比较大的值时,选择既快又好的序列化格式是很重要的。因为如果序列化对象的时间很长或者传送时间太久,这段时间很容易出现性能瓶颈。

默认情况下,spark会使用java内建的序列化库。建议选择kryo序列化工具,使用方法设置spark.serializer为org.apache.spark.serializer.KryoSerializer;

最好强制要求这种注册,设置spark.kryo.registrationRequired为true;

        SparkConf conf = new SparkConf();conf.set("spark.serializer","org.apache.spark.serializer.KryoSerializer");conf.set("spark.kryo.registrationRequired","true");conf.registerKryoClasses(Array(classOf[myClass]),classOf(MyOtherClass));

这样还会有其他的问题,如果代码中引用的类没有序列化,会报异常,最简单的方式是实现序列化接口。

 

5 累加器和定义和还原

累加器只是一个只写变量

        LongAccumulator accumulator = new LongAccumulator();accumulator.add(1);long count = accumulator.count();

 

 

参考文献:扎心了,老铁

转载于:https://www.cnblogs.com/parent-absent-son/p/9956574.html

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

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

相关文章

分布式常见面试题详解

文章目录1. 分布式1.1 什么是CAP原则&#xff1f;1.2 说一说你对高并发的理解1.3 如何实现分布式存储&#xff1f;1.4 说一说你对分布式事务的了解1.5 分布式系统如何保证最终一致性&#xff1f;1.6 谈谈你对分布式的单点问题的了解1.7 HTTP和RPC有什么区别&#xff1f;1.7 HTT…

C11标准委员会成员解读C语言新标准

导读&#xff1a;C语言国际标准新的新草案之前已经公布&#xff0c;新标准提高了对C的兼容性&#xff0c;并将新的特性增加到C语言中。此外支持多线程的功能也受到了开发者的关注&#xff0c;基于ISO/IEC TR 19769:2004规范下支持Unicode&#xff0c;提供更多用于查询浮点数类型…

如何将拷贝过来的数据 *.ibd 文件生效

1.将拷贝的数据文件 "qqq.idb"放在自己的数据库中. 一般存放在 mysql/ data/ databasename 下 2. "qqq.idb" 改个名字-->"qqq--.idb", 主要是避免冲突&#xff01; 3.执行 create table qqq(...) 语句&#xff0c;此时除了会生成一个 qqq…

windows 下启动zookeeper的zkServer.cmd服务闪退

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 解决方案把conf目录下的默认zoo_sample.cfg的文件名字改成zoo.cfg 即可&#xff1a; 以上转自&#xff1a;http://blog.csdn.net/qq4960…

设计模式常见面试真题详解

文章目录1. 设计模式1.1 说一说设计模式的六大原则1.2 说一下六大原则中的开闭原则1.3 手写一个单例模式1.4 手写一个线程安全的单例模式1.5 说一说你对工厂模式的理解1.6 简单工厂模式和抽象工厂模式有什么区别&#xff1f;1.7 如何实现工厂模式&#xff1f;1.8 说一说你策略模…

Android内存优化之内存泄漏

内存泄漏 内存泄漏一般有以下几种情况&#xff1a;单例、静态变量、Handler、匿名内部类、资源使用未关闭 单例导致的内存泄漏 单例的情况主要是因为单例的生命周期比较长&#xff0c;如果引用的一些资源&#xff08;比如Context、图片等&#xff09;没有做特殊处理&#xff0c…

cmd - 使用curl命令的注意点

前言 最近在cmd中使用curl命令来测试rest api&#xff0c;发现有不少问题&#xff0c;这里记录一下。 在cmd中使用curl命令的注意事项 json不能由单引号包括起来json数据里的双引号要用反斜杠\转义json数据里不能带有空格如果想要在json数据里使用空格则必须用双引号将整个json…

指针常见定义

再给出常用的C变量的定义方式&#xff1a;a) 一个整型数&#xff08;An integer&#xff09; b) 一个指向整型数的指针&#xff08;A pointer to an integer&#xff09; c) 一个指向指针的的指针&#xff0c;它指向的指针是指向一个整型数&#xff08;A pointer to a pointer …

场景应用题目常见面试真题详解

文章目录1. 场景应用1.1 微信红包相关问题1.2 秒杀系统相关问题1.3 扫码登录流程1.4 如何实现单点登录&#xff1f;1.5 如何设计一个本地缓存&#xff1f;1. 场景应用 1.1 微信红包相关问题 参考答案 概况&#xff1a;2014年微信红包使用数据库硬抗整个流量&#xff0c;2015…

后Kubernetes时代的微服务

\本文要点\\当前微服务架构依然是最流行的分布式系统架构风格。Kubernetes和云原生运动已大规模地重新定义了应用设计和开发中的一些方面。\\t在云原生平台上&#xff0c;服务仅具备可观测性是不够的。更基本的先决条件是使用检查健康、响应信号、声明资源消耗等手段实现微服务…

Dynamics CRM On-Premise V9安装手记

下载地址&#xff1a; https://download.microsoft.com/download/A/D/D/ADDD6898-4EFA-46FA-80B6-6FE9A3CDED63/CRM9.0-Server-CHS-amd64.exe 安装支持Windows 2016 及SQL Server 2016 SP2以上版本 我想安装了All in one的&#xff0c;就想着用最新的SQLServer 2017&#xff0c…

金山网络CEO傅盛:简约之美

摘要&#xff1a;金山网络CEO傅盛带来了主题为《简约之美》的精彩演讲。他表示由于时代的变迁&#xff0c;红海的竞争&#xff0c;项目的需求等原因&#xff0c;若想项目取得成功&#xff0c;唯有简单才是王道&#xff0c;唯有简单定位才能深入人心。那么&#xff0c;如何做到简…

zookeeper安装和使用 windows环境

简介 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 ZooKeeper是一个分布式的&#xff0c;开放源码的分布式应用程序协调服务&#xff0c;是Google的Chubby一个开源的实现&#xff0c;…

计算机网络常见面试真题详解

文章目录1. 计算机网络1.1 请介绍七层网络体系结构。1.2 请介绍五层网络体系结构。1.3 了解网络编程协议吗&#xff1f;客户端发送给服务器的请求&#xff0c;怎么确定具体的协议&#xff1f;1.4 TCP、HTTP、FTP分别属于哪一层&#xff1f;1.5 讲一下TCP/IP协议。1.6 说一说你对…

2018.09.14python学习第四天part2

流程控制之while循环 1.什么是循环&#xff1f;&#xff08;what&#xff09; 循环是指重复做某一件事 2.为何要有循环&#xff1f;&#xff08;why&#xff09; 为了让计算机能像人一样重复去做某一件事 3.如何使用循环&#xff1f;&#xff08;how&#xff09; #语法一&#…

git操作指令合集

1.下载完git&#xff0c;需要输入用户名和邮箱 git config --global user.name "Your Name" git config --global user.email "emailexample.com" 注意git config命令的--global参数&#xff0c;用了这个参数&#xff0c;表示这台电脑上所有的GIt仓库都会使…

C++回调函数(callback)的使用

什么是回调函数(callback) 模块A有一个函数foo&#xff0c;它向模块B传递foo的地址&#xff0c;然后在B里面发生某种事件&#xff08;event&#xff09;时&#xff0c;通过从A里面传递过来的foo的地址调用foo&#xff0c;通知A发生了什么事情&#xff0c;让A作出相应反应。 那么…

Hibernate JPA中@Transient、@JsonIgnoreProperties、@JsonIgnore、@JsonFormat、@JsonSerialize等注解解释

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1、Transient Transient表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性&#xff1b; 如果一个属性并非数据库表的字段…

可爱的rem

前端开发中&#xff0c;移动端的开发可以说是举足轻重了&#xff0c;可是又面临着不同设备尺寸和分辨率的尴尬点。今天[2018-09-16]台风山竹登陆广东&#xff0c;来势汹汹&#xff0c;外出是不可能的了&#xff0c;那就宅着写写这篇小文章吧...原文请戳这里-谈谈rem单位 超长的…

kafka直连方式消费多个topic

一个消费者组可以消费多个topic&#xff0c;以前写过一篇一个消费者消费一个topic的&#xff0c;这次的是一个消费者组通过直连方式消费多个topic,做了小测试&#xff0c;结果是正确的&#xff0c;通过查看zookeeper的客户端&#xff0c;zookeeper记录了偏移量 package day04 /…