您好,登錄后才能下訂單哦!
Prime_DSC_MentionCalcSpark系統簡介
實現功能 : 根據條件(siteId, startTime, endTime, campaignId, folder)從HBase數據源中讀取文本數據作為輸入,把提交的關鍵詞作為條件,輸出在文本中關鍵詞提及的次數
存在問題 : 對于大數據量的計算時間較長.
解決思路 :
把HBase結果反射成TweetBean修改成TweetBean的setXXX的方式構造TweetBean
當有5W條數據,通過反射轉成TweetBean需要60s,通過TweetBean的setXX的方法需要20s
把讀取HBase的所有字段改成讀取HBase的需要的字段
當有5W條數據,讀取所有字段時需要60s,讀取需要的字段需要25s
從UC取DC數據時,不使用map函數,替換成mapPartition函數,這樣使用可以從HBase批量取數據,僅需要一次HBase連接即可
存儲計算結果,使用foreachPartition函數. 當遍歷Iterator時不是每次在循環里面都存儲計算結果,而是在循環外面維護隊列,批量存儲結果
根據Spark集群資源,合理利用Spark集群的資源,如資源越多,集群計算能力越強.而比較合理的機器資源和任務并行度的關系是 : 任務數 = 機器CPU核數 * (2 或者 3), 所以設置RDD的分區數為集群CPU核數 * 2
從HBase讀取數據的并行度跟表的region數相關.默認情況下,建表時只有一個region,而當region越來越大時,需要split成兩個region,region越多split的閾值越大,導致很多數據都存在一個region中.此時如果需要查詢一張表,假設該表有5個region,則會有5個線程同時查詢5個region的數據,但是如果其中一個region很大,是其他region的10倍,則該region的讀取是其他region讀取性能的10倍,導致整個任務的delay. 解決該問題的方法可以先通過預分區和對rowkey使用hash/MD5等算法使數據均勻的分布在各個region,這樣在讀取數據時可以根據數據均勻分配而更好的并發讀取數據.
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。