<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)點(diǎn)

          共 1660字,需瀏覽 4分鐘

           ·

          2020-12-02 03:47

          一:資源配置

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

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

          24core,128GB的機(jī)器應(yīng)該還剩還有20core,100GB。

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

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

          yarn.nodemanager.resource.cpu-vcores 

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

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

          對(duì)于離線,任務(wù)生成文件的時(shí)候,也可以合理控制生成文件的大小,落地之前進(jìn)行均衡。

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

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

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

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

          2.2 個(gè)別key特別大,可以拿出來單獨(dú)處理。

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

          key加隨機(jī)后綴,分兩次進(jìn)行聚合,比如隨機(jī)后綴的范圍是0-100,相當(dāng)于并行度擴(kuò)大了100倍,最后再聚合一次即可。

          2.3 join的時(shí)候key傾斜。

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

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

          三:大狀態(tài)

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

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

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

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

          2.updateStateBykey等算子。

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

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

          四:大對(duì)象

          如下面一段代碼:

          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ù)量大的時(shí)候,就會(huì)超級(jí)耗費(fèi)性能,java或者scala的集合都要排查下。


          --end--


          掃描下方二維碼
          添加好友,備注【交流
          可私聊交流,也可進(jìn)資源豐富學(xué)習(xí)群

          瀏覽 35
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <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>
                  日本A视频在线观看 | 97人妻一区二区三区 | 超碰成人福利在线 | 中文字幕高清无码在线视频 | 国产美女在线被艹 |