1.hive 的使用, 內外部表的區別,分區做用, UDF 和 Hive 優化
(1)hive 使用:倉庫、工具
(2)hive 內部表:加載數據到 hive 所在的 hdfs 目錄,刪除時,元數據和數據文件都刪除
外部表:不加載數據到 hive 所在的 hdfs 目錄,刪除時,只刪除表結構。
(3)分區做用:防止數據傾斜
(4)UDF 函數:用戶自定義的函數 (主要解決格式,計算問題 ),須要繼承 UDF 類
java 代碼實現
class TestUDFHive extends UDF {
public String evalute(String str){
try{
return "hello"+str
}catch(Exception e){
return str+"error"
}java
}面試
} 負載均衡
(5)sort by和order by之間的區別?
函數
使用order by會引起全局排序;工具
select * from baidu_click order by click desc;
使用 distribute和sort進行分組排序優化
select * from baidu_click distribute by product_line sort by click desc;
distribute by + sort by就是該替代方案,被distribute by設定的字段爲KEY,數據會被HASH分發到不一樣的reducer機器上,而後sort by會對同一個reducer機器上的每組數據進行局部排序。spa
sort by的排序發生在每一個reduce裏,order by和sort by之間的不一樣點是前者保證在全局進行排序,然後者僅保證在每一個reduce內排序,若是有超過1個reduce,sort by可能有部分結果有序。code
注意:它也許是混亂的做爲單獨列排序對於sort by和cluster by。不一樣點在於cluster by的分區列和sort by有多重reduce,reduce內的分區數據時一致的。 blog
(6)Hive 優化:看作 mapreduce 處理排序
排序優化: sort by 效率高於 order by。分區:使用靜態分區 (statu_date="20160516",location="beijin") ,每一個分區對應 hdfs 上的一個目錄,減小 job 和 task 數量:使用表連接操做,解決 groupby 數據傾斜問題:設置hive.groupby.skewindata=true ,那麼 hive 會自動負載均衡,小文件合併成大文件:錶鏈接操做,使用 UDF 或 UDAF 函數: