溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Prime_DSC_MentionCalcSpark性能調(diào)優(yōu)

發(fā)布時間:2020-07-29 21:28:28 來源:網(wǎng)絡(luò) 閱讀:346 作者:誰伴我闖蕩 欄目:大數(shù)據(jù)

Prime_DSC_MentionCalcSpark系統(tǒng)簡介


實現(xiàn)功能 : 根據(jù)條件(siteId, startTime, endTime, campaignId, folder)從HBase數(shù)據(jù)源中讀取文本數(shù)據(jù)作為輸入,把提交的關(guān)鍵詞作為條件,輸出在文本中關(guān)鍵詞提及的次數(shù)


存在問題 : 對于大數(shù)據(jù)量的計算時間較長.


解決思路 : 

  1. 把HBase結(jié)果反射成TweetBean修改成TweetBean的setXXX的方式構(gòu)造TweetBean

    1. 當(dāng)有5W條數(shù)據(jù),通過反射轉(zhuǎn)成TweetBean需要60s,通過TweetBean的setXX的方法需要20s

  2. 把讀取HBase的所有字段改成讀取HBase的需要的字段

    1. 當(dāng)有5W條數(shù)據(jù),讀取所有字段時需要60s,讀取需要的字段需要25s

  3. 從UC取DC數(shù)據(jù)時,不使用map函數(shù),替換成mapPartition函數(shù),這樣使用可以從HBase批量取數(shù)據(jù),僅需要一次HBase連接即可

  4. 存儲計算結(jié)果,使用foreachPartition函數(shù). 當(dāng)遍歷Iterator時不是每次在循環(huán)里面都存儲計算結(jié)果,而是在循環(huán)外面維護隊列,批量存儲結(jié)果

  5. 根據(jù)Spark集群資源,合理利用Spark集群的資源,如資源越多,集群計算能力越強.而比較合理的機器資源和任務(wù)并行度的關(guān)系是 : 任務(wù)數(shù) = 機器CPU核數(shù) * (2 或者 3), 所以設(shè)置RDD的分區(qū)數(shù)為集群CPU核數(shù) * 2

  6. 從HBase讀取數(shù)據(jù)的并行度跟表的region數(shù)相關(guān).默認情況下,建表時只有一個region,而當(dāng)region越來越大時,需要split成兩個region,region越多split的閾值越大,導(dǎo)致很多數(shù)據(jù)都存在一個region中.此時如果需要查詢一張表,假設(shè)該表有5個region,則會有5個線程同時查詢5個region的數(shù)據(jù),但是如果其中一個region很大,是其他region的10倍,則該region的讀取是其他region讀取性能的10倍,導(dǎo)致整個任務(wù)的delay. 解決該問題的方法可以先通過預(yù)分區(qū)和對rowkey使用hash/MD5等算法使數(shù)據(jù)均勻的分布在各個region,這樣在讀取數(shù)據(jù)時可以根據(jù)數(shù)據(jù)均勻分配而更好的并發(fā)讀取數(shù)據(jù).



向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI