Impala 技術點梳理

 

 

 

1.優勢

1.1  快!

主節點生成執行計劃樹並分發執行計劃至各節點並行執行的拉式獲取數據(MR:推式獲取數據)shell

計算的中間結果不寫入磁盤數據庫

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 CDH四、CDH5.1開始支持的功能,以增長了磁盤IO,延長了運算時間爲代價,避免了內存溢出的問題。code

開啓方式:blog

impalashell中執行排序

setDISABLE_UNSAFE_SPILLS=0

內存

setDISABLE_UNSAFE_SPILLS=FALSE

賦值爲1或TRUE則是關閉資源

注意:該功能也是有限制的:

  1. 不是全部的SQL語句都能觸發,例如union關鍵字仍是會觸發內存溢出錯誤;

  2. 各個節點的內存峯值限制不能太低,低於運算所需分配給各個節點的最小內存;

  3. 運算explain輸出的各個節點預估內存不能過度高於各個節點的實際物理內存;

  4. 當觸發「Spill to Disk」功能時有其餘併發查詢,仍會觸發內存溢出錯誤;

  5. 對磁盤的空間有必定的要求,磁盤運算的數據會寫入到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,對應的執行計劃信息愈來愈詳細。

相關文章
相關標籤/搜索