<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          漫畫全面解釋Spark企業(yè)調(diào)優(yōu)點

          共 1471字,需瀏覽 3分鐘

           ·

          2021-09-21 20:25

          一:資源配置

          一般企業(yè)中,物理機器的cpu:內(nèi)存基本上都是1:4+,比如機器24core,一般有128GB及以上內(nèi)存;48core,一般有256GB及以上內(nèi)存。

          減去系統(tǒng)及hdfs所需core,2個吧;減去系統(tǒng)的2-4GB,減去存儲hdfs的相關(guān)的假設(shè)20GB吧(hbase需要的更多點,但是一般hbase會有獨立集群)。

          24core,128GB的機器應該還剩還有20core,100GB。

          這種情況下,很明顯,你1core對應5GB內(nèi)存才能最大化利用機器,否則往往cpu沒了,內(nèi)存還有大把,應用還容易出現(xiàn)gc問題。

          所以,假設(shè)你的業(yè)務cpu確實消耗比較少,可以在配置yarn的時候虛擬cpu可以設(shè)置為物理cpu的n倍。這樣才可以滿足小白,1:1的分配cpu內(nèi)存的需求。

          yarn.nodemanager.resource.cpu-vcores 

          二:數(shù)據(jù)傾斜

          1.對于離線,任務生成文件的時候,可以采用支持分割的壓縮算法。常見的壓縮算法如下:

          對于離線,任務生成文件的時候,也可以合理控制生成文件的大小,落地之前進行均衡。

          2.對于實時,生產(chǎn)者生產(chǎn)數(shù)據(jù)到kafka的時候,進行均衡,一般可以采取隨機或者輪訓的生產(chǎn)。假設(shè)要保證相同用戶的數(shù)據(jù)到相同的分區(qū),也可以對實用hash的方式。

          1.遇到shuffle過程中數(shù)據(jù)傾斜的時候,往往需要做的第一件事情就是增大shuffle并行度,只要不是key過于集中與某一個或者幾個key都會有效。

          2.假設(shè)key過于集中,有以下幾個策略可以用來改善:

          2.1 先跑采樣wordcount,看看key的集中情況。

          2.2 個別key特別大,可以拿出來單獨處理。

          2.2 一堆key特別大,可以如下操作:

          key加隨機后綴,分兩次進行聚合,比如隨機后綴的范圍是0-100,相當于并行度擴大了100倍,最后再聚合一次即可。

          2.3 join的時候key傾斜。

          • 大表 join 小表,廣播小表。

          • 大表 join 大表,預先治理,采用相同分桶策略,使得同一個task完成join,減少數(shù)據(jù)shuffle傳輸。后面案例詳解。

          三:大狀態(tài)

          1.用戶自己管理的大狀態(tài)。

              1.1 超時,可以使用具有超時功能的超時的map,如caffeine。

              1.2 確認狀態(tài)是不是可以進行分區(qū)緩存。

              1.3 換外部內(nèi)存存儲,如redis,alluxio。

          2.updateStateBykey等算子。

             2.1 設(shè)置超時時間,spark新版本都支持了,之前版本需要自己維護超時時間。

             2.2 換外部內(nèi)存存儲,如redis,alluxio。

          四:大對象

          如下面一段代碼:

          distData.foreach(each=>{      val map = new mutable.HashMap[String,Int]();      map.put("key",2)      // 邏輯處理      map.clear(); // 不要忘了哦    })


          假設(shè)處理的數(shù)據(jù)量大,每條數(shù)據(jù)區(qū)new map而不執(zhí)行clear清空,等垃圾回收,數(shù)據(jù)量大的時候,就會超級耗費性能,java或者scala的集合都要排查下。

          瀏覽 49
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  h文在线观看 | 亚洲涩图91 | 天堂无码av | 91av在线观看视频五月天 | 男人的天堂色婷婷 |