91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

簡述Hive 數(shù)據(jù)傾斜問題定位排查及解決

數(shù)據(jù)分析與開發(fā) ? 來源:五分鐘學(xué)大數(shù)據(jù) ? 作者:園陌 ? 2021-10-08 09:10 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

多數(shù)介紹數(shù)據(jù)傾斜的文章都是以大篇幅的理論為主,并沒有給出具體的數(shù)據(jù)傾斜案例。當(dāng)工作中遇到了傾斜問題,這些理論很難直接應(yīng)用,導(dǎo)致我們面對傾斜時還是不知所措。

今天我們不扯大篇理論,直接以例子來實踐,排查是否出現(xiàn)了數(shù)據(jù)傾斜,具體是哪段代碼導(dǎo)致的傾斜,怎么解決這段代碼的傾斜。

當(dāng)執(zhí)行過程中任務(wù)卡在 99%,大概率是出現(xiàn)了數(shù)據(jù)傾斜,但是通常我們的 SQL 很大,需要判斷出是哪段代碼導(dǎo)致的傾斜,才能利于我們解決傾斜。通過下面這個非常簡單的例子來看下如何定位產(chǎn)生數(shù)據(jù)傾斜的代碼。

表結(jié)構(gòu)描述

先來了解下這些表中我們需要用的字段及數(shù)據(jù)量:

表的字段非常多,此處僅列出我們需要的字段

第一張表:user_info (用戶信息表,用戶粒度)

字段名 字段含義 字段描述
userkey 用戶 key 用戶標(biāo)識
idno 用戶的身份證號 用戶實名認(rèn)證時獲取
phone 用戶的手機(jī) 用戶注冊時的手機(jī)號
name 用戶的姓名 用戶的姓名

user_info 表的數(shù)據(jù)量:1.02 億,大小:13.9G,所占空間:41.7G(HDFS三副本)

第二張表:user_active (用戶活躍表,用戶粒度)

字段名 字段含義 字段描述
userkey 用戶 key 用戶沒有注冊會分配一個 key
user_active_at 用戶的最后活躍日期 從埋點(diǎn)日志表中獲取用戶的最后活躍日期

user_active 表的數(shù)據(jù)量:1.1 億

第三張表:user_intend(用戶意向表,此處只取近六個月的數(shù)據(jù),用戶粒度)

字段名 字段含義 字段描述
phone 用戶的手機(jī)號 有意向的用戶必須是手機(jī)號注冊的用戶
intend_commodity 用戶意向次數(shù)最多的商品 客戶對某件商品意向次數(shù)最多
intend_rank 用戶意向等級 用戶的購買意愿等級,級數(shù)越高,意向越大

user_intend 表的數(shù)據(jù)量:800 萬

第四張表:user_order(用戶訂單表,此處只取近六個月的訂單數(shù)據(jù),用戶粒度)

字段名 字段含義 字段描述
idno 用戶的身份證號 下訂單的用戶都是實名認(rèn)證的
order_num 用戶的訂單次數(shù) 用戶近六個月下單次數(shù)
order_amount 用戶的訂單總金額 用戶近六個月下單總金額

user_order 表的數(shù)據(jù)量:640 萬

1. 需求

需求非常簡單,就是將以上四張表關(guān)聯(lián)組成一張大寬表,大寬表中包含用戶的基本信息,活躍情況,購買意向及此用戶下訂單情況。

2. 代碼

根據(jù)以上需求,我們以 user_info 表為基礎(chǔ)表,將其余表關(guān)聯(lián)為一個寬表,代碼如下:

select
a.userkey,
a.idno,
a.phone,
a.name,
b.user_active_at,
c.intend_commodity,
c.intend_rank,
d.order_num,
d.order_amount
fromuser_infoa
leftjoinuser_activebona.userkey=b.userkey
leftjoinuser_intendcona.phone=c.phone
leftjoinuser_orderdona.idno=d.idno;

執(zhí)行上述語句,在執(zhí)行到某個 job 時任務(wù)卡在 99%:

7e4ad528-26b6-11ec-82a8-dac502259ad0.png

這時我們就應(yīng)該考慮出現(xiàn)數(shù)據(jù)傾斜了。其實還有一種情況可能是數(shù)據(jù)傾斜,就是任務(wù)超時被殺掉,Reduce 處理的數(shù)據(jù)量巨大,在做 full gc 的時候,stop the world。導(dǎo)致響應(yīng)超時,超出默認(rèn)的 600 秒,任務(wù)被殺掉。報錯信息一般如下:

AttemptID:attempt_1624419433039_1569885_r_000000 Timed outafter 600 secs Container killed by the ApplicationMaster. Container killed onrequest. Exit code is 143 Container exited with a non-zero exit code 143

3. 傾斜問題排查

數(shù)據(jù)傾斜大多數(shù)都是大 key 問題導(dǎo)致的。

如何判斷是大 key 導(dǎo)致的問題,可以通過下面方法:

1. 通過時間判斷

如果某個 reduce 的時間比其他 reduce 時間長的多,如下圖,大部分 task 在 1 分鐘之內(nèi)完成,只有 r_000000 這個 task 執(zhí)行 20 多分鐘了還沒完成。

7e8f9640-26b6-11ec-82a8-dac502259ad0.png

注意:要排除兩種情況:

  1. 如果每個 reduce 執(zhí)行時間差不多,都特別長,不一定是數(shù)據(jù)傾斜導(dǎo)致的,可能是 reduce 設(shè)置過少導(dǎo)致的。

  2. 有時候,某個 task 執(zhí)行的節(jié)點(diǎn)可能有問題,導(dǎo)致任務(wù)跑的特別慢。這個時候,mapreduce 的推測執(zhí)行,會重啟一個任務(wù)。如果新的任務(wù)在很短時間內(nèi)能完成,通常則是由于 task 執(zhí)行節(jié)點(diǎn)問題導(dǎo)致的個別 task 慢。但是如果推測執(zhí)行后的 task 執(zhí)行任務(wù)也特別慢,那更說明該 task 可能會有傾斜問題。

2. 通過任務(wù) Counter 判斷

Counter 會記錄整個 job 以及每個 task 的統(tǒng)計信息。counter 的 url 一般類似:

http://bd001:8088/proxy/application_1624419433039_1569885/mapreduce/singletaskcounter/task_1624419433039_1569885_r_000000/org.apache.hadoop.mapreduce.FileSystemCounter

通過輸入記錄數(shù),普通的 task counter 如下,輸入的記錄數(shù)是 13 億多:

7ed8656e-26b6-11ec-82a8-dac502259ad0.png

7f0e2154-26b6-11ec-82a8-dac502259ad0.png

而 task=000000 的 counter 如下,其輸入記錄數(shù)是 230 多億。是其他任務(wù)的 100 多倍:

7f3042f2-26b6-11ec-82a8-dac502259ad0.png

4. 定位 SQL 代碼

1. 確定任務(wù)卡住的 stage

  • 通過 jobname 確定 stage:

    一般 Hive 默認(rèn)的 jobname 名稱會帶上 stage 階段,如下通過 jobname 看到任務(wù)卡住的為 Stage-4:

7f5dd6ae-26b6-11ec-82a8-dac502259ad0.png

  • 如果 jobname 是自定義的,那可能沒法通過 jobname 判斷 stage。需要借助于任務(wù)日志:

    找到執(zhí)行特別慢的那個 task,然后 Ctrl+F 搜索 “CommonJoinOperator: JOIN struct” 。Hive 在 join 的時候,會把 join 的 key 打印到日志中。如下:

7f9d9dde-26b6-11ec-82a8-dac502259ad0.png

上圖中的關(guān)鍵信息是:struct<_col0:string, _col1:string, _col3:string>

這時候,需要參考該 SQL 的執(zhí)行計劃。通過參考執(zhí)行計劃,可以斷定該階段為 Stage-4 階段:

7fb06586-26b6-11ec-82a8-dac502259ad0.png

2. 確定 SQL 執(zhí)行代碼

確定了執(zhí)行階段,即 stage。通過執(zhí)行計劃,則可以判斷出是執(zhí)行哪段代碼時出現(xiàn)了傾斜。還是從此圖,這個 stage 中進(jìn)行連接操作的表別名是 d:

801276f4-26b6-11ec-82a8-dac502259ad0.png

就可以推測出是在執(zhí)行下面紅框中代碼時出現(xiàn)了數(shù)據(jù)傾斜,因為這行的表的別名是 d:

8063b334-26b6-11ec-82a8-dac502259ad0.png

5. 解決傾斜

我們知道了哪段代碼引起的數(shù)據(jù)傾斜,就針對這段代碼查看傾斜原因,看下這段代碼的表中數(shù)據(jù)是否有異常。

傾斜原因:

本文的示例數(shù)據(jù)中 user_info 和 user_order 通過身份證號關(guān)聯(lián),檢查發(fā)現(xiàn) user_info 表中身份證號為空的有 7000 多萬,原因就是這 7000 多萬數(shù)據(jù)都分配到一個 reduce 去執(zhí)行,導(dǎo)致數(shù)據(jù)傾斜。

解決方法

  1. 可以先把身份證號為空的去除之后再關(guān)聯(lián),最后按照 userkey 連接,因為 userkey 全部都是有值的:
witht1as(
select
  u.userkey,
  o.*
fromuser_infou
leftjoinuser_ordero
onu.idno=o.idno
whereu.idnoisnotnull
--是可以把where條件寫在后面的,hive會進(jìn)行謂詞下推,先執(zhí)行where條件在執(zhí)行l(wèi)eftjoin
)

select
a.userkey,
a.idno,
a.phone,
a.name,
b.user_active_at,
c.intend_commodity,
c.intend_rank,
d.order_num,
d.order_amount
fromuser_infoa
leftjoinuser_activebona.userkey=b.userkey
leftjoinuser_intendcona.phone=c.phone
leftjoint1dona.userkey=d.userkey;
  1. 也可以這樣,給身份證為空的數(shù)據(jù)賦個隨機(jī)值,但是要注意隨機(jī)值不能和表中的身份證號有重復(fù):
select
a.userkey,
a.idno,
a.phone,
a.name,
b.user_active_at,
c.intend_commodity,
c.intend_rank,
d.order_num,
d.order_amount
fromuser_infoa
leftjoinuser_activebona.userkey=b.userkey
leftjoinuser_intendcona.phone=c.phone
leftjoinuser_orderdonnvl(a.idno,concat(rand(),'idnumber'))=d.idno;

其他的解決數(shù)據(jù)傾斜的方法

1. 過濾掉臟數(shù)據(jù)

如果大 key 是無意義的臟數(shù)據(jù),直接過濾掉。本場景中大 key 有實際意義,不能直接過濾掉。

2. 數(shù)據(jù)預(yù)處理

數(shù)據(jù)做一下預(yù)處理(如上面例子,對 null 值賦一個隨機(jī)值),盡量保證 join 的時候,同一個 key 對應(yīng)的記錄不要有太多。

3. 增加 reduce 個數(shù)

如果數(shù)據(jù)中出現(xiàn)了多個大 key,增加 reduce 個數(shù),可以讓這些大 key 落到同一個 reduce 的概率小很多。

配置 reduce 個數(shù):

setmapred.reduce.tasks=15;

4. 轉(zhuǎn)換為 mapjoin

如果兩個表 join 的時候,一個表為小表,可以用 mapjoin 做。

配置 mapjoin:

sethive.auto.convert.join=true;是否開啟自動mapjoin,默認(rèn)是true

sethive.mapjoin.smalltable.filesize=100000000;mapjoin的表size大小

5. 啟用傾斜連接優(yōu)化

hive 中可以設(shè)置 hive.optimize.skewjoin 將一個 join sql 分為兩個 job。同時可以設(shè)置下 hive.skewjoin.key,此參數(shù)表示 join 連接的 key 的行數(shù)超過指定的行數(shù),就認(rèn)為該鍵是偏斜連接鍵,就對 join 啟用傾斜連接優(yōu)化。默認(rèn) key 的行數(shù)是 100000。

配置傾斜連接優(yōu)化:

sethive.optimize.skewjoin=true;啟用傾斜連接優(yōu)化

sethive.skewjoin.key=200000;超過20萬行就認(rèn)為該鍵是偏斜連接鍵

6. 調(diào)整內(nèi)存設(shè)置

適用于那些由于內(nèi)存超限任務(wù)被 kill 掉的場景。通過加大內(nèi)存起碼能讓任務(wù)跑起來,不至于被殺掉。該參數(shù)不一定會明顯降低任務(wù)執(zhí)行時間。

配置內(nèi)存:

setmapreduce.reduce.memory.mb=5120;設(shè)置reduce內(nèi)存大小

setmapreduce.reduce.java.opts=-Xmx5000m-XX:MaxPermSize=128m;

附:Hive 配置屬性官方鏈接:https://cwiki.apache.org/confluence/display/Hive/Configuration+Properties

編輯:jq
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7335

    瀏覽量

    94785
  • SQL
    SQL
    +關(guān)注

    關(guān)注

    1

    文章

    789

    瀏覽量

    46702
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4968

    瀏覽量

    73992
  • hive
    +關(guān)注

    關(guān)注

    0

    文章

    12

    瀏覽量

    4134

原文標(biāo)題:實操 : Hive 數(shù)據(jù)傾斜問題定位排查及解決

文章出處:【微信號:DBDevs,微信公眾號:數(shù)據(jù)分析與開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    【技術(shù)帖】音頻雜音深度拆解:從成因到破解,告別排查難題

    音頻雜音是音頻從業(yè)人員日常工作中頻繁遭遇、且難以快速定位解決的棘手問題。其核心痛點(diǎn)在于雜音形成機(jī)理復(fù)雜、誘因多樣,導(dǎo)致問題排查的范圍廣、難度高。為幫助各位工程師高效破解音頻雜音難題,精準(zhǔn)定位問題根源
    的頭像 發(fā)表于 03-04 18:33 ?462次閱讀
    【技術(shù)帖】音頻雜音深度拆解:從成因到破解,告別<b class='flag-5'>排查</b>難題

    rk3568 Android藍(lán)牙語音通話故障排查:從問題定位到落地解決

    在平板的日常使用中,藍(lán)牙功能常扮演著關(guān)鍵角色,可一旦出現(xiàn)語音通話問題,便會嚴(yán)重影響使用體驗。近期,我們遇到了平板藍(lán)牙無法進(jìn)行語音通話的故障,具體表現(xiàn)為進(jìn)入騰訊會議后,藍(lán)牙選項直接消失,無法選擇藍(lán)牙進(jìn)行語音傳輸。經(jīng)過一系列排查與調(diào)試,我們成功解決了該問題,現(xiàn)將完整的故障排查
    的頭像 發(fā)表于 02-09 16:54 ?1494次閱讀
    rk3568 Android藍(lán)牙語音通話故障<b class='flag-5'>排查</b>:從問題<b class='flag-5'>定位</b>到落地解決

    芯片燒錄失敗怎么辦?排查PCBA生產(chǎn)中的常見燒錄故障

    、目標(biāo)文件等軟件配置;最后驗證芯片是否受損、燒錄器狀態(tài)是否良好。建立固定排查流程,可快速定位故障、保障生產(chǎn)。
    的頭像 發(fā)表于 02-06 10:38 ?154次閱讀

    傾斜儀如何進(jìn)安裝與調(diào)試?

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

    Keithley吉時利6511常見故障排查及解決方法

    Keithley吉時利6511作為一款精密測量儀器,在長期使用中可能會遇到各種故障。以下是該設(shè)備常見故障的排查思路及解決方法,幫助用戶快速定位問題并恢復(fù)設(shè)備正常運(yùn)行。 ? ? 一、常見故障及排查步驟
    的頭像 發(fā)表于 11-21 18:47 ?940次閱讀
    Keithley吉時利6511常見故障<b class='flag-5'>排查</b>及解決方法

    鄂電故障定位超聲傳感器如何實現(xiàn)快速定位排查

    在鄂電電網(wǎng)(涵蓋高壓輸電線路、變電站、配電網(wǎng)絡(luò))運(yùn)行中,設(shè)備絕緣缺陷(如絕緣子老化、電纜接頭松動)、線路短路等故障若不能及時定位排查,可能引發(fā)停電事故,影響居民用電與工業(yè)生產(chǎn)。鄂電故障定位超聲傳感器
    的頭像 發(fā)表于 09-11 10:53 ?665次閱讀

    Web頁面白屏問題的排查步驟和解決方法

    Web頁面出現(xiàn)白屏的原因眾多,本文列舉了若干常見白屏問題的排查步驟,供開發(fā)者快速定位。
    的頭像 發(fā)表于 08-22 10:49 ?3900次閱讀
    Web頁面白屏問題的<b class='flag-5'>排查</b>步驟和解決方法

    傾斜儀可以應(yīng)用在哪些工程的安全監(jiān)測項目上?

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

    傾斜儀測量數(shù)據(jù)的讀取與分析指南

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

    VirtualLab 應(yīng)用:傾斜光柵的參數(shù)優(yōu)化及公差分析

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

    研發(fā)排查問題的利器:一款方法調(diào)用棧跟蹤工具

    ,有助于快速定位代碼來源和流量入口,有效提升研發(fā)和運(yùn)維排查定位效率。期望在大家面臨類似痛點(diǎn)時可以提供一些實踐經(jīng)驗和參考,也歡迎大家合適的場景下接入使用。 ? ? 現(xiàn)狀分析 在系統(tǒng)值班時,經(jīng)常會有人拿著報錯截圖前來咨詢,作
    的頭像 發(fā)表于 05-06 17:24 ?3172次閱讀
    研發(fā)<b class='flag-5'>排查</b>問題的利器:一款方法調(diào)用棧跟蹤工具

    分布式存儲數(shù)據(jù)恢復(fù)—虛擬機(jī)上hbase和hive數(shù)據(jù)數(shù)據(jù)恢復(fù)案例

    分布式存儲數(shù)據(jù)恢復(fù)環(huán)境: 16臺某品牌R730xd服務(wù)器節(jié)點(diǎn),每臺服務(wù)器節(jié)點(diǎn)上有數(shù)臺虛擬機(jī)。 虛擬機(jī)上部署Hbase和Hive數(shù)據(jù)庫。 分布式存儲故障: 數(shù)據(jù)庫底層文件被誤
    的頭像 發(fā)表于 04-17 11:05 ?724次閱讀

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

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

    使用福祿克示波表排查電氣故障的案例分析

    當(dāng)工程師們排查異常的電氣故障時,和偵探探案有著異曲同工之妙。工程師需要從設(shè)備的種種表現(xiàn)抽絲剝繭。他們從多個測試點(diǎn)的數(shù)據(jù)逐一排查,甚至需要不斷擴(kuò)大調(diào)查范圍,檢查上游供電的電能質(zhì)量,偵破各個潛在的影響因素,最終
    的頭像 發(fā)表于 03-27 15:42 ?1137次閱讀
    使用福祿克示波表<b class='flag-5'>排查</b>電氣故障的案例分析

    5G網(wǎng)絡(luò)優(yōu)化中,信令測試儀如何幫助故障排查

    的信令流程,并分析系統(tǒng)性能數(shù)據(jù),從而定位問題所在。 用戶設(shè)備問題定位:信令測試儀還可以檢測UE相關(guān)的信令異常,如固件或操作系統(tǒng)問題、硬件故障以及用戶操作不當(dāng)?shù)?。通過仔細(xì)檢查UE日志和信令跟蹤記錄,可以
    發(fā)表于 03-20 14:18