Flink1.10和Hive集成一些需要注意的點

前幾天,Flink官方release了Flink1.10版本,這個版本有很多改動。比如:

<code>Flink 1.10 同時還標誌著對 Blink的整合宣告完成,隨著對 Hive 的生產級別集成及對 TPC-DS 的全面覆蓋,Flink 在增強流式 SQL 處理能力的同時也具備了成熟的批處理能力。本篇博客將對此次版本升級中的主要新特性及優化、值得注意的重要變化以及使用新版本的預期效果逐一進行介紹。/<code>

其中最重要的一個特性之一是:推出了生產可用的 Hive 集成。

Flink 1.9推出了預覽版的 Hive 集成。該版本允許用戶使用 SQL DDL 將 Flink 特有的元數據持久化到 Hive Metastore、調用 Hive 中定義的 UDF 以及讀、寫 Hive 中的表。Flink 1.10 進一步開發和完善了這一特性,帶來了全面兼容 Hive 主要版本的生產可用的 Hive 集成。

筆者就遇到的幾個問題,歸類總結如下。如果你在生產環境遇到各種奇奇怪怪得問題,可能帶來一些啟示:

架構設計

Flink在創建運行環境時會同時創建一個CatalogManager,這個CatalogManager就是用來管理不同的Catalog實例,我們的Flink運行環境就是通過這個訪問Hive:

Flink1.10和Hive集成一些需要注意的點

官網給出的例子如下:

Flink1.10和Hive集成一些需要注意的點

Hive Catalog + Hive 需要一個配置文件

Hadoop和Spark鏈接Hive時都會有一個hive-site.xml的配置文件,同樣Flink在和Hive集成時也需要一個配置文件:sql-client-hive.yaml 這個配置文件中包含了:hive配置文件的路徑,執行引擎等。官網給出的配置案例:

Flink1.10和Hive集成一些需要注意的點

官網同樣給出了警示⚠️信息如下:

Flink1.10和Hive集成一些需要注意的點

意思是說,本地需要一個hive-site.xml,另外sql-client-hive.yaml 中的planner配置必須為blink 。

SQL CLI工具支持

這個玩具類似一個對話窗口,可以通過腳本sql-client.sh 腳本啟動,運行方法如下:

Flink1.10和Hive集成一些需要注意的點

Flink1.10和Hive集成一些需要注意的點

需要注意的是,運行腳本的當前機器必須有必須的環境變量,例如:HADOOP_CONF_DIR、HIVE_HOME、HADOOP_CLASSPATH等,把Hadoop集群搭建的時候指定的一些環境變量拿過來即可。

必要依賴和版本區別

Flink 1.10 對Hive集成支持了很多版本,對於不同的Hive版本需要不同的Jar包支持,具體可以參考: https://ci.apache.org/projects/flink/flink-docs-release-1.10/dev/table/hive/#connecting-to-hive

優點和不足

本次更新issue裡提到了目前主要做的一些優化,包括:Projection Pushdown(只讀取必要的列),Limit Pushdown(sql能limit的就limit,減少數據量),分區裁剪(只讀必須分區)等等。總體來說目前都是sql優化的一些常用手段。

目前的不足之處主要包含:

存儲格式目前還沒有完全支持,We have tested on the following of table storage formats: text, csv, SequenceFile, ORC, and Parquet. ,相信很快就會再次release。

另外ACID、Bucket表暫時還不支持。

Hive作為數據倉庫系統的絕對核心,承擔著絕大多數的離線數據ETL計算和數據管理,期待Flink未來的完美支持。


分享到:


相關文章: