国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Hive數(shù)據(jù)傾斜常見場景及解決方案(超全?。。。?/h1>

這篇具有很好參考價值的文章主要介紹了Hive數(shù)據(jù)傾斜常見場景及解決方案(超全!?。。?。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Hive數(shù)據(jù)傾斜常見問題和解決方案

目錄

前言

一、Explain

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

1.什么是數(shù)據(jù)傾斜?它的主要表現(xiàn)?

2.產(chǎn)生數(shù)據(jù)傾斜的常見原因

一.join時:首先是大表關(guān)聯(lián)小表,容易發(fā)生數(shù)據(jù)傾斜

二.join時:空key過多,或者相同key過多

三.join時:不同數(shù)據(jù)類型關(guān)聯(lián)產(chǎn)生數(shù)據(jù)傾斜

四.join時:大表和不大不小的表聯(lián)接

五.join時:大表聯(lián)接大表

六. 沒有join時:group by發(fā)生的數(shù)據(jù)傾斜

七.沒有join時:count distinct優(yōu)化

八.行列過濾 優(yōu)化?編輯

九、面對復(fù)雜邏輯,每個map耗時較長,適當(dāng)增加map的個數(shù)

十、假如小文件比較多,可以先進(jìn)行小文件合并

十一、調(diào)整reduce個數(shù)

十二、并行執(zhí)行


前言

Hive數(shù)據(jù)傾斜是面試中常問的問題,這里我們需要很熟練地能舉出常見的數(shù)據(jù)傾斜的例子并且給出解決方案。

一、Explain

我們可以通過sql語句前面加expalin來具體查看這條語句的執(zhí)行計劃 通過觀察它的一些參數(shù)來輔助調(diào)優(yōu)

hive數(shù)據(jù)傾斜,python,pandas,開發(fā)語言

? ?? ??hive數(shù)據(jù)傾斜,python,pandas,開發(fā)語言

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

1.什么是數(shù)據(jù)傾斜?它的主要表現(xiàn)?

數(shù)據(jù)傾斜是由于數(shù)據(jù)分布不均勻,造成數(shù)據(jù)大量的集中到一點,造成數(shù)據(jù)熱點的現(xiàn)象。

主要表現(xiàn):任務(wù)進(jìn)度長時間維持在 99%或者 100%的附近,查看任務(wù)監(jiān)控頁面,發(fā)現(xiàn)只有少量 reduce 子任務(wù)未完成,因為其處理的數(shù)據(jù)量和其他的 reduce 差異過大。 單一 reduce 處理的記錄數(shù)和平均記錄數(shù)相差太大,通常達(dá)到好幾倍之多,最長時間遠(yuǎn)大于平均時長。

2.產(chǎn)生數(shù)據(jù)傾斜的常見原因

一.join時:首先是大表關(guān)聯(lián)小表,容易發(fā)生數(shù)據(jù)傾斜

這里Hive自動幫我們把小表放到緩存當(dāng)中了。也就是我們所熟知的mapjoin,在學(xué)習(xí)Hadoop中就已經(jīng)使用過。

以前需要我們手動調(diào):set hive.auto.convert.join=true

一般小表的大小是25M左右,想要改變其大小只需set hive.mapjoin.smalltable.filesize=25000000

以前join的時候小表必須在左邊,現(xiàn)在底層優(yōu)化了,無所謂放到左邊右邊了。

二.join時:空key過多,或者相同key過多

空key可能是異常數(shù)據(jù),兩個表聯(lián)接時,聯(lián)接的字段作為key,可能有很多null值,也可能集中出現(xiàn)在某個值上。這樣就導(dǎo)致了他們經(jīng)過計算得出的哈希值都一樣,然后把它們都放到一個reduce里面,導(dǎo)致這幾個reduce的壓力過大,其他reduce很輕松的場面,也就是我們所謂的數(shù)據(jù)傾斜。

這里我們有兩種常用的解決辦法:第一種是將兩表聯(lián)接之前就去掉這些null值,然后再union all加上是空值的全部數(shù)據(jù)。比如要聯(lián)接user和log:

select * from log a join user b on a.userid is not null and a.userid=b.userid union all select * from log c where c.userid is null;

第二種辦法就是賦予空值新的key值,通過隨機(jī)數(shù)將他們賦給不同的reduce:

這里什么意思呢?就是null現(xiàn)在通過計算不都是一個哈希值嘛,那就給他們賦隨機(jī)數(shù),這樣通過計算就會分配到不同的分區(qū)了。

select * from log a left join user b on case when a.userid is null then concat('hive',rand()) else a.userid end =b.userid;

三.join時:不同數(shù)據(jù)類型關(guān)聯(lián)產(chǎn)生數(shù)據(jù)傾斜

比如兩個表聯(lián)接,聯(lián)接的字段是userid,一個表的userid是string類型,一個表的是int類型,那這樣默認(rèn)按照int來計算哈希的話,那么string類型的都會被分到同一組,易發(fā)生數(shù)據(jù)傾斜。

解決辦法就是把數(shù)字類型 id 轉(zhuǎn)換成 string 類型的 id,或者統(tǒng)一即可。

四.join時:大表和不大不小的表聯(lián)接

如果此時的小表不大不小,不能發(fā)生mapjoin,有什么優(yōu)化方法呢?假如聯(lián)接的字段是userid,這里如果這個“大表”或者“小表”有比較多重復(fù)的userid,那么我們也可以優(yōu)化。

我們這里假設(shè)大表有較多重復(fù)的userid,解決方案就是就是先給“大表”的userid去重然后再聯(lián)接另一個表,此時去重后大表可能會變成小表,這樣又可以mapjoin,查詢完以后再右連接原先的這個大表。比如這時的log表是大表,有很多重復(fù)的userid,users表是小表,但也超過了25M。

select from log a left join (select d* from (select distinct userid from log)c join users d on c.userid=d.userid)x on a.userid=x.userid?

五.join時:大表聯(lián)接大表

兩個大表聯(lián)查,分桶優(yōu)化,根據(jù)id分桶,id是字符型數(shù)值,通過計算哈希值會計算出自己在第幾桶,所以一個桶對應(yīng)一個桶就行,這樣效率提高很多。

一個桶對應(yīng)一個桶,0桶對應(yīng)0桶聯(lián)查,1桶對應(yīng)1桶聯(lián)查...(因為一樣的id肯定在一個對應(yīng)的桶里)

hive數(shù)據(jù)傾斜,python,pandas,開發(fā)語言

代碼演示:

hive數(shù)據(jù)傾斜,python,pandas,開發(fā)語言

? ??hive數(shù)據(jù)傾斜,python,pandas,開發(fā)語言

? ??hive數(shù)據(jù)傾斜,python,pandas,開發(fā)語言

? ?hive數(shù)據(jù)傾斜,python,pandas,開發(fā)語言

六. 沒有join時:group by發(fā)生的數(shù)據(jù)傾斜

group by引起的傾斜主要是輸入數(shù)據(jù)行按照group by列分布不均勻引起的。

比如,有個key值有100W個a,此時直接做分組的話,這100W個a將會分到同一個reduce中,這一個節(jié)點處理的數(shù)據(jù)遠(yuǎn)大于其他節(jié)點處理的數(shù)據(jù),造成數(shù)據(jù)傾斜,跑不出數(shù)據(jù)。其原因就是有大量的key集中分配到了同一個reduce,那么我們的解決思路就是將這些key值打散,使起分散到多個reduce節(jié)點處理即可,達(dá)到負(fù)載均衡的效果。解決辦法:(2)可以不動
hive數(shù)據(jù)傾斜,python,pandas,開發(fā)語言

hive數(shù)據(jù)傾斜,python,pandas,開發(fā)語言


七.沒有join時:count distinct優(yōu)化

在Hive開發(fā)過程中,應(yīng)該小心使用count distinct,因為很容易引起性能問題,比如下面的SQL:

?select count(distinct userid) from t1;

由于必須去重,因此Hive將會把Map階段的輸出全部分布到一個Reduce Task上,此時很容易引起性能問題。對于這種情況,可以通過先group by再count的方式來優(yōu)化,優(yōu)化后的SQL如下:

select count(*) from (select user from t1 group by userid) a;

其原理為:利用group by去重,再統(tǒng)計group by的行數(shù)目(不過這種方式需要注意數(shù)據(jù)傾斜的問題)。

八.行列過濾 優(yōu)化hive數(shù)據(jù)傾斜,python,pandas,開發(fā)語言

謂詞下推?用在SQL優(yōu)化上來說 就是先過濾再做聚合等操作

因為兩個表的關(guān)聯(lián)字段是id?想要在關(guān)聯(lián)以后在用where過濾?實際上底層已經(jīng)優(yōu)化了?關(guān)聯(lián)之前就將兩個表過濾了?但有時候sql寫的長的時候?謂詞下推會失效?所以有點不靠譜的

hive數(shù)據(jù)傾斜,python,pandas,開發(fā)語言

?(該圖來自知乎)

九、面對復(fù)雜邏輯,每個map耗時較長,適當(dāng)增加map的個數(shù)

hive數(shù)據(jù)傾斜,python,pandas,開發(fā)語言

十、假如小文件比較多,可以先進(jìn)行小文件合并

hive數(shù)據(jù)傾斜,python,pandas,開發(fā)語言

十一、調(diào)整reduce個數(shù)

hive數(shù)據(jù)傾斜,python,pandas,開發(fā)語言

hive數(shù)據(jù)傾斜,python,pandas,開發(fā)語言

十二、并行執(zhí)行

hive數(shù)據(jù)傾斜,python,pandas,開發(fā)語言

?文章來源地址http://www.zghlxwxcb.cn/news/detail-780301.html

總結(jié):Hive數(shù)據(jù)傾斜是非常常見的面試題,基本 可以說出4-6個我覺得就可以應(yīng)付面試?yán)瞺

到了這里,關(guān)于Hive數(shù)據(jù)傾斜常見場景及解決方案(超全?。。。┑奈恼戮徒榻B完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 基于MapReduce的Hive數(shù)據(jù)傾斜場景以及調(diào)優(yōu)方案

    通常認(rèn)為當(dāng)所有的map task全部完成,并且99%的reduce task完成,只剩下一個或者少數(shù)幾個reduce task一直在執(zhí)行,這種情況下一般都是發(fā)生了數(shù)據(jù)傾斜。 即為在整個計算過程中,大量相同的key被分配到了同一個reduce任務(wù)上造成。Hive的數(shù)據(jù)傾斜本質(zhì)上是MapReduce計算引擎的數(shù)據(jù)傾斜,

    2024年02月12日
    瀏覽(87)
  • Spark數(shù)據(jù)傾斜解決方案一:源數(shù)據(jù)預(yù)處理和過濾傾斜key

    Spark數(shù)據(jù)傾斜解決方案一:源數(shù)據(jù)預(yù)處理和過濾傾斜key

    為什么把源數(shù)據(jù)預(yù)處理和過濾掉傾斜的key兩種處理傾斜的方式寫到一起? 因為這兩種方式在實際的項目中場景較少而且單一,對于數(shù)據(jù)源預(yù)處理,比如原本要在spark中進(jìn)行聚合或join的操作,提前到hive中去做,這種方式雖然解決了spark中數(shù)據(jù)傾斜的問題,但是hive中依然也會存

    2024年02月09日
    瀏覽(22)
  • Hive表鎖機(jī)制原理以及各種場景的解決方案

    hive 鎖機(jī)制(S鎖,X鎖) 是由hive的事務(wù)管理器出發(fā),鎖的原理是 一張表簡稱A表,我們對A表做查詢操作的時候,就會獲取到?A表的S鎖(共享鎖), 如果對A表做alter 等其他操作就會獲取A表的X鎖(排他鎖) 如果A表同時擁有S鎖和X鎖,A表就會死鎖。死鎖后的現(xiàn)象就是做drop truncate 等操作會

    2024年02月02日
    瀏覽(22)
  • MapReduce數(shù)據(jù)傾斜產(chǎn)生的原因及其解決方案

    數(shù)據(jù)傾斜就是數(shù)據(jù)的key的分化嚴(yán)重不均,造成一部分?jǐn)?shù)據(jù)很多,一部分?jǐn)?shù)據(jù)很少的局面。 數(shù)據(jù)頻率傾斜 —— 某一個區(qū)域的數(shù)據(jù)量要遠(yuǎn)遠(yuǎn)大于其他區(qū)域。 數(shù)據(jù)大小傾斜 —— 部分記錄的大小遠(yuǎn)遠(yuǎn)大于平均值。 (1)Hadoop框架的特性 Job數(shù)多的作業(yè)運行效率會相對比較低; count

    2023年04月08日
    瀏覽(43)
  • Kafka數(shù)據(jù)傾斜到某一個分區(qū)解決方案

    我們使用Kafka時,某時需要消息消費是有序的,因此在生產(chǎn)者投遞消息時,可能會指定分區(qū),或者指定Key,此時可能會導(dǎo)致數(shù)據(jù)傾斜到某一個分區(qū)。 由于Kafka消費的特性,即一個消費組,那怕此時消費組有2個以上消費者,此時同一個主分區(qū),只能被一個消費者消費,當(dāng)生產(chǎn)消

    2024年02月13日
    瀏覽(38)
  • 視頻匯聚融合平臺解決方案常見的接入方式及場景應(yīng)用

    視頻匯聚融合平臺解決方案常見的接入方式及場景應(yīng)用

    視頻匯聚融合平臺解決方案常見的接入方式及場景應(yīng)用 一、視頻融合平臺 視頻匯聚與融合賦能平臺支持多協(xié)議(GB28181/Onvif/RTSP/RTMP/??礢DK/Ehome/大華SDK/宇視SDK)、多類型設(shè)備(IPC/NVR/監(jiān)控平臺)的接入,可將分散不同品牌、不同協(xié)議的視頻資源進(jìn)行統(tǒng)一整合和管理,實現(xiàn)視頻圖

    2024年01月19日
    瀏覽(21)
  • 數(shù)字金融建設(shè)中數(shù)據(jù)傳輸場景及解決方案

    金融數(shù)據(jù)泄露、濫用、篡改等安全威脅影響重大,涉及用戶個人隱私和企業(yè)商 業(yè)機(jī)密,關(guān)乎國家安全和社會穩(wěn)定,數(shù)字金融安全能力建設(shè)重要性凸顯。 數(shù)字金融建設(shè)總體情況. 數(shù)字金融是通過互聯(lián)網(wǎng)及信息技術(shù)手段與傳統(tǒng)金融服務(wù)業(yè)態(tài)相結(jié)合的新一代金融服務(wù),依托于大數(shù)據(jù)

    2024年02月14日
    瀏覽(23)
  • 大數(shù)據(jù):Trino簡介及ETL場景的解決方案

    大數(shù)據(jù):Trino簡介及ETL場景的解決方案

    Presto 在 Facebook 的誕生最開始是為了填補(bǔ)當(dāng)時 Facebook 內(nèi)部實時查詢和 ETL 處理之間的空白。Presto 的核心目標(biāo)就是提供交互式查詢,也就是我們常說的 Ad-Hoc Query,很多公司都使用它作為 OLAP 計算引擎。但是隨著近年來業(yè)務(wù)場景越來越復(fù)雜,除了交互式查詢場景,很多公司也需要

    2024年02月08日
    瀏覽(36)
  • 常見后端數(shù)據(jù)存儲問題解決方案

    常見后端數(shù)據(jù)存儲問題解決方案

    1、mysql數(shù)據(jù)準(zhǔn)確性 ? ? ? ?常見電商系統(tǒng)中,如訂單服務(wù)、現(xiàn)金券服務(wù)、活動類服務(wù)等,這類服務(wù)中經(jīng)常會出現(xiàn)一些并發(fā)更新數(shù)據(jù)的情況,如何保證數(shù)據(jù)準(zhǔn)確性。雖然有些操作可通過\\\"狀態(tài)\\\"字段做了類似樂觀鎖的處理。但理論上還是會出現(xiàn)ABA的問題,而且規(guī)則不夠統(tǒng)一,不同

    2023年04月18日
    瀏覽(18)
  • 關(guān)于hive3多表leftjoin導(dǎo)致數(shù)據(jù)丟失問題及解決方案

    最近業(yè)務(wù)場景需要將一張大表通過name名字關(guān)聯(lián)多個小表去獲取他們的id,大表數(shù)據(jù)9000w,小表數(shù)據(jù)最大180w,最小30w,我以主表leftjoin的時候發(fā)現(xiàn)了數(shù)據(jù)丟失問題 代碼如下? 結(jié)果顯示數(shù)據(jù)我t7的數(shù)據(jù)由180w剩下9w,發(fā)生了嚴(yán)重的數(shù)據(jù)丟失,在別的表也有不同程度的丟失問題. 最后發(fā)現(xiàn)這個問

    2024年02月15日
    瀏覽(42)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包