Impala 3.4的新功能和社區進展

Impala 3.4的新功能和社區進展

Impala社區在四月底發佈了3.4版本。這是時隔半年後的又一個新版本,也是最後一個3.x版本。之後將進入4.x時代,爲的是接受一系列 breaking changes,如刪除對過時操作系統(Centos6、Ubuntu14等)的支持、刪除對Sentry的支持、刪除對lzo的支持等。具體的 breaking changes 還在討論之中,感興趣的同學可以訂閱郵件列表參與討論。本文主要介紹 3.4 版本帶來的新功能以及新的提升,概括起來有這麼幾個方面:Result Spooling, Column Masking,Apache ORC, Apache Hudi。還有若干正在進展中的項目,也將在最後介紹。

Result Spooling

要解釋 Result Spooling 解決的問題,先要介紹下 Impala 的執行機制。Impala 的執行引擎遵從 volcano 模型設計,整個執行計劃樹流水線式地自上而下抽取數據,數據以batch的形式在operator間傳遞。當用戶獲取到第一行數據時,只代表第一個batch的計算完成了。雖然後續batch的計算還會異步的進行,但總有堆滿buffer的時候,這時所有執行實例就會停下來,直到用戶拉取下一個batch或者關閉查詢爲止。此時各個執行實例還會繼續佔用着內存資源,從而擠佔其它查詢的可用內存空間。

這個問題在支持分頁的客戶端(如HUE)裏比較常見,以往的解決辦法是設置 --idle_query_timeout,如果客戶端長時間不拉取數據,Impala coordinator 會主動關閉session,從而關閉查詢並釋放其佔用的內存資源。

Result Spooling 提供了另一個解決辦法:讓 coordinator 幫客戶端拉取並緩存查詢結果,然後關閉查詢、釋放內存資源。這個操作對客戶端是透明的,客戶端仍舊從 coordinator 拉取下一個 batch 的結果,不同的是 coordinator 直接從結果緩存中讀取並返回。相關的 query option 有:SPOOL_QUERY_RESULTS、MAX_RESULT_SPOOLING_MEM、MAX_SPILLED_RESULT_SPOOLING_MEM、DEFAULT_SPILLABLE_BUFFER_SIZE。

Ranger Integration

  • 支持 Ranger Column Masking Policy,包括 resource based 和 tag based 的 policy。 傳統的數據脫敏方式是通過對不同類型的用戶建立視圖(View)來實現,視圖數目多時維護成本很高。Ranger 提供了 column masking policy 來描述一列數據對不同用戶(組)的不同脫敏規則,從而不再需要建立視圖。Impala 從 3.4 版本開始支持 Column Masking,共享 Hive 的 Ranger policy。
  • 支持 Ranger 的 Object ownership 功能,即能識別 Ranger policy 中的 {OWNER} 字段.
  • 支持 Ranger 2.x

ORC 讀取方面的若干提升

  • 支持讀取 ORC 文件的 DATE 類型數據。
  • 支持以 ORC 文件的 schema 創建表:CREATE TABLE table_name LIKE ORC ‘/path/to/file’
  • 優化 ORC 文件的讀取,包括 code generation、物化時的向量化、字符串的內存分配等,測試單結點 TPC-H 性能提升 5% ~ 28%

集成 Apache Hudi

Apache Hudi 是一個開源的,支持插入、更新、刪除的增量數據湖處理框架,可助力構建企業級數據湖。Impala 3.4 開始支持讀取 Hudi Read Optimized 格式的表,具體實現見 IMPALA-8778.

其它

  • EventProcessor默認使用Refresh而不是Invalidate Metadata來處理Hive發生的事件(如AlterTable),以及更精確地檢測Impala集羣發起的事件(Self Event),相關修復:IMPALA-9101、IMPALA-9357、IMPALA-9095 等
  • 支持 db/table 級別的黑名單,黑名單上的 db/table 將對 Impala 用戶不可見 (IMPALA-8797)。默認用來屏蔽 sys、information_schema 這兩個 Hive 自帶的 db,也可以用來禁用一些 Impala 無法處理的大表。
  • 支持讀取 Avro 文件的 DATE 類型數據。
  • 支持 SQL:2016 標準 datetime 模式,即 CAST(… AS … FORMAT <template>) 語法裏的 template 部分支持更多關鍵字 (IMPALA-4018)
  • Admission Control 關於查詢內存估計的更新:IMPALA-7351
  • LocalCatalog相關更新:支持 global invalidation (IMPALA-7506)
  • Planner方面的若干修復:IMPALA-7027, IMPALA-7604, IMPALA-7784, IMPALA-8647, IMPALA-8718, IMPALA-9023, IMPALA-9025, IMPALA-9162, IMPALA-9358, IMPALA-9429

更多細節可查看:https://impala.apache.org/docs/changelog-3.4.html

社區進展

以下工作正在進行之中:

  • 執行實例支持多線程計算
    • Impala在IO層是多線程的,每個executor(impalad)多線程地從多個磁盤以及網絡讀取數據。但在計算層仍是每個fragment instance只有一個線程在執行。支持多線程計算能有效提高CPU bound類型查詢的執行效率,具體可追蹤 IMPALA-3902 下的 issue(登陸可見).
  • Hive3 ACID表的支持
    • 現在Impala支持Hive3中insert-only transactional表的讀寫,目前正在支持full ACID表的讀取操作,具體可追蹤 IMPALA-9042.
  • Query retry and fault tolerance (IMPALA-9124)
  • 更全面的嵌套類型支持,如允許嵌套類型出現在SelectList、函數參數/返回值等(IMPALA-9494, IMPALA-9518, IMPALA-9514, IMPALA-9516, IMPALA-9521)
  • Catalogd 細粒度元數據加載和緩存 (IMPALA-8937)
  • 支持 Kudu Bloom Filter (IMPALA-3741)
  • 支持 Iceberg (IMPALA-9621)
  • 支持 aarch64 (IMPALA-9376)
  • 實現 Robin Hood Hash Table (IMPALA-9434)
  • Impala-shell 支持 Python3 (IMPALA-3343)

歡迎感興趣的同學參與到社區的開發中來!具體步驟可參考:
https://cwiki.apache.org/confluence/display/IMPALA/Contributing+to+Impala

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章