<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        Hive優(yōu)化提示-如何寫好HQL

        來源:懂視網(wǎng) 責編:小采 時間:2020-11-09 12:53:01
        文檔

        Hive優(yōu)化提示-如何寫好HQL

        Hive優(yōu)化提示-如何寫好HQL:盡量將小表放在join的左邊,我們這邊使用的hive-0.12.0,所以是自動轉化的,既把小表自動裝入內(nèi)存,執(zhí)行map side join(性能好), 這 一、 Hive join優(yōu)化 1. 盡量將小表放在join的左邊,我們這邊使用的hive-0.12.0,所以是自動轉化的,既把小表自動
        推薦度:
        導讀Hive優(yōu)化提示-如何寫好HQL:盡量將小表放在join的左邊,我們這邊使用的hive-0.12.0,所以是自動轉化的,既把小表自動裝入內(nèi)存,執(zhí)行map side join(性能好), 這 一、 Hive join優(yōu)化 1. 盡量將小表放在join的左邊,我們這邊使用的hive-0.12.0,所以是自動轉化的,既把小表自動

        盡量將小表放在join的左邊,我們這邊使用的hive-0.12.0,所以是自動轉化的,既把小表自動裝入內(nèi)存,執(zhí)行map side join(性能好), 這

        一、 Hive join優(yōu)化

        1. 盡量將小表放在join的左邊,我們這邊使用的hive-0.12.0,所以是自動轉化的,既把小表自動裝入內(nèi)存,執(zhí)行map side join(性能好), 這是由參數(shù)hive.auto.convert.join=true 和hive.smalltable.filesize=25000000L)參數(shù)控制(默認是25M),如果表文件大小在25M左右,,可以適當調(diào)整此參數(shù),進行map side join,避免reduce side join。 也可以顯示聲明進行map join:特別適用于小表join大表的時候,SELECT /*+ MAPJOIN(b) */ a.key, a.value FROM a join b on a.key = b.key

        2. 注意帶表分區(qū)的join, 如:

        SELECT a.val, b.val FROM a LEFT OUTER JOIN b ON (a.key=b.key) WHERE a.dt='2014-08-07' AND b.dt='2014-08-07'

        因為hive是先join再where的,所以如果在b中找不到a表的記錄,b表中的所以列都會列出null,包括ds列,這樣left outer的查詢結果與where子句無關了,解決辦法:

        SELECT a.val, b.val FROM a LEFT OUTER JOIN b ON (a.key=b.key AND a.dt='2014-08-07' AND b.dt='2014-08-07'')

        3. 怎樣寫exist/in子句?

        Hive不支持where子句中的子查詢,SQL常用的exist in子句需要改寫。這一改寫相對簡單。考慮以下SQL查詢語句:

        SELECT a.key, a.value FROM a WHERE a.key in (SELECT b.key FROM B);

        可以改寫為

        SELECT a.key, a.value FROM a LEFT OUTER JOIN b ON (a.key = b.key) WHERE b.key <> NULL;

        一個更高效的實現(xiàn)是利用left semi join改寫為:

        SELECT a.key, a.val FROM a LEFT SEMI JOIN b on (a.key = b.key);

        4. Hive join只支持等值連接,不支持非等值連接。

        5. 合理的使用map join, 場合:小表A join 大表,

        基于Hadoop集群的Hive安裝

        Hive內(nèi)表和外表的區(qū)別

        Hadoop + Hive + Map +reduce 集群安裝部署

        Hive本地獨立模式安裝

        Hive學習之WordCount單詞統(tǒng)計

        Hive運行架構及配置部署

        二、 合理設置map與reduce的個數(shù)。

        1、如何合并小文件,減少map數(shù)?

        如果一個表中的map數(shù)特別多,可能是由于文件個數(shù)特別多,而且文件特別小照成的,可以進行如下操作,合并文件,:

        set mapred.max.split.size=100000000; // 100M

        set mapred.min.split.size.per.node=100000000;

        set mapred.min.split.size.per.rack=100000000;

        set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat; // 合并小文件

        2、如何適當?shù)脑黾觤ap數(shù)?

        如果表A只有一個文件,大小為120M,包含幾千萬記錄,可以考慮用多個map任務完成

        set mapred.reduce.tasks=10;

        create table a_1 as

        select * from a

        distribute by rand(123); //將a表的記錄,隨機的分散到包含10個文件的a_1表中

        3、hive如何確定reduce數(shù), reduce的個數(shù)基于以下參數(shù)設定:

        hive.exec.reducers.bytes.per.reducer(每個reduce任務處理的數(shù)據(jù)量,默認為1000^3=1G)

        hive.exec.reducers.max(每個任務最大的reduce數(shù),默認為999)

        計算reducer數(shù)的公式很簡單N=min(參數(shù)2,總輸入數(shù)據(jù)量/參數(shù)1)

        即,如果reduce的輸入(map的輸出)總大小不超過1G,那么只會有一個reduce任務;所以調(diào)整以下參數(shù):

        set hive.exec.reducers.bytes.per.reducer=500000000; (500M)

        set mapred.reduce.tasks = 15;

        三、 如果設計和使用bucket,

        Buckets 對指定列計算 hash,根據(jù) hash 值切分數(shù)據(jù),目的是為了并行,每一個 Bucket 對應一個文件。 將 user 列分散至 32 個 bucket, 首先對 user 列的值計算 hash,對應 hash 值為 0 的 HDFS 目錄為:/wh/pvs/dt=2014-08-01/ctry=US/part-00000; hash 值為 20 的 HDFS 目錄為:/wh/pvs/dt=2014-08-01/ctry=US/part-00020

        所用場合:對某一列進行分區(qū),比如對用戶ID進行分區(qū),例如:

        CREATE TABLE weblog (user_id INT, url STRING, source_ip STRING)

        > PARTITIONED BY (dt STRING)

        > CLUSTERED BY (user_id) INTO 96 BUCKETS; // 按照日期分區(qū)后,再按照user_id把日志放在96個籃子里。插入數(shù)據(jù)的時候:

        hive> SET hive.enforce.bucketing = true;

        hive> FROM raw_logs

        > INSERT OVERWRITE TABLE weblog

        > PARTITION (dt='2009-02-25')

        > SELECT user_id, url, source_ip WHERE dt='2009-02-25'

        四、 Count(distinct)

        當count distinct 的記錄非常多的時候,設置以下兩個參數(shù):

        hive> hive.map.aggr = true

        hive> set hive.groupby.skewindata=true;

        hive> select count (distinct gid) from cookie_label_summary where i_date=20130924;

        五、 Group by

        Group By的方法是在reduce做一些操作,這樣會導致兩個問題:

        map端聚合,提前一部分計算:hive.map.aggr = true 同時設置間隔:hive.groupby.mapaggr.checkinterval

        均衡處理:hive.groupby.skewindata

        這是針對數(shù)據(jù)傾斜的,設為ture的時候,任務的reduce會把原來一個job拆分成兩個,第一個的job中reduce處理處理不同的隨即分發(fā)過來的key的數(shù)據(jù),生成中間結果,再由最后一個綜合處理。

        六、 Order by, Sort by ,Dristribute by,Cluster By

        1、 order by VS Sort by: order by是在全局的排序,只用一個reduce去跑,所以在set hive.mapred.mode=strict 模式下,order by 必須limit,否則報錯。Sort by只保證同一個reduce下排序正確。

        2、 Distribute by with sort by: Distribute by 是按指定的列把map 輸出結果分配到reduce里。所以經(jīng)常和sort by 來實現(xiàn)對某一字段的相同值分配到同一個reduce排序。

        3、 Cluster by 實現(xiàn)了Distribute by+ sort by 的功能

        Hive 的詳細介紹:請點這里
        Hive 的下載地址:請點這里

        本文永久更新鏈接地址:

        linux

        聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        Hive優(yōu)化提示-如何寫好HQL

        Hive優(yōu)化提示-如何寫好HQL:盡量將小表放在join的左邊,我們這邊使用的hive-0.12.0,所以是自動轉化的,既把小表自動裝入內(nèi)存,執(zhí)行map side join(性能好), 這 一、 Hive join優(yōu)化 1. 盡量將小表放在join的左邊,我們這邊使用的hive-0.12.0,所以是自動轉化的,既把小表自動
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 精品一区二区三区高清免费观看| 国产成人亚洲精品蜜芽影院| 国产成人无码免费看片软件| 高清在线亚洲精品国产二区| 国产成人精品亚洲一区| 国产在线19禁免费观看| 欧洲精品码一区二区三区免费看| 亚洲成a人无码av波多野按摩| 免费人成又黄又爽的视频在线电影| 亚洲福利精品电影在线观看| 午夜在线免费视频| 亚洲愉拍99热成人精品热久久 | 亚洲av网址在线观看| a级毛片100部免费观看| 久久久无码精品亚洲日韩蜜臀浪潮 | 农村寡妇一级毛片免费看视频| 亚洲国产成人精品女人久久久| 日韩电影免费在线观看网址| 色噜噜亚洲精品中文字幕| 中国在线观看免费的www| 337p日本欧洲亚洲大胆精品555588| 国产精品视频免费观看| 亚洲欧美黑人猛交群| 亚洲人午夜射精精品日韩| 久久国产精品一区免费下载| 亚洲最大成人网色香蕉| 国产免费拔擦拔擦8x| 大地资源在线资源免费观看| 亚洲免费观看在线视频| 国产精品国产免费无码专区不卡 | 77777午夜亚洲| 亚洲一区二区三区免费| 久久免费国产视频| 亚洲午夜精品久久久久久app | 亚洲国产一区二区a毛片| 少妇高潮太爽了在线观看免费| 五级黄18以上免费看| 亚洲的天堂av无码| 免费一级特黄特色大片在线观看| 男人进去女人爽免费视频国产| 亚洲熟妇丰满xxxxx|