1.優點
1.1 快!
主節點生成執行計划樹並分發執行計划至各節點並行執行的拉式獲取數據(MR:推式獲取數據)
計算的中間結果不寫入磁盤
1.2 便利
提供SQL語義,可以方便的進行復雜的數據分析任務
2.缺點
2.1 啃內存
對於內存的依賴過於嚴重,內存溢出直接導致技術任務的失敗
2.2 SQL支持度低
不支持UDF,不支持UPDATE/DELTE操作,不支持同一SELECT中多個DISTINCT
3.內存優化
3.1 SQLOperations that Spill to Disk
即在內存不足時將數據存入磁盤進行計算。這是在Impala 1.4 for CDH4、CDH5.1開始支持的功能,以增加了磁盤IO,延長了運算時間為代價,避免了內存溢出的問題。
開啟方式:
impalashell中執行
setDISABLE_UNSAFE_SPILLS=0
或
setDISABLE_UNSAFE_SPILLS=FALSE
賦值為1或TRUE則是關閉
注意:該功能也是有限制的:
-
不是所有的SQL語句都能觸發,例如union關鍵字還是會觸發內存溢出錯誤;
-
各個節點的內存峰值限制不能過低,低於運算所需分配給各個節點的最小內存;
-
運算explain輸出的各個節點預估內存不能過分高於各個節點的實際物理內存;
-
當觸發“Spill to Disk”功能時有其他並發查詢,仍會觸發內存溢出錯誤;
-
對磁盤的空間有一定的要求,磁盤運算的數據會寫入到impala各個節點的臨時目錄下,增加了磁盤I/O,並且會引發不可控制的磁盤占用。
所以,這個功能不是內存優化的首選方案
3.2 SQL優化
1.Compute Stats
COMPUTE STATS 是統計表的結構以及數據信息(表、分區、列的數據量和數據分布信息)並存儲在到數據庫中,集群根據統計信息優化數據分析操作。
看似只是Impala中一條獲取表的統計信息的簡單語句,但在整個分析任務調度過程中卻起着相當重要的作用。該語句獲取的統計信息不僅在Impala對JOIN、GROUP BY、ORDER BY、UNION、DISTINCT等資源高消耗的查詢進行優化時會使用到,而且對HBase的表也同樣起作用。
使用:
compute STATS [table_name]
查看統計結果
SHOW TABLE STATS [table_name]
2.執行計划 (Explain)
通過在SQL語句前面加上 explain 執行,並就可以查看到該SQL的具體執行計划情況(實際上並未真正執行)
執行計划是從底層顯示Impala如何讀取數據,如何在各節點之間協調工作,組合並傳輸中間結果,並獲得最終結果集的全過程。
執行計划可以提供給我們的幫助:
(1)通過讀取的數據量,我們可以判斷分區策略是否有效,並結合集群大小預估讀取這些數據需要的實際等。
(2)可以看到執行過程中聚合、排序、統計函數、交互的順序及具體執行細節,可以從更高級別看到中間結果在不同節點間的流向。
(3)我們可以看到操作是否被Impala不同的節點並行執行,以及各節點所需內存預估值。
(4)通過配置EXPLAIN_LEVEL參數,可以了解到更詳細的輸出信息。取值從0~3,對應的執行計划信息越來越詳細。