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.專案要引用到的引數,可以專門...