SparkSQL調優

1、執行計劃(過往記憶https://www.iteblog.com/archives/2562.html)

df.explain(true)//顯示邏輯計劃和物理計劃,不加true只顯示物理計劃

2、邏輯計劃優化方法:

謂詞下推,列裁剪,常量替換,常量累加

?

3、優化方法

數據源方面:

1、hive 使用parquet格式,不要用textfile。列式存儲便于查詢引擎做謂詞下推、更優的壓縮算法(不同列可以采取不同的壓縮算法)減少IO,塊遍歷等優化方法。

2、Kafka根據key的hash值分區,OGG到Kafka 表名作為key,因此不同大小的表可以更改表名,均衡分到不同partition。

sparkSQL程序方面(spark優化):

1、多次用到的表,做cache。默認進行壓縮。

spark.sql.inMemoryColumnarStorage.compressed //默認為true,為每個列選擇壓縮方式
spark.sql.inMemoryColumnarStorage.batchSize //默認為10000 byte 控制列緩存的批量大小。批次大有助于改善內存使用和壓縮,但是緩存數據會有OOM的風險

2、小于10M的表會自動broadcast,走broadcast join,調高廣播表的大小,使其走broadcast join ,但是太大有可能driver端OOM,-1為禁止自動廣播。

當使用的外部變量較大時,也可把外部變量作為廣播變量進行廣播。

spark.sql.autoBroadcastJoinThreshold //默認10485760 (10 MB)
val listBrodcast = spark.sparkContext.broadcast(list)

3、sparkSQL shuffle read partition默認為200,提高可解決部分數據傾斜問題。

spark.sql.shuffle.partitions //默認200

4、讀不可分割的文件,一個文件一個partition,若小文件過多,影響效率,設置多個文件寫入一個分區

spark.sql.files.openCostInBytes //默認4194304 (4 MB),打開一個文件的時間可讀取4MB數據,因此小于4M的文件讀入一個分區(待驗證)

spark.sql.files.maxPartitionBytes //默認134217728 (128 MB),文件傳入一個分區里的最大字節數

?5、使用高效的算子

1、reduceByKey/aggregateByKey代替groupByKey//前者partition內部會進行預聚合,后者不進行預聚合直接全局shuffle
2、mapPartitions代替map,foreachpartitions 代替foreach//前者會一次性讀取整個partition的數據進行處理,比如建立數據庫連接在foreachpartitions中,不要在foreach
3、filter之后coallease

6、修改序列化器為kryo,并注冊序列化類

conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
conf.registerKryoClasses(Array(classOf[MyClass1],?classOf[MyClass2])

?7、join方式(https://www.cnblogs.com/suanec/p/7560399.html)

轉載于:https://www.cnblogs.com/csyusu/p/11048383.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/448692.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/448692.shtml
英文地址,請注明出處:http://en.pswp.cn/news/448692.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AMD發布APPML源碼,構建clMath庫

摘要:日前,AMD將加速并行處理數學庫(Accelerated Parallel Processing Math Library簡稱APPML)開源,內容包含了BLAS和FFT的OpenCL實現,項目托管在GitHub上,命名為clMath,該項目基于A…

最簡單的 post 請求發起方式、調用其它系統接口

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 調用其它系統接口,發起一個 post 請求,寫法如下: import cn.com.infinitus.yunxiao.jira.vo.EpicV…

CSS基礎學習 18.CSS多列

四種常見的瀏覽器內核: 轉載于:https://www.cnblogs.com/songsongblue/p/11050210.html

BGP

BGP:border gateway protocol 邊界網關路由協議 路由協議分類:內部網關路由協議IGP:rip ospf isis (eigrp)外部 網關路由協議EGP:EGP(早期淘汰) BGP BGP特點:1、針對大型…

OpenCL 2.0發布,帶來更強悍的異構計算能力

摘要:Khronos Group本周一發布了OpenCL 2.0,可為顯示芯片提供更好的獨立性,以便能為通用軟件計算出更大的力。該組織已經發布了2.0的臨時標準,預計正式版本的發布要等到6個月以后。 Khronos小組于本周一(7月22日&…

從一個OutOfMemoryError 學會了分析Java內存泄漏問題

從一個OutOfMemoryError 學會了分析Java內存泄漏問題 以前都是好好的,最近出現了 oom。 問題 開始是: java.lang.OutOfMemoryError: Java heap space 2019-06-14 11:02:41.678 ERROR 13789 --- [nio-8082-exec-3] c.e.p.s.c.c.core.ELDictionaryControll…

Ubuntu安裝php7.2

1、使用ppa增加源apt-get install python-software-propertiesapt-get install software-properties-commonadd-apt-repository ppa:ondrej/php2、更新apt-get update3、查看源中PHP7.2版本apt list | grep php 列表中已經包含你想要的PHP版本了4、安裝PHP7.2apt-get -y …

會出現 unreachable statement 的可能

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 java編譯器把unreachable statement標記為運行時錯誤,一個unreachable statement就是編譯器決定永遠不會執行它。 下面的幾…

Hadoop+GPU強強聯手的性能探索

摘要:Hadoop并行處理可以成倍地提高性能,GPU也日益成為計算任務的重要分擔者,Altoros Systems研發團隊一直致力于探索HadoopGPU的可能性,以及在實際的大規模系統中的實現,這篇文章就是他們的部分研究成果。 Hadoop并行…

Vue Google瀏覽器插件 Vue Devtools無法使用的解決辦法

1.插件安裝不必多說 一定要用Vue.js 開發版 Vue.min.js 在控制面板就不會顯示 2.本地調試 用的是file://協議 修改插件允許訪問文件網址 打上對勾 轉載于:https://www.cnblogs.com/116970u/p/11052987.html

JVM原理探究及調優方法論

1 此文目的 本文不準備從盤古開天地開始講述JVM的種種,相關的文章網上太多了,大多也無非轉來轉去,連圖都差不多。筆者只整理個提綱挈領的學習路線指南,并對自己學習過程中遇到的坑和容易混淆和忽視的地方作個總結。 2 JVM內存模型…

超方便、最簡單版本:java 郵件發送 (半分鐘寫完代碼)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. jar 和 郵箱設置 <!--郵件--><dependency><groupId>org.simplejavamail</groupId><artifactId>simpl…

OpenCL(CUDA5.0) + Visual Studio 2010 環境配置

1.安裝步驟 1&#xff09;安裝CUDA5.0本文默認的安裝目錄為&#xff1a;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA \v5.0 CUDA SDK的默認安裝目錄為&#xff1a;C:\ProgramData\NVIDIA Corporation\CUDA Samples\v5.0 其他路徑請自行修改路徑&#xff01;2&#xff…

Q-Dir

Q-dir&#xff0c;可以分界面&#xff0c;分文件夾&#xff0c;快捷選擇等優勢&#xff0c;非常好用的工具&#xff0c;可以替代微軟的File Explorer。 官網&#xff1a;https://www.softwareok.com/?seiteFreeware/Q-Dir轉載于:https://www.cnblogs.com/JTCLASSROOM/p/109719…

一行代碼 實現集合去重

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 代碼寫法&#xff1a;&#xff08;這是針對元素為基本數據類型的集合&#xff09; 針對引用類型元素去重&#xff0c;可根據元素內多…

《Mali OpenCL SDK v1.1.0》教程樣例之一“Hello World”

1、算法簡述 實現矩陣相加&#xff1a;Cn An Bn。這個例子雖然很簡單&#xff0c;但是由于矩陣元素之間相互獨立&#xff0c;每個元素可以非常容易地進行并行計算&#xff0c;可以非常理想地在OpenCL中實現。 2. C/C實現 [cpp] view plaincopyprint?/* * This confidential…

PHP商城數據庫安全事務處理方法

現在是一個電商時代&#xff0c;做電商的首先得有一個商城&#xff0c;所以商城的安全也是不容忽視的&#xff0c;一個數據安全的商城離不開數據庫的事務處理&#xff0c;商城在資金、商品、下單、結賬等重要步驟加上事務控制這是不一定不可少的&#xff0c;像市場上的一些開源…

職業規劃之ABZ,未雨綢繆35歲危機

35歲的中年人正面臨著上有老下有小&#xff0c;房貸車貸等生活壓力&#xff0c;然而在職場上又面臨被裁員或在招聘中年齡超限的尷尬局面。那么&#xff0c;我們如何應對此危機呢&#xff1f;ABZ理論為我們打開了一扇天窗。 ABZ理論由著名的創業者投資人&#xff0c;LinkedIn和P…

集合去重 (集合元素為引用類型)--- java 8 新特性 --- 根據元素單屬性、多屬性實現去重

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 代碼寫法&#xff1a; &#xff08;要求 JDK 1.8 或 1.8 以上&#xff09; package gentle.entity;import lombok.Data; /**** auth…

Django--Forms組件使用

Forms組件的使用 在html表單驗證中&#xff0c;需要通過各種信息的驗證&#xff0c;比如注冊界面的姓名、密碼、郵箱、電話等的驗證&#xff0c;是否符合定義好的規則&#xff0c;不可能每次都要取出對應的字段一一判斷&#xff0c;django內置了Forms組件&#xff0c;可以方便的…