1. 程式人生 > >Hive 的優化

Hive 的優化

1、group by   實現 distinct
原始語句: select count(distinct ip)  from (select ip as ip from comprehensive.f_client_boot_daily where year="2013" and month="10"   union all  select pub_ip as ip from f_app_boot_daily where year="2013" and month="10"  union all  select ip as ip from format_log.format_pv1 where year="2013" and month="10" and url_first_id=1  ) d
原因: select ip as ip from comprehensive.f_client_boot_daily where year="2013" and month="10"這個語句篩選出來的資料約有10億條,select pub_ip as ip from f_app_boot_daily where year="2013" and month="10"約有10億條條,select ip as ip from format_log.format_pv1 where year="2013" and month="10" and url_first_id=1 篩選出來的資料約有10億條,總的資料量大約30億條。這麼大的資料量,使用disticnt函式,所有的資料只會shuffle到一個reducer上,導致reducer資料傾斜嚴重
優化後的語句: select count(*)  from  (select ip  from (select ip as ip from comprehensive.f_client_boot_daily where year="2013" and month="10"  union all  select pub_ip as ip from f_app_boot_daily where year="2013" and month="10"  union all  select ip as ip from format_log.format_pv1 where year="2013" and month="10" and url_first_id=1 ) d  group by ip ) b
2、 join 優化:
生 成一個job: 多表連線,如果多個表中每個表都使用同一個列進行連線(出現在JOIN子句中),則只會生成一個MR Job,例如:
1
SELECT a.val, b.val, c.val FROM JOIN ON (a.key = b.key1) JOIN ON(c.key = b.key1)

三個表a、b、c都分別使用了同一個欄位進行連線,亦即同一個欄位同時出現在兩個JOIN子句中,從而只生成一個MR Job。
生成多個job:

多表連線,如果多表中,其中存在一個表使用了至少2個欄位進行連線(同一個表的至少2個列出現在JOIN子句中),則會至少生成2個MR Job,例如:

1 SELECT a.val, b.val, c.val FROM JOIN ON (a.key = b.key1) JOIN ON(c.key = b.key2)

三個表基於2個欄位進行連線,這兩個欄位b.key1和b.key2同時出現在b表中。連線的過程是這樣的:首先a和b表基於a.key和b.key1進行連線,對應著第一個MR Job;表a和b連線的結果,再和c進行連線,對應著第二個MR Job。 3、表連線順序優化: 多表連線,資料量大的表放後面。
1
SELECT a.val, b.val, c.val FROM JOIN ON (a.key = b.key1) JOIN ON(c.key = b.key1)

這個JOIN語句,會生成一個MR Job,在選擇JOIN順序的時候,資料量相比應該是b < c,表a和b基於a.key = b.key1進行連線,得到的結果(基於a和b進行連線的Key)會在Reducer上快取在buffer中,在與c進行連線時,從buffer中讀取Key(a.key=b.key1)來與表c的c.key進行連線。
另外,也可以通過給出一些Hint資訊來啟發JOIN操作,這指定了將哪個表作為大表,從而得到優化。例如:

1 SELECT /*+ STREAMTABLE(a) */ a.val, b.val, c.val FROM JOIN ON(a.key = b.key1) JOIN ON (c.key = b.key1)
上述JOIN語句中,a表被視為大表,則首先會對錶b和c進行JOIN,然後再將得到的結果與表a進行JOIN。
4、 基於條件的LEFT OUTER JOIN優化

左連線時,左表中出現的JOIN欄位都保留,右表沒有連線上的都為空。對於帶WHERE條件的JOIN語句,例如:

1 SELECT a.val, b.val FROM LEFT OUTER JOIN ON (a.key=b.key)
2 WHERE a.ds='2009-07-07' AND b.ds='2009-07-07'

執行順序是,首先完成2表JOIN,然後再通過WHERE條件進行過濾,這樣在JOIN過程中可能會輸出大量結果,再對這些結果進行過濾,比較耗時。可以進行優化,將WHERE條件放在ON後,例如:

1 SELECT a.val, b.val FROM LEFT OUTER JOIN b
2 ON (a.key=b.key AND b.ds='2009-07-07' AND a.ds='2009-07-07')
這樣,在JOIN的過程中,就對不滿足條件的記錄進行了預先過濾,可能會有更好的表現。
5、左半連線

左半連線(LEFT SEMI JOIN)

左半連線實現了類似IN/EXISTS的查詢語義,使用關係資料庫子查詢的方式實現查詢SQL,例如:

1 SELECT a.key, a.value FROM WHERE a.key IN (SELECT b.key FROM b);

使用Hive對應於如下語句:

1 SELECT a.key, a.val FROM LEFT SEMI JOIN ON (a.key = b.key)

需要注意的是,在LEFT SEMI JOIN中,表b只能出現在ON子句後面,不能夠出現在SELECT和WHERE子句中。
關於子查詢,這裡提一下,Hive支援情況如下:

  • 在0.12版本,只支援FROM子句中的子查詢;
  • 在0.13版本,也支援WHERE子句中的子查詢。

6、

Map Side JOIN

Map Side JOIN優化的出發點是,Map任務輸出後,不需要將資料拷貝到Reducer節點,降低的資料在網路節點之間傳輸的開銷。
多表連線,如果只有一個表比較大,其他表都很小,則JOIN操作會轉換成一個只包含Map的Job,例如:

1 SELECT /*+ MAPJOIN(b) */ a.

相關推薦

Hive優化

size 快的 而是 方法 cpu 失敗 als 參數設置 專業 一、map階段優化 map端: spill(100M,80%)-->meger(壓縮)參數:io.sort.mb(default100)當map task開始運算,並產生中間數據時,其產生的中間結果並

hive優化總結

限制 上層 關註 rom targe microsoft 保留 讀數 點擊 一、表設計 合理分表 合理設計表分區,靜態分區、動態分區 二、掃描相關 1、謂詞下推(Predicate Push Down) 2、列裁剪(Column Prunin

hive優化之——控制hive任務中的map數和reduce數

計算 2-0 問題 tdi title ask hadoop 發現 http 一、 控制hive任務中的map數: 1. 通常情況下,作業會通過input的目錄產生一個或者多個map任務。主要的決定因素有: input的文件總個數,input的文件大小,集群設

Hadoop生態圈-hive優化手段-作業和查詢優化

spa 轉載 -s 責任 font 版權 pan 法律 ont                   Hadoop生態圈-hive優化手段-作業和查詢優化                                             作者:尹正傑 版權聲明:原創作品

hive優化分享

set 帶來 IT sql join 系統 負載 註意 並發 粘貼一下我在部門中的一次hive優化的分享。 簡述 hive構建在hadoop基礎上,利用分布式存儲,通過mr引擎實現對大數據的計算。MR會頻繁地讀寫磁盤而且MR任務的啟動成本很高。對於hive優化顯得尤為重

hive優化,控制map、reduce數量

行合並 答案 只有一個 mapred hdfs yarn str 浪費 邏輯 一、調整hive作業中的map數 1.通常情況下,作業會通過input的目錄產生一個或者多個map任務。主要的決定因素有: input的文件總個數,input的文件大小,集群設置的文件塊大小(目前

hive優化,開啟壓縮功能

調整 配置 emp mapr org format compress 數據傳輸 span 1、開啟hive作業mapreduce任務中間壓縮功能: 對於數據進行壓縮可以減少job中map和reduce task間的數據傳輸量。對於中間數據壓縮,選擇一個低cpu開銷編/解碼器

hive優化過頭出問題 ,可以使用一下方式

set mapred.reduce.tasks=-1; set hive.exec.reducers.max=160; set hive.auto.convert.join=true; set hive.exec.parallel=true; set hive.exec.parallel.threa

大資料(二十三):hive優化、表優化

一、Fetch抓取         Fetch抓取是指,Hive中對某些情況的查詢可以不必使用MapReduce計算。例如,select * from employees;在這種情況下,Hive可以簡單讀取employee對應的儲存目錄

hive優化(1)

Hive在map端存在三個配置引數:set mapred.max.split.size=256000000; set mapred.min.split.size.per.node=256000000; set mapred.min.split.size.per.rack=256000000;

一起學Hive——總結常用的Hive優化技巧

今天總結本人在使用Hive過程中的一些優化技巧,希望給大家帶來幫助。Hive優化最體現程式設計師的技術能力,面試官在面試時最喜歡問的就是Hive的優化技巧。 技巧1.控制reducer數量 下面的內容是我們每次在hive命令列執行SQL時都會打印出來的內容: In order to change the

Hive優化之謂詞下推

Hive優化之謂詞下推 解釋 Hive謂詞下推(Predicate pushdown) 關係型資料庫借鑑而來,關係型資料中謂詞下推到外部資料庫用以減少資料傳輸 基本思想:儘可能早的處理表達式 屬於邏輯優化,優化器將謂詞過濾下推到資料來源,使物理執行跳過無關資料 引數開啟設定:hive.

【圖文詳細 】Hive 優化常用手段

1、好的模型設計事半功倍 2、解決資料傾斜問題 3、減少 job 數 4、設定合理的 MapReduce 的 task 數,能有效提升效能。(比如,10w+級別的計算,用 160個 reduce,那是相當的浪費,1 個足夠)  5、瞭解資料分佈,自己動手解決資料傾斜問題

hive優化心得

limit 限制調整 – 因為使用 limit 語句時候,是先執行整個查詢語句,然後再返回部分結果的 set hive.limit.optimize.enable=true; set hive.limit.row.max.size=10000; set hive.limit.op

hive優化-count(distinct)

問題描述 COUNT(DISTINCT xxx)在hive中很容易造成資料傾斜。針對這一情況,網上已有很多優化方法,這裡不再贅述。 但有時,“資料傾斜”又幾乎是必然

Hive解決資料傾斜問題及Hive優化

資料傾斜概述 簡單來說資料傾斜就是資料的key的分化嚴重不均,造成一部分資料很多,一部分資料很少的情況。舉個word count的入門例子,在map階段形成了(“hello”,1)的形式,然後在reduce階段進行value統計,算出"hello"出現的次數,假設word count的文字大

Hive優化總結(union all)

優化時,把hive sql當做map reduce程式來讀,會有意想不到的驚喜。 理解hadoop的核心能力,是hive優化的根本。這是這一年來,專案組所有成員寶貴的經驗總結。 長期觀察hadoop處理資料的過程,有幾個顯著的特徵: 1.不怕資料多,就怕資料傾斜

hive優化大全-一篇就夠了

1.概述   在工作中總結Hive的常用優化手段和在工作中使用Hive出現的問題。下面開始本篇文章的優化介紹。 2.介紹  首先,我們來看看Hadoop的計算框架特性,在此特性下會衍生哪些問題? 資料量大不是問題,資料傾斜是個問題。 jobs數比較多的作業執行效率相

Hive 優化引數

HIVE優化引數 hive> set; _hive.hdfs.session.path=/tmp/hive/root/bd4f450f-2f3f-460d-8539-5ee573701e59 _hive.local.session.path=/tmp/root/bd

Hive優化的十條詳細策略(下)

繼續我們前面地內容: 上篇:https://blog.csdn.net/Forever_ck/article/details/85777938 中篇:https://blog.csdn.net/Forever_ck/article/details/85780280 五、並行執行 Hive 會