Hive 最常見的幾個面試題
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"
}
}
}
(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機器上的每組數據進行局部排序。
sort by的排序發生在每個reduce里,order by和sort by之間的不同點是前者保證在全局進行排序,而后者僅保證在每個reduce內排序,如果有超過1個reduce,sort by可能有部分結果有序。
注意:它也許是混亂的作為單獨列排序對於sort by和cluster by。不同點在於cluster by的分區列和sort by有多重reduce,reduce內的分區數據時一致的。
(6)Hive 優化:看做 mapreduce 處理
排序優化: sort by 效率高於 order by。分區:使用靜態分區 (statu_date="20160516",location="beijin") ,每個分區對應 hdfs 上的一個目錄,減少 job 和 task 數量:使用表鏈接操作,解決 groupby 數據傾斜問題:設置hive.groupby.skewindata=true ,那么 hive 會自動負載均衡,小文件合並成大文件:表連接操作,使用 UDF 或 UDAF 函數:
面試題有點多,過幾天再來更新