Impala是基於Hive的大數據實時分析查詢引擎,直接使用Hive的元數據庫Metadata,意味着impala元數據都存儲在Hive的metastore中。
Hive適合於長時間的批處理查詢分析,而Impala適合於實時交互式SQL查詢。
在impala中一條SQL語句先後經歷BeeswaxService.Query->TClientRequest->TExecRequest,最後把TExecRequest交由impala-coordinator分發給多個backend處理。
查詢語句:
show table status students;
describe students;
impala優化:
>explain sql; #查看執行計劃
>profile; #輸出底層信息計劃
>summary;#查看查詢時間及佔用內存
注意項:
1)Join的時候大表一定要放在左邊,因爲impala在廣播右側表,所以右側表會複製到需要右側表進行聯接的所有節點。
2)廣播連接(Broadcast joins) 是默認方式,右側的表被認爲比左側的表小,並且它的內容被髮送到查詢涉及到的其他節點上。替代的技術稱作分割連接(partitioned join) (與分區表無關),更適用於近乎相同大小的大型表的連接。使用這一技術,每一個表的部分內容被髮送到對應的其他節點,然後這些行的子集可以並行處理。廣播和分區連接的選擇仍然依賴於連接中所有表的可用的、使用 COMPUTE STATS 語句的統計信息。
impala配置項:
set DISABLE_UNSAFE_SPILLS=0/FALSE; #0(FALSE)內存運算瀕臨溢出時轉爲磁盤運算,1(TRUE)時,當內存溢出時直接報內存溢出“Memory limit exceeded”錯誤
set mem_limit=-1 #取消內存限制;
參考資料:
Impala和Hive的關係(詳解):https://www.cnblogs.com/zlslch/p/6785207.html
Impala原理及其調優:https://www.cnblogs.com/chenz/articles/3947147.html