Apache Impala 4.0 釋出了!
Apache Impala is the open source, native analytic database for Apache Hadoop.
歷經15個月,Apache Impala 4.0終於釋出了!本次釋出一共包含700多個JIRA,本文將帶大家快速瞭解4.0的主要改動,參考自社群Release Notes:http://impala.apache.org/docs/release-notes-4.0.html
非相容性改動
大版本一般會有非相容性的改動,主要是拋棄掉一些歷史負擔,讓整個程式碼庫更簡潔更易於維護。本次4.0帶來的非相容性改動有:
不再支援Hive 2.x
不再支援Sentry
由於Sentry專案已停止更新,從Impala-4.0開始,Impala的授權只支援Ranger。
不再支援Impala-lzo
由於LZO是GPL協議開源的,跟Impala的Apache協議不相容。Impala的LZO支援一直是獨立出來放在另一個程式碼庫(Impala-lzo)中的。但這塊跟Impala程式碼耦合得很深,很容易因為版本不匹配而出問題。考慮到LZO在業界使用不多,並且有其它的壓縮演算法可替代,Impala 4.0刪除了對LZO的支援以及對Impala-lzo的依賴。
CPU指令集的最低要求從SSSE3提升為AVX
實際上最低要求是AVX2,但如果CPU只支援AVX的話也可以,啟動引數要加上 --enablelegacyavx_support。
最後還有幾個應該沒怎麼被使用過的功能調整,影響應該小很多:
不支援沒有日期的Timestamp資料 (IMPALA-9531)
"||" 操作符在左分支是String型別時表示字串的拼接(concat)操作。在這之前,"||"只表示Bool型別的OR操作。(IMPALA-452)
不支援HAVING語句塊裡使用1、2這樣的數字下標 (IMPALA-7844)
新功能
所有operator支援多執行緒加速
MT_DOP查詢選項可以設定多執行緒執行的並行度。預設情況下一個plan fragment在一臺機器上只會有一個例項(執行緒),設定MT_DOP後可以指定並行的例項數目,以加速cpu-bound的查詢。
在4.0之前只有scan和aggregate完全支援,並在執行Parquet表的compute stats時預設設定MT_DOP=4。
在4.0之後,任何型別的查詢都可以設定MT_DOP來指定fragment instance在一臺機器上的參考並行度。
新的profile格式 (profile-v2)
Impala profile裡其實有大量的冗餘,比如當fragment instance數目多時,同樣的counter key字串會被重複多次。現有的profile在大叢集啟用MT_DOP>1時會佔用coordinator大量的記憶體空間。
4.0帶來了一種新的更緊湊的profile格式,以聚合的方式顯示各種counter的值,具體見 IMPALA-9378。這個功能雖然打著experimental(實驗性)的標記,但其實只差相關上下游系統如CM、WXM的集成了。
在啟動引數里加 --gen_experimental_profile=true 來啟用
支援所有TPC-DS 99個查詢的語法,查詢不再需要重寫就可以在Impala上執行。新增的語法主要有
GroupBy語句裡支援 ROLLUP、CUBE 和 GROUPING SETS (IMPALA-7204)
SelectList中支援非關聯子查詢 (IMPALA-8954)
支援 INTERSET 和 EXCEPT 集合操作 (IMPALA-9943、IMPALA-4974)
透明的查詢重試 (IMPALA-9124)
因節點故障失敗的查詢可以被coordinator透明地重試,可用查詢選項 retry_failed_queries 來啟用。
支援按Z-Order寫入資料 (IMPALA-8755)
建表時可以指定按Z-Order排序的列,用Impala寫入資料時就會以Z-Order排序。
支援非同步Codegen (IMPALA-5444)
執行時程式碼生成(Codegen)能優化執行效率,但會帶來額外的執行時編譯時間。如果查詢本身執行時間就很短,開啟Codegen反而會增加耗時。Impala 4.0引入了非同步Codegen的功能,當Codegen未完成時使用原函式,Codegen完成後無縫切換成優化後的函式程式碼。
該功能用查詢選項 ASYNC_CODEGEN 來啟用。
支援讀取Hive full-ACID ORC表的資料 (IMPALA-9042)
Hive3開始支援事務型別的表,在4.0之前,Impala只能讀取insert-only的事務表。Impala-4.0開始支援讀取完整事務功能的表(Hive當前只支援ORC格式)。
基於Apache DataSketches支援了更多的函式 (IMPALA-9593, IMPALA-10281, IMPALA-10439)
可以基於這些函式建立中間資料的聚合表,供需要估算count-distinct、quantile之類的查詢使用來加速。
支援Apache Iceberg (IMPALA-10149)
部分功能還處於實驗階段,語法可能會改,如建表語句中partition的定義。詳見社群dev郵件列表的討論。
支援溢寫到S3 (IMPALA-9867)
Impala在記憶體不足時會溢寫資料到本地磁碟(spill to disk)。從4.0開始,Impala支援溢寫到遠端的S3儲存。該功能在雲上部署Impala時特別有用,因為雲上例項的本地儲存空間可能很小。
提供了docker叢集供快速試用 (IMPALA-9793)
支援aarch64 (ARM)平臺 (IMPALA-9376)
支援更多的儲存,如Ozone、GCS(Google雲端儲存)等
鑑權和授權方面的新功能
支援與Apache Knox的整合
支援SAML(SSO)認證
更多的LDAP功能 (IMPALA-2563, IMPALA-10161)
支援Ranger row-filtering (IMPALA-9234)
支援Ranger上基於role的授權 (IMPALA-10211)
支援Kudu表的owner功能 (IMPALA-9990)
compute incremental stats支援只統計指定列的資訊 (IMPALA-10435)
關於 ndv() 函式的新功能
提供新引數指定精度 (IMPALA-2658)
提供查詢選項 DEFAULT_NDV_SCALE 以設定 ndv() 的預設精度 (IMPALA-10445)
更多功能無法一一列舉,請參見Change Log: http://impala.apache.org/docs/changelog-4.0.html
新提升
Planner/Optimizer/效能
rank()相關優化,如rank()的謂詞下推(IMPALA-2783),新加TopN operator以優化帶limit的rank計算 (IMPALA-9979)等。
支援範圍謂詞(如 BETWEEN)相關的常量傳播 (IMPALA-10064)
優化只涉及分割槽列的查詢 (IMPALA-8834)
Parquet表的runtime filter新增min-max filter (IMPALA-10325)。在這之前,min-max runtime filter只用在kudu表中,Parquet等其它表只有bloom filter形式的runtime filter。
元資料
Catalogd元資料廣播時跳過鎖定(即正在更新/載入)的表 (IMPALA-6671)
在這之前,元資料廣播可能被大表上的元資料更新(如refresh、recover partition、compute stats等)卡住,其它無關查詢可能因為等待元資料廣播也被卡住。Impala 4.0開始,元資料廣播只會在這種鎖定的大表上等待固定的時間,超時則跳過採集其它的元資料。具體配置見JIRA。
Partition級別的元資料廣播 (IMPALA-3127)
Impala的元資料有兩種模式:傳統模式中每個coordinator同步catalogd的元資料,LocalCatalog模式中每個coordinator按需快取元資料,且不再需要全量的元資料廣播。
在4.0之前,傳統模式中元資料以表級別廣播。即使只有一個分割槽有改動,整個表的元資料也會被廣播。Impala 4.0開始,元資料以分割槽級別廣播。這將極大降低廣播大表元資料時array超過2GB引起JVM OOM的可能。注:DDL/DML RPC任以表級別返回元資料,將在 IMPALA-9937 中解決。但社群的重點會放在 LocalCatalog 模式。
在4.0之前,當一個表被更新時,LocalCatalog模式中的coordinator會把其所有分割槽元資料都廢棄掉。Impala 4.0開始,只有更新的分割槽元資料會被廢棄。
LocalCatalog模式中優化了Partition元資料的記憶體表示 (IMPALA-7501)
LocalCatalog模式中的元資料快取將佔用更少的記憶體,快取的效能也有所提升。
Kudu整合
支援下推bloom filter形式的runtime filter到Kudu表中 (IMPALA-3741)
在Kudu表中支援 Timestamp 和 Date 型別的 bloom filter (IMPALA-9691)
支援 Date 型別的 min-max filter (IMPALA-9294)
下推到Kudu中的謂詞涉及到的列可以不被物化(如果查詢其它部分不需要用到) (IMPALA-10406)
溢寫(Spilling)
支援溢寫資料前進行壓縮 (IMPALA-3766)
支援限制preaggregate階段的記憶體使用,從而為merge aggregate節省記憶體空間,該功能用查詢選項 PREAGGBYTESLIMIT 設定 (IMPALA-9530)
執行時程式碼生成(Codegen)
新增排序中部分關鍵程式碼的Codegen (IMPALA-3816)
ORC scanner
為ORC scanner增加Codegen支援 (IMPALA-6506)
優化ORC scanner中的字串分配 (IMPALA-9226)
列式地處理ORC scanner中的資料(IMPALA-9228)
Data cache
新增cache驅逐演算法LIRS (IMPALA-8690)
增加更多cache相關的指標 (IMPALA-9435, IMPALA-9472, IMPALA-9473)
節點黑名單,Coordinator會將問題節點加入黑名單,防止後續查詢因其失敗
將有磁碟錯誤的節點加入黑名單 (IMPALA-9224)
將DataStreamService RPC失敗的節點加入黑名單 (IMPALA-9137)
可見性方面
Catalogd網頁顯示當前的DDL (IMPALA-6663)
Catalogd網頁提供json形式的元資料檢視 (IMPALA-10168)
更多改進詳見Change Log: http://impala.apache.org/docs/changelog-4.0.html
致謝
Impala-4.0的貢獻者有很多來自國內社群:汪勝(skyyws)、趙仁海、黃填華、褚福存、何獻青(xqhe)、劉垚、田紅瀚(abeltian)、馮國敬、蔡政(fifteencai)、鄧威(wesleydeng)、高小青、何李夫、吳昌、陳極(jchen)、黃權隆(stigahuang)。
感謝他們的付出以及他們所在公司,華為、騰訊、神策、網易、搜狐暢遊、Hulu、Cloudera 等對他們工作的支援,期待更多來自國內社群的貢獻!
本文分享自微信公眾號 - Hadoop實操(gh_c4c535955d0f)。
如有侵權,請聯絡 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。