亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

那些年我們在spark SQL上踩過的坑

2024-07-21 02:53:19
字體:
來源:轉載
供稿:網友

做了一年延云YDB的開發,這一年在使用spark上真心踩了不少坑,總結一下,希望對大家有所幫助。

spark 內存泄露

1.高并發情況下的內存泄露的具體表現

很遺憾,spark的設計架構并不是為了高并發請求而設計的,我們嘗試在網絡條件不好的集群下,進行100并發的查詢,在壓測3天后發現了內存泄露。

a)在進行大量小SQL的壓測過程中發現,有大量的activejob在spark ui上一直處于pending狀態,且永遠不結束,如下圖所示

b)并且發現driver內存爆滿

c)用內存分析分析工具分析了下

2.高并發下AsynchronousListenerBus引起的WEB UI的內存泄露

短時間內 SPARK 提交大量的SQL ,而且SQL里面存在大量的 union與join的情形,會創建大量的event對象,使得這里的 event數量超過10000個event ,一旦超過10000個event就開始丟棄 event,而這個event是用來回收 資源的,丟棄了 資源就無法回收了。 針對UI頁面的這個問題,我們將這個隊列長度的限制給取消了。

 

3.AsynchronousListenerBus本身引起的內存泄露

抓包發現

 

這些event是通過post方法傳遞的,并寫入到隊列里

 

但是也是由一個單線程進行postToAll的

 

但是在高并發情況下,單線程的postToAll的速度沒有post的速度快,會導致隊列堆積的event越來越多,如果是持續性的高并發的SQL查詢,這里就會導致內存泄露

 

接下來我們在分析下postToAll的方法里面,那個路徑是最慢的,導致事件處理最慢的邏輯是那個?

 

可能您都不敢相信,通過jstack抓取分析,程序大部分時間都阻塞在記錄日志上

 

可以通過禁用這個地方的log來提升event的速度

 

log4j.logger.org.apache.spark.scheduler=ERROR

 

 

 

4.高并發下的Cleaner的內存泄露

       說道這里,Cleaner的設計應該算是spark最糟糕的設計。spark的ContextCleaner是用于回收與清理已經完成了的 廣播boradcast,shuffle數據的。但是高并發下,我們發現這個地方積累的數據會越來越多,最終導致driver內存跑滿而掛掉。

l我們先看下,是如何觸發內存回收的

      沒錯,就是通過System.gc() 回收的內存,如果我們在jvm里配置了禁止執行System.gc,這個邏輯就等于廢掉(而且有很多jvm的優化參數一般都推薦配置禁止system.gc 參數)

lclean過程

這是一個單線程的邏輯,而且每次清理都要協同很多機器一同清理,清理速度相對來說比較慢,但是SQL并發很大的時候,產生速度超過了清理速度,整個driver就會發生內存泄露。而且brocadcast如果占用內存太多,也會使用非常多的本地磁盤小文件,我們在測試中發現,高持續性并發的情況下本地磁盤用于存儲blockmanager的目錄占據了我們60%的存儲空間。

 

我們再來分析下 clean里面,那個邏輯最慢

真正的瓶頸在于blockManagerMaster里面的removeBroadcast,因為這部分邏輯是需要跨越多臺機器的。

 

針對這種問題,

l我們在SQL層加了一個SQLWAITING邏輯,判斷了堆積長度,如果堆積長度超過了我們的設定值,我們這里將阻塞新的SQL的執行。堆積長度可以通過更改conf目錄下的ya100_env_default.sh中的ydb.sql.waiting.queue.size的值來設置。

l建議集群的帶寬要大一些,萬兆網絡肯定會比千兆網絡的清理速度快很多。

l給集群休息的機會,不要一直持續性的高并發,讓集群有間斷的機會。

l增大spark的線程池,可以調節conf下的spark-defaults.conf的如下值來改善。

 

 

5.線程池與threadlocal引起的內存泄露

       發現spark,hive,lucene都非常鐘愛使用threadlocal來管理臨時的session對象,期待SQL執行完畢后這些對象能夠自動釋放,但是與此同時spark又使用了線程池,線程池里的線程一直不結束,這些資源一直就不釋放,時間久了內存就堆積起來了。

針對這個問題,延云修改了spark關鍵線程池的實現,更改為每1個小時,強制更換線程池為新的線程池,舊的線程數能夠自動釋放。

 

6.文件泄露

      您會發現,隨著請求的session變多,spark會在hdfs和本地磁盤創建海量的磁盤目錄,最終會因為本地磁盤與hdfs上的目錄過多,而導致文件系統和整個文件系統癱瘓。在YDB里面我們針對這種情況也做了處理。

 

7.deleteONExit內存泄露

 

為什么會有這些對象在里面,我們看下源碼

 

8.JDO內存泄露

多達10萬多個JDOPersistenceManager

 

 

 

9.listerner內存泄露

通過debug工具監控發現,spark的listerner隨著時間的積累,通知(post)速度運來越慢

發現所有代碼都卡在了onpostevent上

 

jstack的結果如下

 

研究下了調用邏輯如下,發現是循環調用listerners,而且listerner都是空執行才會產生上面的jstack截圖

 

通過內存發現有30多萬個linterner在里面

 

發現都是大多數都是同一個listener,我們核對下該處源碼

 

最終定位問題

確系是這個地方的BUG ,每次創建JDBC連接的時候 ,spark就會增加一個listener, 時間久了,listener就會積累越來越多  針對這個問題 我簡單的修改了一行代碼,開始進入下一輪的壓測

 

 

 

二十二、spark源碼調優

      測試發現,即使只有1條記錄,使用 spark進行一次SQL查詢也會耗時1秒,對很多即席查詢來說1秒的等待,對用戶體驗非常不友好。針對這個問題,我們在spark與hive的細節代碼上進行了局部調優,調優后,響應時間由原先的1秒縮減到現在的200~300毫秒。

      

以下是我們改動過的地方

1.SessionState 的創建目錄 占用較多的時間

 

另外使用Hadoop namenode HA的同學會注意到,如果第一個namenode是standby狀態,這個地方會更慢,就不止一秒,所以除了改動源碼外,如果使用namenode ha的同學一定要注意,將active狀態的node一定要放在前面。

2.HiveConf的初始化過程占用太多時間

頻繁的hiveConf初始化,需要讀取core-default.xml,hdfs-default.xml,yarn-default.xml

,maPReduce-default.xml,hive-default.xml等多個xml文件,而這些xml文件都是內嵌在jar包內的。

第一,解壓這些jar包需要耗費較多的時間,第二每次都對這些xml文件解析也耗費時間。

 

 

 

3.廣播broadcast傳遞的hadoop configuration序列化很耗時

lconfiguration的序列化,采用了壓縮的方式進行序列化,有全局鎖的問題

lconfiguration每次序列化,傳遞了太多了沒用的配置項了,1000多個配置項,占用60多Kb。我們剔除了不是必須傳輸的配置項后,縮減到44個配置項,2kb的大小。

 

 

 

4.對spark廣播數據broadcast的Cleaner的改進

 

由于SPARK-3015 的BUG,spark的cleaner 目前為單線程回收模式。

大家留意spark源碼注釋

 

其中的單線程瓶頸點在于廣播數據的cleaner,由于要跨越很多臺機器,需要通過akka進行網絡交互。如果回收并發特別大,SPARK-3015 的bug報告會出現網絡擁堵,導致大量的 timeout出現。

為什么回收量特變大呢? 其實是因為cleaner 本質是通過system.gc(),定期執行的,默認積累30分鐘或者進行了gc后才觸發cleaner,這樣就會導致瞬間,大量的akka并發執行,集中釋放,網絡不瞬間癱瘓才不怪呢。但是單線程回收意味著回收速度恒定,如果查詢并發很大,回收速度跟不上cleaner的速度,會導致cleaner積累很多,會導致進程OOM(YDB做了修改,會限制前臺查詢的并發)。不論是OOM還是限制并發都不是我們希望看到的,所以針對高并發情況下,這種單線程的回收速度是滿足不了高并發的需求的。對于官方的這樣的做法,我們表示并不是一個完美的cleaner方案。并發回收一定要支持,只要解決akka的timeout問題即可。所以這個問題要仔細分析一下,akka為什么會timeout,是因為cleaner占據了太多的資源,那么我們是否可以控制下cleaner的并發呢?比如說使用4個并發,而不是默認將全部的并發線程都給占滿呢?這樣及解決了cleaner的回收速度,也解決了akka的問題不是更好么?針對這個問題,我們最終還是選擇了修改spark的ContextCleaner對象,將廣播數據的回收 改成多線程的方式,但現在了線程的并發數量,從而解決了該問題。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美激情奇米色| 国产精品69久久久久| 91在线高清视频| 欧美日韩精品在线观看| 欧美精品日韩www.p站| 亚洲欧美精品在线| 日韩成人在线免费观看| 久久91亚洲人成电影网站| 97视频在线观看免费| 8x海外华人永久免费日韩内陆视频| 久久久久久这里只有精品| 日韩成人av网| 丝袜亚洲欧美日韩综合| 九九九热精品免费视频观看网站| 91丝袜美腿美女视频网站| 欧美另类高清videos| 国产亚洲精品久久久久久牛牛| 国产丝袜一区二区三区免费视频| 色综合久久久久久中文网| 青青精品视频播放| 亚洲精品在线看| 成人免费黄色网| 成人美女免费网站视频| 欧美亚洲日本黄色| 久久韩国免费视频| 狠狠躁夜夜躁人人爽天天天天97| 亚洲免费成人av电影| 伊人伊成久久人综合网站| 亚洲欧洲一区二区三区久久| 九九久久精品一区| 91精品视频在线免费观看| 久久精品美女视频网站| 欧美激情videoshd| 欧美日韩亚洲一区二区| 国产欧美日韩专区发布| 国产91九色视频| 成人免费网站在线看| 欧美第一黄色网| 91av福利视频| 91日韩在线播放| 国模叶桐国产精品一区| 欧美一级片在线播放| 国产视频精品一区二区三区| 亚洲国产精品字幕| 国产一区私人高清影院| 国产精品自产拍在线观看| 91av网站在线播放| www.亚洲免费视频| 国产精品爽爽爽爽爽爽在线观看| 久热爱精品视频线路一| 久久精品国产亚洲一区二区| 色yeye香蕉凹凸一区二区av| 色一区av在线| 日本免费久久高清视频| 国产精品久久久久av| 中文字幕免费精品一区高清| 97久久久免费福利网址| 91高清视频在线免费观看| 国产美女高潮久久白浆| 国产91ⅴ在线精品免费观看| 中文字幕精品久久| 日韩国产高清污视频在线观看| 原创国产精品91| 51ⅴ精品国产91久久久久久| 亚洲护士老师的毛茸茸最新章节| 国产91网红主播在线观看| 国产成人短视频| 久久久亚洲网站| 久久久国产精品x99av| 国产国产精品人在线视| 日韩影视在线观看| 亚洲视频免费一区| 97成人精品视频在线观看| 狠狠久久亚洲欧美专区| 久久五月天综合| 91网站在线免费观看| 日本在线精品视频| 国产欧美日韩中文字幕在线| 久久久久久国产免费| 日本中文字幕不卡免费| 国产一区视频在线播放| 综合国产在线视频| 欧美在线视频网| 午夜精品免费视频| 97精品欧美一区二区三区| 国产成人97精品免费看片| 国产精品看片资源| 亚洲精品720p| 国产精品精品一区二区三区午夜版| 奇米影视亚洲狠狠色| 欧美大全免费观看电视剧大泉洋| 亚洲美女av黄| 欧洲成人在线观看| 久久视频国产精品免费视频在线| 中文字幕亚洲一区在线观看| 精品美女永久免费视频| 日韩一级黄色av| 国产精品www色诱视频| 欧美性猛交丰臀xxxxx网站| 国产日韩在线一区| 日韩精品高清在线观看| 国产精品免费久久久| 亚洲一区美女视频在线观看免费| 成人精品视频在线| 成人国产精品一区| 日韩电影免费观看在线观看| 欧美xxxx14xxxxx性爽| 日韩精品在线视频美女| 一区国产精品视频| 久久人人爽人人爽人人片av高请| 亚洲一区二区三区xxx视频| 欧美一级片久久久久久久| 中文字幕亚洲色图| 日韩成人在线视频网站| 亚洲精品色婷婷福利天堂| 日韩电影中文 亚洲精品乱码| 久久夜色精品国产亚洲aⅴ| 久久精品成人一区二区三区| 国产午夜精品视频| 91在线视频精品| 欧美亚洲午夜视频在线观看| 综合激情国产一区| 成人国产精品一区| 久久久久久久国产精品视频| 日韩在线免费视频| 日韩成人av网| 亚洲iv一区二区三区| 国产成人精品av| 欧美中文字幕精品| 亚洲欧美日韩在线高清直播| 性色av一区二区三区在线观看| 国产在线观看精品一区二区三区| 91成人在线播放| 国产视频久久久久| 欧美日韩亚洲系列| 日韩大片免费观看视频播放| 亚洲天堂影视av| 国产精品欧美激情在线播放| 中文字幕在线观看日韩| 青青久久av北条麻妃黑人| 国产精品毛片a∨一区二区三区|国| 亚洲福利视频免费观看| 亚洲成人精品久久久| 中文字幕在线看视频国产欧美在线看完整| 精品久久香蕉国产线看观看亚洲| 亚洲人成网站999久久久综合| 伊人久久综合97精品| 成人精品一区二区三区电影免费| 欧美成年人网站| 亚洲国产成人av在线| 亚洲国产精彩中文乱码av在线播放| 久久精品福利视频| 国产91网红主播在线观看| 国产精品h在线观看| 日本成人激情视频| 国产日产欧美精品| 日韩在线高清视频| 欧美精品激情视频| 久久91亚洲精品中文字幕| 日韩电影中文字幕一区| 中文欧美在线视频| 国产欧美精品一区二区三区-老狼| 91精品视频播放| 久久精品视频99|