一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

Hive如何提升查詢效率

數(shù)據(jù)分析與開(kāi)發(fā) ? 來(lái)源:數(shù)據(jù)社 ? 作者:數(shù)據(jù)社 ? 2021-11-18 15:53 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

今天分享一下Hive如何提升查詢效率。Hive作為最常用的數(shù)倉(cāng)計(jì)算引擎,是我們必備的技能,但是很多人只是會(huì)寫Hql,并不會(huì)優(yōu)化,也不知道如何提升查詢效率,今天分享8條軍規(guī):

1、開(kāi)啟FetchTask

一個(gè)簡(jiǎn)單的查詢語(yǔ)句,是指一個(gè)沒(méi)有函數(shù)、排序等功能的語(yǔ)句,當(dāng)開(kāi)啟一個(gè)Fetch Task功能,就執(zhí)行一個(gè)簡(jiǎn)單的查詢語(yǔ)句不會(huì)生成MapRreduce作業(yè),而是直接使用FetchTask,從hdfs文件系統(tǒng)中進(jìn)行查詢輸出數(shù)據(jù),從而提高效率。

設(shè)置的方式:

Hive.fetch.task.conversion默認(rèn)為minimal

修改配置文件hive-site.xml

hive.fetch.task.conversion
more

SomeselectqueriescanbeconvertedtosingleFETCHtask
minimizinglatency.Currentlythequeryshouldbesingle
sourcednothavinganysubqueryandshouldnothave
anyaggregationsordistincts(whichincurrsRS),
lateralviewsandjoins.
1.minimal:SELECTSTAR,FILTERonpartitioncolumns,LIMITonly
2.more:SELECT,FILTER,LIMITonly(+TABLESAMPLE,virtualcolumns)




或者當(dāng)前session修改
hive>sethive.fetch.task.conversion=more;
執(zhí)行SELECTid,moneyFROMmlimit10;不走mr

2、合并中間表

一個(gè)日志文件中,每一行記錄,會(huì)有很多很多字段,四五十個(gè)字段很正常。實(shí)際分析中,常常使用少數(shù)幾個(gè)字段將原始的表中數(shù)據(jù),依據(jù)業(yè)務(wù)需求提取出要分析的字段,數(shù)據(jù)放入到對(duì)應(yīng)的業(yè)務(wù)表(子表)中,實(shí)際的業(yè)務(wù)針對(duì)業(yè)務(wù)表進(jìn)行分析。

在實(shí)際中,我們會(huì)發(fā)現(xiàn),有些業(yè)務(wù)處理,會(huì)有共同數(shù)據(jù)集用戶表、訂單表、商品表,三個(gè)表需要進(jìn)行join的操作,join 會(huì)產(chǎn)生一個(gè)結(jié)果集,會(huì)有很多的業(yè)務(wù)是針對(duì)此jion結(jié)果集進(jìn)行分析。

優(yōu)化:將眾多的業(yè)務(wù)中相同的中間結(jié)果集,抽取到一個(gè)Hive中的表中去。

3、合理使用分區(qū)表

外部表、分區(qū)表,結(jié)合使用,采用多級(jí)分區(qū)。數(shù)據(jù)采用存儲(chǔ)格式(textfile、orcfile、parquet)或者數(shù)據(jù)壓縮(snappy)。

明細(xì)數(shù)據(jù)我們一般采用按天分區(qū),對(duì)于特別大的表,可以采用子分區(qū),每個(gè)分區(qū)其實(shí)對(duì)應(yīng)到HDFS上就是一個(gè)目錄。數(shù)據(jù)存儲(chǔ)方式我們可以采用parquet列式存儲(chǔ),同時(shí)具有很好的壓縮性能;同時(shí)可以減少大量的表掃描和反序列化的時(shí)間。在OLAP查詢場(chǎng)景下,我們選擇需要的列信息進(jìn)行查詢,而不是直接select * 查詢所有字段。

4、jvm重用

JVM重用是hadoop調(diào)優(yōu)參數(shù)的內(nèi)容,對(duì)hive的性能具有非常大的影響,特別是對(duì)于很難避免小文件的場(chǎng)景或者task特別多的場(chǎng)景,這類場(chǎng)景大多數(shù)執(zhí)行時(shí)間都很短。hadoop默認(rèn)配置是使用派生JVM來(lái)執(zhí)行map和reduce任務(wù)的,這是jvm的啟動(dòng)過(guò)程可能會(huì)造成相當(dāng)大的開(kāi)銷,尤其是執(zhí)行的job包含有成千上萬(wàn)個(gè)task任務(wù)的情況。JVM重用可以使得JVM實(shí)例在同一個(gè)JOB中重新使用N次,N的值可以在Hadoop的mapre-site.xml文件中進(jìn)行設(shè)置

mapred.job.reuse.jvm.num.tasks 1

也可在hive的執(zhí)行設(shè)置:

setmapred.job.reuse.jvm.num.tasks = 10;

JVM的一個(gè)缺點(diǎn)是,開(kāi)啟JVM重用將會(huì)一直占用使用到的task插槽,以便進(jìn)行重用,直到任務(wù)完成后才能釋放。如果某個(gè)“不平衡“的job中有幾個(gè)reduce task 執(zhí)行的時(shí)間要比其他reduce task消耗的時(shí)間多得多的話,那么保留的插槽就會(huì)一直空閑著卻無(wú)法被其他的job使用,直到所有的task都結(jié)束了才會(huì)釋放。

5、speculative execution(推測(cè)執(zhí)行)

所謂的推測(cè)執(zhí)行,就是當(dāng)所有task都開(kāi)始運(yùn)行之后,Job Tracker會(huì)統(tǒng)計(jì)所有任務(wù)的平均進(jìn)度,如果某個(gè)task所在的task node機(jī)器配置比較低或者CPU load很高(原因很多),導(dǎo)致任務(wù)執(zhí)行比總體任務(wù)的平均執(zhí)行要慢,此時(shí)Job Tracker會(huì)啟動(dòng)一個(gè)新的任務(wù)(duplicate task),原有任務(wù)和新任務(wù)哪個(gè)先執(zhí)行完就把另外一個(gè)kill掉。

推測(cè)執(zhí)行需要設(shè)置Job的兩個(gè)參數(shù):

mapred.map.tasks.speculative.execution=true
mapred.reduce.tasks.speculative.execution=true

6、合理設(shè)置reduce個(gè)數(shù)

reduce個(gè)數(shù)

參數(shù)1:

hive.exec.reducers.bytes.per.reducer=256000000//每個(gè)reduce任務(wù)處理的數(shù)據(jù)量

參數(shù)2:

hive.exec.reducers.max=1009//每個(gè)任務(wù)最大的reduce數(shù)目

計(jì)算公式:reducer個(gè)數(shù)=min(參數(shù)2,總輸入數(shù)據(jù)量/參數(shù)1)

set mapred.reduce.tasks =N:

每個(gè)任務(wù)默認(rèn)的reduce數(shù)目。典型為0.99* reduce槽數(shù),hive默認(rèn)為-1,即自動(dòng)確定reduce數(shù)目。

reduce個(gè)數(shù)并不是越多越好

同map一樣,啟動(dòng)和初始化reduce也會(huì)消耗時(shí)間和資源;另外,有多少個(gè)reduce,就會(huì)有多少個(gè)輸出文件,如果生成了很多個(gè)小文件,那么如果這些小文件作為下一個(gè)任務(wù)的輸入,則也會(huì)出現(xiàn)小文件過(guò)多的問(wèn)題。小文件過(guò)多會(huì)非常影響查詢效率,文件越多造成的IO就越多,同時(shí)還會(huì)增加元數(shù)據(jù)(namenode)的壓力。在生產(chǎn)環(huán)境中,一定要避免小文件問(wèn)題,如果核查發(fā)現(xiàn),及時(shí)合并文件??!

7、開(kāi)啟并行執(zhí)行

并行執(zhí)行,意思是同步執(zhí)行hive的多個(gè)階段,hive在執(zhí)行過(guò)程,將一個(gè)查詢轉(zhuǎn)化成一個(gè)或者多個(gè)階段。某個(gè)特定的job可能包含眾多的階段,而這些階段可能并非完全相互依賴的,也就是說(shuō)可以并行執(zhí)行的,這樣可能使得整個(gè)job的執(zhí)行時(shí)間縮短

hive.exec.parallel.thread.number8//job并行執(zhí)行的數(shù)目,一個(gè)SQL語(yǔ)句可能有很多mapreduce任務(wù),限制
hive.exec.parallelfalse

hive執(zhí)行開(kāi)啟:

sethive.exec.parallel=true

8、優(yōu)化sql
  • where條件優(yōu)化

優(yōu)化前(關(guān)系數(shù)據(jù)庫(kù)不用考慮會(huì)自動(dòng)優(yōu)化):

selectm.cid,u.idfromordermjoincustomeruon(m.cid=u.id)wherem.dt='20180808';

優(yōu)化后(where條件在map端執(zhí)行而不是在reduce端執(zhí)行):

selectm.cid,u.idfrom(select*fromorderwheredt='20180818')mjoincustomeruon(m.cid=u.id);
  • union優(yōu)化

盡量不要使用union (union 去掉重復(fù)的記錄)而是使用 union all 然后在用group by 去重

  • count distinct優(yōu)化

不要使用count (distinct cloumn) ,使用子查詢。

selectcount(1)from(selectidfromtablenamegroupbyid)tmp;
  • 用in 來(lái)代替join

如果需要根據(jù)一個(gè)表的字段來(lái)約束另為一個(gè)表,盡量用in來(lái)代替join 。

selectid,namefromtb1ajointb2bon(a.id=b.id);

selectid,namefromtb1whereidin(selectidfromtb2);

in 要比join 快

  • 消滅子查詢內(nèi)的 group by 、 COUNT(DISTINCT),MAX,MIN??梢詼p少job的數(shù)量。

  • join 優(yōu)化:

Common/shuffle/Reduce JOIN:連接發(fā)生的階段,發(fā)生在reduce 階段,適用于大表連接大表(默認(rèn)的方式)

Map join :連接發(fā)生在map階段,適用于小表連接大表大表的數(shù)據(jù)從文件中讀取;小表的數(shù)據(jù)存放在內(nèi)存中(hive中已經(jīng)自動(dòng)進(jìn)行了優(yōu)化,自動(dòng)判斷小表,然后進(jìn)行緩存)。

sethive.auto.convert.join=true;

SMB join:Sort -Merge -Bucket Join 對(duì)大表連接大表的優(yōu)化,用桶表的概念來(lái)進(jìn)行優(yōu)化。在一個(gè)桶內(nèi)發(fā)送生笛卡爾積連接(需要是兩個(gè)桶表進(jìn)行join)

sethive.auto.convert.sortmerge.join=true;
sethive.optimize.bucketmapjoin=true;
sethive.optimize.bucketmapjoin.sortedmerge=true;
sethive.auto.convert.sortmerge.join.noconditionaltask=true;

責(zé)任編輯:haq


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

    關(guān)注

    8

    文章

    7256

    瀏覽量

    91923
  • hive
    +關(guān)注

    關(guān)注

    0

    文章

    12

    瀏覽量

    4002

原文標(biāo)題:Hive 提高查詢效率的八條軍規(guī)

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    同步整流MOSFET的設(shè)計(jì)要點(diǎn)與效率提升技巧

    。其核心器件——MOSFET,在設(shè)計(jì)中扮演著至關(guān)重要的角色。本文將深入探討同步整流MOSFET的選型要點(diǎn)和提升效率的設(shè)計(jì)技巧。一、同步整流的基本原理傳統(tǒng)整流使用二極
    的頭像 發(fā)表于 07-03 09:42 ?176次閱讀
    同步整流MOSFET的設(shè)計(jì)要點(diǎn)與<b class='flag-5'>效率</b><b class='flag-5'>提升</b>技巧

    全球各大品牌利用NVIDIA AI技術(shù)提升運(yùn)營(yíng)效率

    歐萊雅、LVMH 集團(tuán)和雀巢利用 NVIDIA 加速的智能體 AI 和物理 AI,大幅提升產(chǎn)品設(shè)計(jì)、營(yíng)銷及物流等方面的運(yùn)營(yíng)效率。
    的頭像 發(fā)表于 06-19 14:36 ?490次閱讀

    DevEco Studio AI輔助開(kāi)發(fā)工具兩大升級(jí)功能 鴻蒙應(yīng)用開(kāi)發(fā)效率提升

    隨著搭載HarmonyOS 5的Pura X發(fā)布,鴻蒙生態(tài)進(jìn)入快車道,各應(yīng)用正在加速適配開(kāi)發(fā),越來(lái)越多開(kāi)發(fā)者加入到鴻蒙應(yīng)用開(kāi)發(fā)浪潮中。為提升鴻蒙應(yīng)用開(kāi)發(fā)效率,華為前不久上線了首款開(kāi)發(fā)
    發(fā)表于 04-18 14:43

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

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

    新能源時(shí)代,圓柱電池生產(chǎn)設(shè)備如何提升生產(chǎn)效率

    優(yōu)化生產(chǎn)流程是提升圓柱電池生產(chǎn)效率的基礎(chǔ)。首先,需要對(duì)現(xiàn)有生產(chǎn)流程進(jìn)行多方位梳理,找出瓶頸環(huán)節(jié),并進(jìn)行針對(duì)性改進(jìn)。例如,通過(guò)精簡(jiǎn)生產(chǎn)環(huán)節(jié),減少不必要的物料搬運(yùn)和等待時(shí)間,可以有效提升生產(chǎn)效率
    的頭像 發(fā)表于 04-08 11:51 ?262次閱讀

    優(yōu)化汽車點(diǎn)焊生產(chǎn)線,提升制造效率與質(zhì)量

    在當(dāng)前的制造業(yè)環(huán)境中,提高生產(chǎn)效率和產(chǎn)品質(zhì)量是企業(yè)追求的核心目標(biāo)之一。汽車點(diǎn)焊作為汽車制造過(guò)程中的關(guān)鍵環(huán)節(jié),其效率和質(zhì)量直接影響到整車的性能和安全。因此,優(yōu)化汽車點(diǎn)焊生產(chǎn)線,不僅能夠顯著提升生產(chǎn)
    的頭像 發(fā)表于 02-23 11:14 ?418次閱讀

    IP地址查詢技術(shù)

    基于WHOIS協(xié)議和DNS反向解析,響應(yīng)時(shí)間長(zhǎng)達(dá)數(shù)百毫秒。而現(xiàn)代的IP查詢技術(shù)可將反應(yīng)速度提升至毫秒級(jí)。 IP定位技術(shù)核心原理 1.多維度數(shù)據(jù)融合 現(xiàn)代IP定位系統(tǒng)采用混合數(shù)據(jù)源架構(gòu): l 網(wǎng)絡(luò)運(yùn)營(yíng)商分配的IP段數(shù)據(jù) l 全球路由注冊(cè)機(jī)構(gòu)的注冊(cè)信息 l 用戶設(shè)備主動(dòng)上報(bào)的
    的頭像 發(fā)表于 02-12 11:13 ?421次閱讀
    IP地址<b class='flag-5'>查詢</b>技術(shù)

    回饋式交流電子負(fù)載:測(cè)試效率與節(jié)能效果的雙重提升

    ,通過(guò)創(chuàng)新的能量回饋機(jī)制,實(shí)現(xiàn)了測(cè)試效率與節(jié)能效果的雙重提升,為電力電子測(cè)試領(lǐng)域帶來(lái)了革命性變革。 一、傳統(tǒng)測(cè)試方法的局限性 傳統(tǒng)電阻負(fù)載測(cè)試方法采用耗能式工作原理,將電能轉(zhuǎn)化為熱能消耗。這種測(cè)試方式
    發(fā)表于 02-07 11:13

    八個(gè)方面提升LED驅(qū)動(dòng)電源效率

    關(guān)于提升LED驅(qū)動(dòng)電源效率的技巧總結(jié): 1.主電流回路PCB盡量短。LAYPCB的經(jīng)驗(yàn),及布局,這個(gè)沒(méi)什么,快速的方法就是多看別人的作品。 2.優(yōu)化變壓器參數(shù)設(shè)計(jì),減少振鈴帶來(lái)的渦流損耗。這個(gè)比較
    發(fā)表于 01-17 10:07

    永磁同步電機(jī)效率提升方法

    提升永磁同步電機(jī)效率的方法可以從多個(gè)方面進(jìn)行,以下是一些有效的方法: 優(yōu)化電機(jī)設(shè)計(jì) : 增加磁場(chǎng)的強(qiáng)度:通過(guò)增加永磁體的磁通密度和提高永磁體及鐵心的磁導(dǎo)率,可以有效提升電機(jī)的磁場(chǎng)強(qiáng)度,從而提高
    的頭像 發(fā)表于 11-22 10:13 ?1482次閱讀

    高效生產(chǎn)秘訣:掌握提升SMT貼片效率的拼板設(shè)計(jì)技巧

    一站式PCBA智造廠家今天為大家講講PCBA拼板設(shè)計(jì)的主要目的有哪些?提升SMT貼片效率的拼板設(shè)計(jì)方法。PCBA拼板設(shè)計(jì)是將多個(gè)小PCBA單元通過(guò)各種連接方式組合在一起,以提高生產(chǎn)效率和降低成本
    的頭像 發(fā)表于 11-21 09:34 ?583次閱讀

    如何提升EDA設(shè)計(jì)效率

    EDA(Electronic Design Automation,電子設(shè)計(jì)自動(dòng)化)設(shè)計(jì)技術(shù)是現(xiàn)代電子工程領(lǐng)域的關(guān)鍵技術(shù)之一,提升EDA設(shè)計(jì)效率對(duì)于電子工程師和整個(gè)電子行業(yè)都至關(guān)重要。以下是一些提升
    的頭像 發(fā)表于 11-08 14:23 ?1039次閱讀

    提升效率:RTC時(shí)鐘實(shí)用設(shè)置

    今天來(lái)給大家講解的是RTC時(shí)鐘實(shí)用性,提升絕對(duì)的效率。
    的頭像 發(fā)表于 11-04 16:35 ?1332次閱讀
    <b class='flag-5'>提升</b><b class='flag-5'>效率</b>:RTC時(shí)鐘實(shí)用設(shè)置

    如何提升RFID手持終端的讀寫效率

    RFID(射頻識(shí)別)手持終端是一種便攜式設(shè)備,用于讀取和寫入RFID標(biāo)簽。提升RFID手持終端的讀寫效率對(duì)于提高物流、庫(kù)存管理、零售等行業(yè)的工作效率至關(guān)重要。以下是一些提升RFID手持
    的頭像 發(fā)表于 10-29 09:41 ?674次閱讀

    大數(shù)據(jù)從業(yè)者必知必會(huì)的Hive SQL調(diào)優(yōu)技巧

    不盡人意。本文針對(duì)Hive SQL的性能優(yōu)化進(jìn)行深入研究,提出了一系列可行的調(diào)優(yōu)方案,并給出了相應(yīng)的優(yōu)化案例和優(yōu)化前后的SQL代碼。通過(guò)合理的優(yōu)化策略和技巧,能夠顯著提升Hive SQL的執(zhí)行
    的頭像 發(fā)表于 09-24 13:30 ?701次閱讀