在2020年,你的資料倉庫和基礎設施需要滿足哪些需求?
我們總結了幾下幾點:
首先,當下的企業正快速轉向更實時化的模式,這要求企業具備對線上流式資料進行低延遲處理的能力,以滿足實時(real-time)或近實時(near-real-time)的資料分析需求。人們對從資料産生到資料可用之間延遲的容忍度越來越低。曾經幾個小時甚至幾天的延誤不再被接受。使用者期待的是幾分鐘甚至幾秒鐘的資料端到端體驗。
第二,資料基礎設施需要具備同時處理線上和線下資料的能力,兩種模式在實際應用中都不可或缺。除了上面提到的流處理,使用者也需要批處理做即席查詢(ad-hoc query)和資料挖掘。資料基礎設施不應該要求使用者二選一,而應該提供兩個選項并且都是高品質的。
第三,資料工程師、資料科學家、分析師和運維人員都在渴望一套統一的資料技術棧,以便更輕松的使用。大資料領域的技術棧已經支離破碎很多年了,企業可能有一套流處理系統,一套批處理系統,一套線上資料分析系統。這基本都是由于當年流處理架構不夠成熟而被迫采用過時的 lambda 架構造成的問題。現在不同了,流處理已成為主流,終端使用者不必再學習多種技能和維護各種複雜的工具和資料處理管道(data pipeline)。使用者渴望的是一套統一的簡單易學易維護的方案。
如果你對以上問題深有同感,那說明這篇文章很适合你。我們來看看如何真正解決這個問題。
接下來我将帶各位了解下 Flink 與 Hive 生産級别的整合工作。
Flink 與 Hive 生産級整合
Flink 一直遵循“ 流優先,批是流的一個特例”的思想理念。在這一思想的指導下,Flink 将最先進的流式處理技術運用到批進行中,使得 Flink 的批處理能力一早就令人印象深刻。特别是在 Flink 1.10 中我們基本完成了從1.9開始的對 Blink planner 的整合工作後,Flink SQL 的批處理能力更上一層樓。
Hive 在大資料生态中已成為标準的資料倉庫元件。它不僅僅是一個 SQL 引擎,也是一個資料管理系統。但由于自身的局限,Hive 在當下面臨很大的挑戰,也無法滿足的使用者需求。
基于此,我們從 Flink 1.9 推出了 Flink 和 Hive 整合的 beta 版本。在過去幾個月中,我們基于使用者的回報,在各個方面都對産品進行了加強。我很高興的宣布,Flink 和 Hive 的整合在 Flink 1.10 版本中能實作生産可用!
下面來為大家介紹一些細節。
統一的中繼資料管理
Hive Metastore 已逐漸成為 Hadoop 生态中中繼資料管理的中樞。很多公司都用 Hive Metastore 管理他們的 Hive 甚至非 Hive 的中繼資料。
Flink 1.9 中我們推出了 Flink 的 HiveCatalog,将 Flink 對接 Hive Metastore 中豐富的中繼資料。HiveCatalog 有兩層作用。
- 一是它允許 Flink 使用者将 Flink 本身的中繼資料,包括表、函數等,存儲到 Hive Metastore 中。
- 二是它允許 Flink 使用 Hive Metastore 中已有的 Hive 中繼資料,使得 Flink 可以讀寫 Hive 的表。
Flink 1.10 中的新功能是使用者可以對接幾乎所有版本的 Hive Metastore。這裡有一個例子是如何将 Flink 的 Kafka 表中繼資料存儲到 Hive Metastore 中。
代碼示例:
https://ci.apache.org/projects/flink/flink-docs-release-1.10/dev/table/hive/hive_catalog.html#example流處理
由于 Hive 自身的缺陷,使用者無法獲得實時資料導入的能力。但通過與 Flink 的整合,使用者可以解鎖一些其他很有用的場景,比如:
- 對 Flink 的實時資料和 Hive 的離線資料做 join
- 通過 Flink 回填 Hive 的資料
Hive 版本相容
在 Flink 1.10 中,我們相容了幾乎所有 Hive 1.x, 2.x, 3.x 的版本。
複用 Hive 函數
在 Flink 1.9 中使用者已經可以複用 Hive UDF。這對 Hive 使用者是極大的利好,因為使用者不需要再重新開發函數,省時省力。
Flink 1.10 引入了 module 的概念,并通過 HiveModule 支援了所有 Hive 自帶的函數(built-in functions)。Hive 社群在過去很多年積累了數量可觀的有用的自帶函數,這将友善使用者在 Flink 更好地完成他們的工作。
加強讀寫 Hive 資料
1.10 加強了對 Hive 資料讀寫的支援。
在讀方面,Flink 可以讀取 Hive 的分區表和視圖(view);同時,我們添加了很多讀優化,比如分區裁剪(partition-pruning)和 projection pushdown 來減少從檔案系統攝入的資料;對 ORC 檔案,我們加入了向量化讀取。
在寫方面,Flink 引入了“INSERT INTO” 和 “INSERT OVERWRITE” 文法;此外,Flink 可以靜态和動态寫入 Hive 分區表。
更多的資料類型
1.10 中我們支援了更多的常用 Hive 類型。
後續規劃
社群計劃在使用者回報的基礎上進一步優化兩個系統間的整合。一些 1.11 的目标包括:
- Hive 的 near-real-time streaming sink
- 原生 Parquet 檔案讀取
- 額外的互動性 - 允許使用者從 Flink 建立 Hive 的表和函數等
- 更好地開箱即用性
- Hive 文法的支援
數倉正在向更實時化的方向發展,與 Flink 的緊密結合會使這個趨勢向前更進一步。
Flink 1.10 中與 Hive 在中繼資料和資料領域生産級别的結合,都能使使用者更好地解決實際問題,為業務帶來更多價值。