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

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

    文章

    7335

    瀏覽量

    94770
  • hive
    +關注

    關注

    0

    文章

    12

    瀏覽量

    4134

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    京東訂單API:批量訂單處理,效率倍增!

    ,特別是其 批量處理能力 ,為我們提供了一種強大的解決方案,能夠顯著提升訂單管理效率。 一、 單條處理 vs. 批量處理:效率差異顯著 想象一下,你的系統需要查詢1000個訂單的狀態
    的頭像 發表于 01-26 14:14 ?239次閱讀
    京東訂單API:批量訂單處理,<b class='flag-5'>效率</b>倍增!

    AGV機器人如何提升搬運效率

    AGV智能搬運車正顛覆傳統物流模式,24小時精準作業、多車協同、自主避障,將搬運效率提升300%以上,成為智能制造的核心引擎。
    的頭像 發表于 01-15 16:48 ?310次閱讀
    AGV機器人如何<b class='flag-5'>提升</b>搬運<b class='flag-5'>效率</b>?

    公網訪問開源 Stirling-PDF 工具,提升辦公效率

    本文介紹了如何在Windows本地部署Stirling-PDF服務器,并通過內網穿透實現外網訪問,提升PDF處理效率
    的頭像 發表于 12-09 14:25 ?500次閱讀
    公網訪問開源 Stirling-PDF 工具,<b class='flag-5'>提升</b>辦公<b class='flag-5'>效率</b>

    信維低損耗MLCC電容,提升電路效率優選

    信維低損耗MLCC電容在提升電路效率方面表現優異,其核心優勢體現在 低損耗特性、高頻響應能力、小型化設計、高可靠性 以及 廣泛的應用適配性 ,具體分析如下: 一、低損耗特性直接提升電路效率
    的頭像 發表于 11-24 16:30 ?875次閱讀

    斑馬技術助力PouchNATION提升大型活動管理效率

    斑馬技術公司宣布 PouchNATION 通過采用斑馬技術的高性能掃描解決方案,顯著提升其大型活動的管理效率
    的頭像 發表于 11-04 16:15 ?704次閱讀

    三坐標如何實現測量效率提升

    精密制造的產線節奏日益加快,傳統三坐標測量機面臨著“要么放慢速度保精度,要么犧牲精度換速度”的困境制約著生產效率提升。MizarGold三坐標測量機通過材料創新與傳動優化,實現了測量速度快的同時不
    的頭像 發表于 09-11 16:47 ?1494次閱讀
    三坐標如何實現測量<b class='flag-5'>效率</b>的<b class='flag-5'>提升</b>?

    如何評估通信協議優化對數據傳輸效率提升效果?

    評估通信協議優化對數據傳輸效率提升效果,核心邏輯是 “控制變量 + 多維度量化對比”—— 即通過定義明確的評估目標、構建一致的測試環境、選取關鍵效率指標,對比優化前后的協議表現,最終驗證優化是否達到預期(如降低延遲、
    的頭像 發表于 08-29 17:52 ?1195次閱讀

    電驅動系統EMC測試整改:AI仿真技術如何提升效率

    深圳南柯電子|電驅動系統EMC測試整改:AI仿真技術如何提升效率
    的頭像 發表于 08-25 11:01 ?822次閱讀

    同步整流MOSFET的設計要點與效率提升技巧

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

    全球各大品牌利用NVIDIA AI技術提升運營效率

    歐萊雅、LVMH 集團和雀巢利用 NVIDIA 加速的智能體 AI 和物理 AI,大幅提升產品設計、營銷及物流等方面的運營效率
    的頭像 發表于 06-19 14:36 ?1204次閱讀

    DevEco Studio AI輔助開發工具兩大升級功能 鴻蒙應用開發效率提升

    隨著搭載HarmonyOS 5的Pura X發布,鴻蒙生態進入快車道,各應用正在加速適配開發,越來越多開發者加入到鴻蒙應用開發浪潮中。為提升鴻蒙應用開發效率,華為前不久上線了首款開發
    發表于 04-18 14:43

    分布式存儲數據恢復—虛擬機上hbase和hive數據庫數據恢復案例

    分布式存儲數據恢復環境: 16臺某品牌R730xd服務器節點,每臺服務器節點上有數臺虛擬機。 虛擬機上部署Hbase和Hive數據庫。 分布式存儲故障: 數據庫底層文件被誤刪除,數據庫不能使用。要求恢復hbase和hive數據庫。
    的頭像 發表于 04-17 11:05 ?722次閱讀

    新能源時代,圓柱電池生產設備如何提升生產效率

    優化生產流程是提升圓柱電池生產效率的基礎。首先,需要對現有生產流程進行多方位梳理,找出瓶頸環節,并進行針對性改進。例如,通過精簡生產環節,減少不必要的物料搬運和等待時間,可以有效提升生產效率
    的頭像 發表于 04-08 11:51 ?729次閱讀

    安徽京準:NTP時間同步服務器提升石油管道監控效率

    安徽京準:NTP時間同步服務器提升石油管道監控效率
    的頭像 發表于 04-08 09:37 ?711次閱讀
    安徽京準:NTP時間同步服務器<b class='flag-5'>提升</b>石油管道監控<b class='flag-5'>效率</b>

    提升生產效率的關鍵: Ethercat轉TCP/IP智能通信網關

    提升生產效率的關鍵: ethercat轉TCPIP智能通信網關
    的頭像 發表于 03-24 16:41 ?747次閱讀
    <b class='flag-5'>提升</b>生產<b class='flag-5'>效率</b>的關鍵: Ethercat轉TCP/IP智能通信網關