Hive語言的使用,以及效能優化

2021-07-01 20:03:05 字數 2531 閱讀 3421

hive出現的原因:解決從乙個現有的資料基礎架構轉移到hadoop上,hive適合資料倉儲應用程式的,可以維護海量資料,而且可以對資料進行挖掘,形成報告。(查詢hadoop集群中的資料)

1:hive的查詢語言,用來查詢hadoop中的資料,hive是將大多數的查詢轉換為mapreduce任務

2:hiveql:

(1) 建立資料庫: create database financials

(2)  找出所有的資料庫: show databases like 'v.*'

(3)  刪除資料庫: hive是不允許刪除乙個包含有表的資料庫的,可以使用drop database if exist financials cascade

3: hive的udf函式

方式一:編寫乙個udf,需要繼承udf類並實現evaluate()函式,在查詢執行過程中,查詢中對應的每個應用到這個函式的地方都會對這個類進行例項化。

對於每行輸入都會呼叫到evaluate()函式,然後evaluate()處理後的值會返回給hive

如果想在hive中使用udf,那麼需要將對應的jar檔案加入到類路徑下,然後再建立乙個function

create temporary function 『函式名' as 『類名』 (是臨時的,查詢執行完,就不可以再使用了)

方式二:不變的udf函式

通過註冊的方式:將函式增加到hive內建函式中

registerudf("方法名","calss"); // 註冊函式方法

4: hive結合zookeeper(實現了高度可靠的分布式協調功能),支援鎖功能

5: hive和oozie整合 (oozie是乙個工作流引擎伺服器,將工作流的狀態和發起任務的客戶端分離開)

oozie通過workflow.xml檔案配置action任務,可以將多個action串起來

6:使用join:最好小表連大表,支援left outer join 和 right outer join

7:hive的顯示型別轉換,cast( x as bigint)轉為bigint 

cast (y as float)轉為float

8: hive的效能優化:基本思想(盡早過濾資料,減少job,解決資料傾斜)

具體列子:

1:select * from order_table limit 10; (使用*,減少job) limit 10 不走mapreduce

2:使用分割槽鍵卡,過濾作用,不走mapreduce

3: select a.val, b.val, c.valfrom a join b on (a.key= b.key1) join c on (c.key= b.key1 ) -> 1個job 使用相同的key來連線

4:優化輸入輸出

1、insert overwrite table tmp1

select ... from a where 條件1;

insert overwrite table tmp2

select ... from a where 條件2;

下面一次性載入資料 

2、from a

insert overwrite table tmp1

select ... where 條件1

insert overwrite table tmp2

select ... where 條件2

5:表連線時,一定要有關聯字段,並且

在join前過濾掉不需要的資料,表關聯時小表在前(提到的原因都是說因為小表可以先放到記憶體中,然後大表的每條記錄再去記憶體中檢測)把重複關聯鍵少的表放在

join

前面做關聯可以提高

join

的效率

6:union all (後者效能高於前者)

select * from

(select ci,c2,c3 from t1 group by c1,c2,c3

union all

select c1,c2,c3 from t2 group by c1,c2,c3

) t3;

2、select * from

(select * from t1

union all

select * from t2

) t3

group by c1,c2,c3; 

7:盡量避免使用distinct 進行排重,特別是大表操作,用group by 代替

8 :排序優化

9:修改表結構後,需要傳最新的指令碼,記得修改insert表的內容。

select語句的內容要測試。

location目錄下檔案

10:資料傾斜的原因:

join操作:

其中乙個表較小,

但是key集中,分發到某乙個或幾個reduce上的資料遠高於平均值

大表與大表,但是分桶的判斷欄位0值或空值過多,這些空值都由乙個reduce處理,灰常慢

group by,

group by維度過小,

某值的數量過多

count distinct 某特殊值過多

hive基本介紹以及效能優化

hive是建立在hadoop上的資料倉儲基礎架構。它提供了一系列的工具,可以用來進行資料提取轉化載入 etl 這是一種可以儲存 查詢和分析儲存在hadoop中大規模資料的機制。最大的有點就是定義了類sql語言,稱為hql。1.1 結構描述 hive的結構可以分為以下幾部分 1 使用者介面主要有三個 ...

讀寫鎖的使用以及降級優化

讀寫鎖的形式如下 readwritelock readwritelock newreentrantreadwritelock lock readlock readwritelock.readlock lock writelock readwritelock.writelock 1.讀讀共享 vola...

結構體使用以及函式優化

通過學習高博一起做rgbdslam系列,體會到乙個工程專案由簡單到複雜的過程,列出自己認為重要的地方 1.將一些相關的變數封裝到結構體中,歸類之後一是方便觀察,二是處理起來很有條理 2.將寫好,不經常改動的函式寫到新的檔案中,通過鏈結庫以及包含標頭檔案來實現呼叫函式 3.專案要引用到的引數,可以專門...