Hive效能優化簡介 (順便介紹了效能工具--ANALYZE)
ANALYZE關鍵字可以收集數值統計資訊。
加速查詢,直接從統計資訊中拿,而不會再啟動mapreduce去查詢。
用desc命令去查統計資訊。
Hive效能優化包含以下點:
partition table 這是最好的優化,比如用年月日,部門
聯合查詢,可以先按xx做分割槽,再按別的做分割槽
bucket table
經常被join連線查詢的這種column上建立bucket
這才能提高查詢效率
index
每當資料更新時,也要去更新索引,所以維護成本也不小。
實際用的比較少。
幾種好用的資料型別,
orc ,parquet等,都是基於列的,所以查詢效能非常高。
(資料過濾等經常用)
資料壓縮
第一,可以減少很多空間。
第二,資料shuffle過程中傳輸速度也會變快。
但是壓縮了也要解壓,所以也不能壓縮的太狠。
有專門的演算法叫snappy 用於快速壓縮,壓縮比適中。
data localization
處理引擎放到另一個叢集。。。
資料和演算法儘量不分離,
比如說我hadoop我把三個拷貝增加到六個拷貝。
(這點不太懂)
Avoid small files
為什麼使用動態分割槽會對叢集產生不好的影響(產生小檔案)?(間接問法)
避免存放太多小檔案,原因如下:
1. 因為每個檔案都會產生元資料存在namenode的記憶體。
namenode資源被過多消耗,效能會受到很大影響。
2. 因為block size是比較大的,檔案雖然小,但是小檔案增大後佔的blocksize會越來越多。
解決方法:
1.多進行合併,有一些自動合併功能。沒有用hive時,寫第三方mapreduce job來合併。
2.多生成大檔案的資料來源再發給hadoop
Hive
可以用TEZ engine來代替mapreduce,它本質是mapreduce的最佳實踐。
效能很高。
使用Hive LLAP
Hive2.0後 LLAP優化,在後臺啟動一個長久的執行緒,不會為每次查詢再啟動。
資料通過快取來獲得,而不是所有結果都直接去查詢。
Hive transaction
不必要就不要建立事務,
很消耗資源
除非你有特殊需求。