開發與維運

Flink 作為現代數據倉庫的統一引擎:Hive 集成生產就緒!

在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 在元數據和數據領域生產級別的結合,都能使用戶更好地解決實際問題,為業務帶來更多價值。

Leave a Reply

Your email address will not be published. Required fields are marked *