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.pswp.cn/news/450702.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/450702.shtml
英文地址,請注明出處:http://en.pswp.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 /…