国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何解決數據傾斜的問題?

數據分析與開發 ? 來源:五分鐘學大數據 ? 作者:園陌 ? 2021-06-13 14:40 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

數據傾斜問題剖析

數據傾斜是分布式系統不可避免的問題,任何分布式系統都有幾率發生數據傾斜,但有些小伙伴在平時工作中感知不是很明顯。這里要注意本篇文章的標題—“千億級數據”,為什么說千億級,因為如果一個任務的數據量只有幾百萬,它即使發生了數據傾斜,所有數據都跑到一臺機器去執行,對于幾百萬的數據量,一臺機器執行起來還是毫無壓力的,這時數據傾斜對我們感知不大,只有數據達到一個量級時,一臺機器應付不了這么多數據,這時如果發生數據傾斜,最后就很難算出結果。

所以就需要我們對數據傾斜的問題進行優化,盡量避免或減輕數據傾斜帶來的影響。

在解決數據傾斜問題之前,還要再提一句:沒有瓶頸時談論優化,都是自尋煩惱。

大家想想,在map和reduce兩個階段中,最容易出現數據傾斜的就是reduce階段,因為map到reduce會經過shuffle階段,在shuffle中默認會按照key進行hash,如果相同的key過多,那么hash的結果就是大量相同的key進入到同一個reduce中,導致數據傾斜。

那么有沒有可能在map階段就發生數據傾斜呢,是有這種可能的。

一個任務中,數據文件在進入map階段之前會進行切分,默認是128M一個數據塊,但是如果當對文件使用GZIP壓縮等不支持文件分割操作的壓縮方式時,MR任務讀取壓縮后的文件時,是對它切分不了的,該壓縮文件只會被一個任務所讀取,如果有一個超大的不可切分的壓縮文件被一個map讀取時,就會發生map階段的數據傾斜。

所以,從本質上來說,發生數據傾斜的原因有兩種:一是任務中需要處理大量相同的key的數據。二是任務讀取不可分割的大文件。

數據傾斜解決方案

MapReduce和Spark中的數據傾斜解決方案原理都是類似的,以下討論Hive使用MapReduce引擎引發的數據傾斜,Spark數據傾斜也可以此為參照。

1. 空值引發的數據傾斜

實際業務中有些大量的null值或者一些無意義的數據參與到計算作業中,表中有大量的null值,如果表之間進行join操作,就會有shuffle產生,這樣所有的null值都會被分配到一個reduce中,必然產生數據傾斜。

之前有小伙伴問,如果A、B兩表join操作,假如A表中需要join的字段為null,但是B表中需要join的字段不為null,這兩個字段根本就join不上啊,為什么還會放到一個reduce中呢?

這里我們需要明確一個概念,數據放到同一個reduce中的原因不是因為字段能不能join上,而是因為shuffle階段的hash操作,只要key的hash結果是一樣的,它們就會被拉到同一個reduce中。

解決方案:

第一種:可以直接不讓null值參與join操作,即不讓null值有shuffle階段

SELECT * FROM log a JOIN users b ON a.user_id IS NOT NULL AND a.user_id = b.user_id UNION ALL SELECT * FROM log a WHERE a.user_id IS NULL;

第二種:因為null值參與shuffle時的hash結果是一樣的,那么我們可以給null值隨機賦值,這樣它們的hash結果就不一樣,就會進到不同的reduce中:

SELECT * FROM log a LEFT JOIN users b ON CASE WHEN a.user_id IS NULL THEN concat(‘hive_’, rand()) ELSE a.user_id END = b.user_id;

2. 不同數據類型引發的數據傾斜

對于兩個表join,表a中需要join的字段key為int,表b中key字段既有string類型也有int類型。當按照key進行兩個表的join操作時,默認的Hash操作會按int型的id來進行分配,這樣所有的string類型都被分配成同一個id,結果就是所有的string類型的字段進入到一個reduce中,引發數據傾斜。

解決方案:

如果key字段既有string類型也有int類型,默認的hash就都會按int類型來分配,那我們直接把int類型都轉為string就好了,這樣key字段都為string,hash時就按照string類型分配了:

SELECT * FROM users a LEFT JOIN logs b ON a.usr_id = CAST(b.user_id AS string);

3. 不可拆分大文件引發的數據傾斜

當集群的數據量增長到一定規模,有些數據需要歸檔或者轉儲,這時候往往會對數據進行壓縮;當對文件使用GZIP壓縮等不支持文件分割操作的壓縮方式,在日后有作業涉及讀取壓縮后的文件時,該壓縮文件只會被一個任務所讀取。如果該壓縮文件很大,則處理該文件的Map需要花費的時間會遠多于讀取普通文件的Map時間,該Map任務會成為作業運行的瓶頸。這種情況也就是Map讀取文件的數據傾斜。

解決方案:

這種數據傾斜問題沒有什么好的解決方案,只能將使用GZIP壓縮等不支持文件分割的文件轉為bzip和zip等支持文件分割的壓縮方式。

所以,我們在對文件進行壓縮時,為避免因不可拆分大文件而引發數據讀取的傾斜,在數據壓縮的時候可以采用bzip2和Zip等支持文件分割的壓縮算法

4. 數據膨脹引發的數據傾斜

在多維聚合計算時,如果進行分組聚合的字段過多,如下:

select a,b,c,count(1)from log group by a,b,c with rollup;

注:對于最后的with rollup關鍵字不知道大家用過沒,with rollup是用來在分組統計數據的基礎上再進行統計匯總,即用來得到group by的匯總信息。

如果上面的log表的數據量很大,并且Map端的聚合不能很好地起到數據壓縮的情況下,會導致Map端產出的數據急速膨脹,這種情況容易導致作業內存溢出的異常。如果log表含有數據傾斜key,會加劇Shuffle過程的數據傾斜。

解決方案:

可以拆分上面的sql,將with rollup拆分成如下幾個sql:

SELECT a, b, c, COUNT(1) FROM log GROUP BY a, b, c; SELECT a, b, NULL, COUNT(1) FROM log GROUP BY a, b; SELECT a, NULL, NULL, COUNT(1) FROM log GROUP BY a; SELECT NULL, NULL, NULL, COUNT(1) FROM log;

但是,上面這種方式不太好,因為現在是對3個字段進行分組聚合,那如果是5個或者10個字段呢,那么需要拆解的SQL語句會更多。

在Hive中可以通過參數 hive.new.job.grouping.set.cardinality 配置的方式自動控制作業的拆解,該參數默認值是30。表示針對grouping sets/rollups/cubes這類多維聚合的操作,如果最后拆解的鍵組合大于該值,會啟用新的任務去處理大于該值之外的組合。如果在處理數據時,某個分組聚合的列有較大的傾斜,可以適當調小該值。

5. 表連接時引發的數據傾斜

兩表進行普通的repartition join時,如果表連接的鍵存在傾斜,那么在 Shuffle 階段必然會引起數據傾斜。

解決方案:

通常做法是將傾斜的數據存到分布式緩存中,分發到各個Map任務所在節點。在Map階段完成join操作,即MapJoin,這避免了 Shuffle,從而避免了數據傾斜。

MapJoin是Hive的一種優化操作,其適用于小表JOIN大表的場景,由于表的JOIN操作是在Map端且在內存進行的,所以其并不需要啟動Reduce任務也就不需要經過shuffle階段,從而能在一定程度上節省資源提高JOIN效率。

在Hive 0.11版本之前,如果想在Map階段完成join操作,必須使用MAPJOIN來標記顯示地啟動該優化操作,由于其需要將小表加載進內存所以要注意小表的大小。

如將a表放到Map端內存中執行,在Hive 0.11版本之前需要這樣寫:

select /* +mapjoin(a) */ a.id , a.name, b.age from a join b on a.id = b.id;

如果想將多個表放到Map端內存中,只需在mapjoin()中寫多個表名稱即可,用逗號分隔,如將a表和c表放到Map端內存中,則 /* +mapjoin(a,c) */ 。

在Hive 0.11版本及之后,Hive默認啟動該優化,也就是不在需要顯示的使用MAPJOIN標記,其會在必要的時候觸發該優化操作將普通JOIN轉換成MapJoin,可以通過以下兩個屬性來設置該優化的觸發時機:

hive.auto.convert.join=true 默認值為true,自動開啟MAPJOIN優化。

hive.mapjoin.smalltable.filesize=2500000 默認值為2500000(25M),通過配置該屬性來確定使用該優化的表的大小,如果表的大小小于此值就會被加載進內存中。

注意:使用默認啟動該優化的方式如果出現莫名其妙的BUG(比如MAPJOIN并不起作用),就將以下兩個屬性置為fase手動使用MAPJOIN標記來啟動該優化:

hive.auto.convert.join=false (關閉自動MAPJOIN轉換操作)

hive.ignore.mapjoin.hint=false (不忽略MAPJOIN標記)

再提一句:將表放到Map端內存時,如果節點的內存很大,但還是出現內存溢出的情況,我們可以通過這個參數 mapreduce.map.memory.mb 調節Map端內存的大小。

6. 確實無法減少數據量引發的數據傾斜

在一些操作中,我們沒有辦法減少數據量,如在使用 collect_list 函數時:

select s_age,collect_list(s_score) list_score from student group by s_age

collect_list:將分組中的某列轉為一個數組返回。

在上述sql中,s_age如果存在數據傾斜,當數據量大到一定的數量,會導致處理傾斜的reduce任務產生內存溢出的異常。

注:collect_list輸出一個數組,中間結果會放到內存中,所以如果collect_list聚合太多數據,會導致內存溢出。

有小伙伴說這是 group by 分組引起的數據傾斜,可以開啟hive.groupby.skewindata參數來優化。我們接下來分析下:

開啟該配置會將作業拆解成兩個作業,第一個作業會盡可能將Map的數據平均分配到Reduce階段,并在這個階段實現數據的預聚合,以減少第二個作業處理的數據量;第二個作業在第一個作業處理的數據基礎上進行結果的聚合。

hive.groupby.skewindata的核心作用在于生成的第一個作業能夠有效減少數量。但是對于collect_list這類要求全量操作所有數據的中間結果的函數來說,明顯起不到作用,反而因為引入新的作業增加了磁盤和網絡I/O的負擔,而導致性能變得更為低下。

解決方案:

這類問題最直接的方式就是調整reduce所執行的內存大小。

調整reduce的內存大小使用mapreduce.reduce.memory.mb這個配置。

原文標題:Hive 千億級數據傾斜解決方案(好文收藏)

文章出處:【微信公眾號:數據分析與開發】歡迎添加關注!文章轉載請注明出處。

責任編輯:haq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據
    +關注

    關注

    8

    文章

    7335

    瀏覽量

    94777
  • 內存
    +關注

    關注

    9

    文章

    3210

    瀏覽量

    76377

原文標題:Hive 千億級數據傾斜解決方案(好文收藏)

文章出處:【微信號:DBDevs,微信公眾號:數據分析與開發】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    傾斜儀常見故障診斷與排除方法

    傾斜儀在工程監測應用中,可能因環境因素或安裝問題出現各類故障。了解常見故障的識別與處理方法,對保障監測數據連續性具有重要意義。常見故障類型與診斷讀數異常是傾斜儀最常見的故障表現。當監測數據
    的頭像 發表于 03-02 14:39 ?112次閱讀
    <b class='flag-5'>傾斜</b>儀常見故障診斷與排除方法

    保障監測連續性:傾斜儀電纜故障診斷與備用策略

    在結構安全監測系統中,傾斜儀電纜是數據傳輸的生命線。一旦發生故障,可能導致監測中斷,影響安全評估。因此,快速判斷電纜故障類型并采取應對措施至關重要。接下來將為大家介紹如何快速診斷傾斜儀電纜的斷路
    的頭像 發表于 01-21 14:20 ?142次閱讀
    保障監測連續性:<b class='flag-5'>傾斜</b>儀電纜故障診斷與備用策略

    無線傾角傳感器在房屋監測中的應用:讓老舊房屋的傾斜狀態可測、可知、可控

    直川科技無線傾角傳感器精度達±0.005°,可對老舊房屋實現連續傾斜監測,將模糊風險轉化為量化數據。在杭州余杭試點中,成功識別穩定與異常傾斜狀態,支持3–5年免維護運行,助力老舊住宅安全科學管理。
    的頭像 發表于 01-15 11:20 ?645次閱讀
    無線傾角傳感器在房屋監測中的應用:讓老舊房屋的<b class='flag-5'>傾斜</b>狀態可測、可知、可控

    傾斜儀如何進安裝與調試?

    傾斜儀的安裝與調試是獲取準確監測數據的基礎,直接關系到結構安全評估的可靠性。以峟思YS-2A型傾斜儀為例,其設計附帶了調節和固定支架,旨在簡化安裝流程。掌握正確的安裝與調試方法,是發揮儀器高性能
    的頭像 發表于 12-23 16:13 ?257次閱讀
    <b class='flag-5'>傾斜</b>儀如何進安裝與調試?

    N-12電子傾斜儀指南

    電子發燒友網站提供《N-12電子傾斜儀指南.pdf》資料免費下載
    發表于 11-17 17:11 ?0次下載

    傾斜儀可以應用在哪些工程的安全監測項目上?

    傾斜儀作為一種高精度變形監測設備,已廣泛應用于各類工程場景,為結構安全提供實時數據保障。其耐候性強、安裝便捷的特點,特別適合野外惡劣環境下的長期監測任務。水利水電工程是傾斜儀的核心應用領域在混
    的頭像 發表于 08-19 16:02 ?782次閱讀
    <b class='flag-5'>傾斜</b>儀可以應用在哪些工程的安全監測項目上?

    傾斜儀測量數據的讀取與分析指南

    在結構物安全監測中,傾斜儀的數據精準度直接影響工程安全評估結果。南京峟思了解到很多用戶想了解傾斜儀的數據讀取和分析相關內容,那么下面我們將結合本公司的
    的頭像 發表于 08-06 14:50 ?682次閱讀
    <b class='flag-5'>傾斜</b>儀測量<b class='flag-5'>數據</b>的讀取與分析指南

    特力康高壓鐵塔傾斜在線監測裝置,以科技之力守護桿塔穩定

    輸電線路桿塔作為電力傳輸的重要支撐結構,其安全穩定直接關系到電網可靠性。然而,地質變化、施工影響或自然災害等因素可能導致桿塔悄然傾斜,初期難以察覺,卻暗藏倒塔斷線的風險。傳統人工巡檢效率低且難以實時
    的頭像 發表于 07-22 14:33 ?592次閱讀

    貨架傾斜監測:保障倉儲安全的關鍵

    在貨架傾斜監測方面,選擇合適且高品質的無線傾角傳感器至關重要,而直川科技的無線傾角傳感器憑借其卓越的性能和優勢,無疑是眾多倉儲企業值得信賴的選擇,為倉儲安全保駕護航,助力現代物流倉儲行業更加安全、高效地發展。
    的頭像 發表于 07-04 14:36 ?597次閱讀
    貨架<b class='flag-5'>傾斜</b>監測:保障倉儲安全的關鍵

    無線傾角傳感器:倉儲貨架傾斜監測的 “智能衛士”

    在倉儲物流行業飛速發展的當下,貨架作為貨物存儲的核心載體,其穩定性直接關乎倉儲安全與運營效率。然而,日常作業中,貨架因碰撞、重壓等因素易出現傾斜,若不能及時察覺與處理,將引發貨物倒塌、損壞,甚至危及
    的頭像 發表于 06-11 10:52 ?1011次閱讀
    無線傾角傳感器:倉儲貨架<b class='flag-5'>傾斜</b>監測的 “智能衛士”

    輸電線路傾斜儀在線監測裝置:守護電網安全的“數據哨兵”

    在高壓輸電線路跨越山川河流的復雜環境中,桿塔傾斜是威脅電網穩定運行的關鍵隱患之一。傳統人工巡檢方式存在效率低、盲區多、響應滯后等問題,而輸電線路傾斜儀在線監測裝置的普及,正通過數字化手段重構電網安全防護體系。
    的頭像 發表于 06-05 14:40 ?726次閱讀
    輸電線路<b class='flag-5'>傾斜</b>儀在線監測裝置:守護電網安全的“<b class='flag-5'>數據</b>哨兵”

    VirtualLab 應用:傾斜光柵的參數優化及公差分析

    摘要 對于背光系統、光內連器和近眼顯示器等許多應用來說,將光高效地耦合到引導結構中是一個重要的問題。對于這種應用,傾斜光柵以能夠高效地耦合單色光而聞名。在本例中,提出了利用嚴格傅里葉模態方法(FMM
    發表于 05-22 08:52

    貨架防傾斜神器,直川無線傾角傳感器助力貨架監測

    貨架傾斜監測的重要性在現代倉儲物流領域,貨架作為存儲貨物的主要載體,其穩定性至關重要。一旦貨架發生傾斜,輕則導致貨物受損,重則可能引發貨架倒塌,造成嚴重的人員傷亡和財產損失。例如,一些大型倉庫中存放
    的頭像 發表于 05-07 14:19 ?683次閱讀
    貨架防<b class='flag-5'>傾斜</b>神器,直川無線傾角傳感器助力貨架監測

    傾斜儀是否支持二維或三維測量?可以繪制結構物變形曲線嗎?

    在橋梁、大壩、隧道等大型工程中,結構物的細微傾斜可能隱藏著巨大的安全隱患。如何精準捕捉這些變形信號,并描繪出整體結構的“健康曲線”?。南京峟思將從原理到實操,為您解析傾斜儀的多維監測能力,并揭秘
    的頭像 發表于 04-14 15:28 ?527次閱讀
    <b class='flag-5'>傾斜</b>儀是否支持二維或三維測量?可以繪制結構物變形曲線嗎?

    傾斜儀適用于哪些工程場景?能否監測橋梁或隧道的變形?

    傾斜儀是一種高精度測量設備,能夠實時監測建筑物或結構的傾斜角度變化。它通過內置的耐沖擊傳感器,將傾斜變形轉化為數字信號,直接顯示位移或角度值,無需復雜計算。其核心特點是耐用性強、安裝方便、數據
    的頭像 發表于 04-14 15:13 ?1045次閱讀
    <b class='flag-5'>傾斜</b>儀適用于哪些工程場景?能否監測橋梁或隧道的變形?