Flink 做为现代数据仓库的统一引擎:Hive 集成生产就绪!

在2020年,你的数据仓库和基础设施须要知足哪些需求?html

咱们总结了几下几点:apache

首先,当下的企业正快速转向更实时化的模式,这要求企业具有对线上流式数据进行低延迟处理的能力,以知足实时(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 的批处理能力更上一层楼。oop

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 在元数据和数据领域生产级别的结合,都能使用户更好地解决实际问题,为业务带来更多价值。