色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

Hive如何提升查詢效率

數據分析與開發 ? 來源:數據社 ? 作者:數據社 ? 2021-11-18 15:53 ? 次閱讀
今天分享一下Hive如何提升查詢效率。Hive作為最常用的數倉計算引擎,是我們必備的技能,但是很多人只是會寫Hql,并不會優化,也不知道如何提升查詢效率,今天分享8條軍規:

1、開啟FetchTask

一個簡單的查詢語句,是指一個沒有函數、排序等功能的語句,當開啟一個Fetch Task功能,就執行一個簡單的查詢語句不會生成MapRreduce作業,而是直接使用FetchTask,從hdfs文件系統中進行查詢輸出數據,從而提高效率。

設置的方式:

Hive.fetch.task.conversion默認為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)




或者當前session修改
hive>sethive.fetch.task.conversion=more;
執行SELECTid,moneyFROMmlimit10;不走mr

2、合并中間表

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

在實際中,我們會發現,有些業務處理,會有共同數據集用戶表、訂單表、商品表,三個表需要進行join的操作,join 會產生一個結果集,會有很多的業務是針對此jion結果集進行分析。

優化:將眾多的業務中相同的中間結果集,抽取到一個Hive中的表中去。

3、合理使用分區表

外部表、分區表,結合使用,采用多級分區。數據采用存儲格式(textfile、orcfile、parquet)或者數據壓縮(snappy)。

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

4、jvm重用

JVM重用是hadoop調優參數的內容,對hive的性能具有非常大的影響,特別是對于很難避免小文件的場景或者task特別多的場景,這類場景大多數執行時間都很短。hadoop默認配置是使用派生JVM來執行map和reduce任務的,這是jvm的啟動過程可能會造成相當大的開銷,尤其是執行的job包含有成千上萬個task任務的情況。JVM重用可以使得JVM實例在同一個JOB中重新使用N次,N的值可以在Hadoop的mapre-site.xml文件中進行設置

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

也可在hive的執行設置:

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

JVM的一個缺點是,開啟JVM重用將會一直占用使用到的task插槽,以便進行重用,直到任務完成后才能釋放。如果某個“不平衡“的job中有幾個reduce task 執行的時間要比其他reduce task消耗的時間多得多的話,那么保留的插槽就會一直空閑著卻無法被其他的job使用,直到所有的task都結束了才會釋放。

5、speculative execution(推測執行)

所謂的推測執行,就是當所有task都開始運行之后,Job Tracker會統計所有任務的平均進度,如果某個task所在的task node機器配置比較低或者CPU load很高(原因很多),導致任務執行比總體任務的平均執行要慢,此時Job Tracker會啟動一個新的任務(duplicate task),原有任務和新任務哪個先執行完就把另外一個kill掉。

推測執行需要設置Job的兩個參數:

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

6、合理設置reduce個數

reduce個數

參數1:

hive.exec.reducers.bytes.per.reducer=256000000//每個reduce任務處理的數據量

參數2:

hive.exec.reducers.max=1009//每個任務最大的reduce數目

計算公式:reducer個數=min(參數2,總輸入數據量/參數1)

set mapred.reduce.tasks =N:

每個任務默認的reduce數目。典型為0.99* reduce槽數,hive默認為-1,即自動確定reduce數目。

reduce個數并不是越多越好

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

7、開啟并行執行

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

hive.exec.parallel.thread.number8//job并行執行的數目,一個SQL語句可能有很多mapreduce任務,限制
hive.exec.parallelfalse

hive執行開啟:

sethive.exec.parallel=true

8、優化sql
  • where條件優化

優化前(關系數據庫不用考慮會自動優化):

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

優化后(where條件在map端執行而不是在reduce端執行):

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

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

  • count distinct優化

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

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

如果需要根據一個表的字段來約束另為一個表,盡量用in來代替join 。

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

selectid,namefromtb1whereidin(selectidfromtb2);

in 要比join 快

  • 消滅子查詢內的 group by 、 COUNT(DISTINCT),MAX,MIN。可以減少job的數量。

  • join 優化:

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

Map join :連接發生在map階段,適用于小表連接大表大表的數據從文件中讀取;小表的數據存放在內存中(hive中已經自動進行了優化,自動判斷小表,然后進行緩存)。

sethive.auto.convert.join=true;

SMB join:Sort -Merge -Bucket Join 對大表連接大表的優化,用桶表的概念來進行優化。在一個桶內發送生笛卡爾積連接(需要是兩個桶表進行join)

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

責任編輯:haq


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

    關注

    8

    文章

    7002

    瀏覽量

    88943
  • hive
    +關注

    關注

    0

    文章

    12

    瀏覽量

    3848

原文標題:Hive 提高查詢效率的八條軍規

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

收藏 人收藏

    評論

    相關推薦

    如何使SOLIDWORKS參數化設計軟件提升效率

    SOLIDWORKS參數化設計軟件-SolidKits.AutoWorks可實現智能選型、自動化修改產品屬性、產品參數、產品狀態、圖紙更新、重命名、并自動打包生成交付物,實現產品自動設計。大幅提升設計效率,減少錯誤、降低對人工經驗的要求和用人成本。
    的頭像 發表于 12-19 15:53 ?126次閱讀

    永磁同步電機效率提升方法

    提升永磁同步電機效率的方法可以從多個方面進行,以下是一些有效的方法: 優化電機設計 : 增加磁場的強度:通過增加永磁體的磁通密度和提高永磁體及鐵心的磁導率,可以有效提升電機的磁場強度,從而提高
    的頭像 發表于 11-22 10:13 ?286次閱讀

    高效生產秘訣:掌握提升SMT貼片效率的拼板設計技巧

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

    海外IP代理池:提升網絡訪問速度與效率的利器

    海外IP代理池無疑是提升網絡訪問速度與效率的利器,它通過提供位于海外的代理服務器,為用戶訪問國外網站和服務提供了便利。
    的頭像 發表于 11-14 07:29 ?240次閱讀

    如何提升EDA設計效率

    EDA(Electronic Design Automation,電子設計自動化)設計技術是現代電子工程領域的關鍵技術之一,提升EDA設計效率對于電子工程師和整個電子行業都至關重要。以下是一些提升
    的頭像 發表于 11-08 14:23 ?364次閱讀

    提升效率:RTC時鐘實用設置

    今天來給大家講解的是RTC時鐘實用性,提升絕對的效率
    的頭像 發表于 11-04 16:35 ?777次閱讀
    <b class='flag-5'>提升</b><b class='flag-5'>效率</b>:RTC時鐘實用設置

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

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

    住宅動態IP:提升網絡安全與效率

    住宅動態IP是指住宅用戶所使用的IP地址不是固定的,而是會定期自動更換。這種配置方式在提升網絡安全與效率方面發揮著重要作用。
    的頭像 發表于 10-21 07:55 ?132次閱讀

    大數據從業者必知必會的Hive SQL調優技巧

    不盡人意。本文針對Hive SQL的性能優化進行深入研究,提出了一系列可行的調優方案,并給出了相應的優化案例和優化前后的SQL代碼。通過合理的優化策略和技巧,能夠顯著提升Hive SQL的執行
    的頭像 發表于 09-24 13:30 ?238次閱讀

    ClickHouse內幕(3)基于索引的查詢優化

    ClickHouse索引采用唯一聚簇索引的方式,即Part內數據按照order by keys有序,在整個查詢計劃中,如果算子能夠有效利用輸入數據的有序性,對算子的執行性能將有巨大的提升。本文討論
    的頭像 發表于 06-11 10:46 ?1010次閱讀
    ClickHouse內幕(3)基于索引的<b class='flag-5'>查詢</b>優化

    “Spark+Hive”在DPU環境下的性能測評 | OLAP數據庫引擎選型白皮書(24版)DPU部分節選

    在奇點云2024年版《OLAP數據庫引擎選型白皮書》中,中科馭數聯合奇點云針對Spark+Hive這類大數據計算場景下的主力引擎,測評DPU環境下對比CPU環境下的性能提升效果。特此節選該章節內容,與大家共享。
    的頭像 發表于 05-30 16:09 ?516次閱讀
    “Spark+<b class='flag-5'>Hive</b>”在DPU環境下的性能測評 | OLAP數據庫引擎選型白皮書(24版)DPU部分節選

    光伏并網逆變器如何提升轉換效率

    提升光伏并網逆變器的轉換效率是光伏系統優化和提高經濟效益的重要途徑。
    的頭像 發表于 04-18 16:39 ?1167次閱讀

    AGV小車 | 提升倉儲物流運營效率的好幫手

    近幾年,由于人力成本的提高,各行各業加速采用智能化的物流設備替代人工,達到降低成本、提升效率的目的,而AGV自動導引車就是其中頗具代表性的設備,AGV因其作業的高效性在制造企業內得到了大量
    的頭像 發表于 04-16 18:30 ?941次閱讀
    AGV小車 | <b class='flag-5'>提升</b>倉儲物流運營<b class='flag-5'>效率</b>的好幫手

    SiC器件如何提升電動汽車的系統效率

    SiC器件可以提高電動汽車的充電模塊性能,包括提高頻率、降低損耗、縮小體積以及提升效率等。這有助于提升電動汽車的整體性能表現。
    的頭像 發表于 03-18 18:12 ?1577次閱讀
    SiC器件如何<b class='flag-5'>提升</b>電動汽車的系統<b class='flag-5'>效率</b>

    如何提升單片機開發技術?

    單片機開發是現代電子技術中的重要分支,其在各個領域都有著廣泛的應用。單片機開發技術的提升不僅可以提高工作效率,還可以提高工作質量和創新能力。那么,如何提升單片機開發技術呢? 一、加強基礎知識
    發表于 01-05 10:14
    主站蜘蛛池模板: 国产亚洲综合视频| 嫩草影院永久在线一二三四| 91精品国产入口| 在线观看成人3d动漫入口| 亚洲精品视频免费看| 午夜伦伦电影理论片大片| 色橹橹欧美在线观看视频高| 欧美无码专区| 全彩黄漫火影忍者纲手无遮挡| 免费视频国产| 墨西哥美女主播| 男人和女人全黄一级毛片| 麻豆精品无码久久久久久久久| 久久伊人电影| 美女被日出水| 女侠含泪巨臀迎合79| 欧美日韩亚洲中字二区| 全彩黄漫火影忍者纲手无遮挡| 日本伦子欲| 无码观看AAAAAAAA片| 亚洲AV久久久噜噜噜噜| 亚洲精品乱码久久久久久直播| 亚洲色图在线视频| 在线国产a不卡| 99久久精品免费精品国产| ai换脸在线全集观看| 超碰97 总站 中文字幕| 动漫H片在线观看播放免费| 久久国产成人午夜AV影院无码| 60老妇性xxxxhd| 亚洲大片免费观看| 美女图片131亚洲午夜| beeg日本老师| 亚洲高清国产拍精品影院| 亚洲精品AV无码永久无码| 亚洲天堂久久久| 2021精品高清卡1卡2卡3麻豆| 99久久久无码国产精品不卡按摩 | 韩国精品无码少妇在线观看网站| 精品国产一区二区三区久久影院| 久久这里只有精品视频e|