如何在 Flink 1.9 中使用 Hive?

  • 时间:
  • 浏览:1
  • 来源:大发幸运飞艇APP下载_大发幸运飞艇APP官方

如上文所述,目前支持的 Hive 版本包括 2.3.4 和 1.2.1,下表列出的是针对不同版本所需的依赖。

下面的代码展示了何如通过 TableAPI 来创建 HiveCatalog,并注册到 TableEnvironment。

SQL 是大数据领域中的重要应用场景,为了完善 Flink 的生态,发掘 Flink 在批正确处理方面的潜力,当让让.我决定增强 FlinkSQL 的功能,从而让用户都里能 通过 Flink 完成更多的任务。

其中 show catalogs 会列出加载的所有 Catalog 实例。须要注意的是,除了用户在sql-client-defaults.yaml 文件中配置的 Catalog 以外,FlinkSQL 一定会自动加载另另一一三个 GenericInMemoryCatalog 实例作为内置的 Catalog,该内置 Catalog 默认名字为 default_catalog。

Flink 1.9.0 中 Hive 的 TableSink 那么在 batch 模式下工作,有刚刚 可能用户你要 使用 Hive 的 TableSink,须要将执行模式设置为 batch。

Apache Flink 从 1.9.0 版本始于增加了与 Hive 集成的功能,用户都里能 通过 Flink 来访问 Hive 的元数据,以及读写 Hive 中的表。本文将主要从项目的设计架构、最新进展、使用说明等方面来介绍你你这一 功能。

可能是试用功能,有刚刚 还有一些方面过高 完善,下面列出的是在 1.9.0 中缺失的功能:

假设 Hive 中可能有一张名为 src 的表,当让让.我都里能 用以下的 SQL 的话来读写这张表。

与 HiveCatalog 相似的,Hive Data Connector 目前支持的 Hive 版本也是 2.3.4 和 1.2.1。

要与 Hive 交互,须要使用 HiveCatalog,下面介绍一下何如配置 HiveCatalog。

当让让.我会在 Flink 后续版本中进一步完善与 Hive 集成的功能,预计会在 1.10.0 版本中实现 Production-Ready。当让让.我在后续版本中计划开展的工作包括:

另外,当让让.我设计了 HiveShim 来支持不同版本的 Hive Metastore。目前支持的 Hive 版本包括 2.3.4 和 1.2.1。

Flink 1.9.0 增加了新的 blink planner,可能 blink planner 相比于另另一一三个多的 planner 功能更加全面,有刚刚 当让让.我建议在使用 FlinkSQL 与 Hive 集成时使用 blink planner。后续新的功能也可能会只支持 blink planner。

使用 Flink 与 Hive 集成的功能,用户首先须要打上去相应的依赖。可能是使用 SQL Client,则须要将依赖的 jar 打上去到 Flink 的 lib 目录中;可能使用 Table API,则须要将相应的依赖打上去到项目中(如pom.xml)。

对应的 Table API 的写法如下:

设置好 HiveCatalog 事先就都里能 通过 SQL Client 可能 Table API 来读写 Hive 中的表了。

使用 SQL Client 时都里能 像另另一一三个多在 sql-client-defaults.yaml 中指定执行模式和 planner:

依赖的 Hive 包(即 hive-exec 和 hive-metastore)也都里能 使用用户集群中 Hive 所提供的 jar 包,详情请见支持不同的 Hive 版本。

借助 Hive 兼容性的保证,其它不同的小版本也比较可能是都里能 正常工作的。有刚刚 ,可能用户使用的 Hive 小版本与当让让.我所支持的不同,都里能 指定另另一一三个支持的版另另一一三个多试用与 Hive 集成的功能。比如用户使用的 Hive 版本是 2.3.3,都里能 在 sql-client-defaults.yaml 文件可能代码中将 Hive 版本指定为 2.3.4。

与 Hive 集成主要含晒 了元数据和实际表数据的访问,有刚刚 当让让.我会从这两方面介绍一下该项目的架构。

相似的,也都里能 通过 Table API 来读写里边提到的这张表。下面的代码展示了何如实现你你这一 操作。

使用 SQL Client 时,用户须要在 sql-client-defaults.yaml 中指定此人 所需的 Catalog,在 sql-client-defaults.yaml 的“catalogs”列表中都里能 指定另另一一三个或多个 Catalog 实例。以下的示例展示了何如指定另另一一三个 HiveCatalog:

Flink 与 Hive 集成的功能会在 1.9.0 版本中作为试用功能发布,用户都里能 通过 Table API 可能 SQL Client 的模式与 Hive 进行交互。下面列出的是在 1.9.0 中可能支持的功能:

使用 use catalog 都里能 设定用户 Session 当前的 Catalog。用户在 SQL 的话中访问元数据对象(如 DB、Table 等)时,可能不指定 Catalog 名字,则 FlinkSQL 会在当前 Catalog 中进行查找。

Flink 1.9.0 中支持的 Hive 版本是 2.3.4 和 1.2.1,目前当让让.我只针对这另另一一三个版本进行了测试。使用 SQL Client 时,可能用户那么在 sql-client-defaults.yaml 文件中指定 Hive 版本,当让让.我会自动检测 classpath 中的 Hive 版本。可能检测到的 Hive 版本完整篇 一定会 2.3.4 或 1.2.1 就会报错。

指定了 HiveCatalog 事先,用户就都里能 启动 sql-client,并通过以下命令验证 HiveCatalog 可能正确加载。

将 HiveCatalog 注册到 TableEnvironment 事先,就都里能 在通过 TableEnvironment 提交 SQL 的事先访问 HiveCatalog 中的元数据了。与 SQL Client 相似, TableEnvironment 也提供了 useCatalog 接口让用户设定当前 Catalog。

目前 Catalog 另另一一三个多实现,GenericInMemoryCatalog 和 HiveCatalog。其中 GenericInMemoryCatalog 保持了原有的 Flink 元数据管理机制,将所有元数据保居于内存中。而 HiveCatalog 会与另另一一三个 Hive Metastore 的实例连接,提供元数据持久化的能力。要使用 Flink 与 Hive 进行交互,用户须要配置另另一一三个 HiveCatalog,并通过 HiveCatalog 访问 Hive 中的元数据。此人 面,HiveCatalog 也都里能 用来正确处理 Flink 自身的元数据,在你你这一 场景下,HiveCatalog 仅将 Hive Metastore 作为持久化存储使用,写入 Hive Metastore 中的元数据你这一一定是 Hive 所支持的格式。另另一一三个 HiveCatalog 实例都里能 同时支持这你这一模式,用户不需要为管理 Hive 和 Flink 的元数据创建不同的实例。

Hive 是大数据领域最早出显的 SQL 引擎,发展至今有着富有的功能和广泛的用户基础。事先出显的 SQL 引擎,如 Spark SQL、Impala 等,完整篇 一定会一定程度上提供了与 Hive 集成的功能,从而方便用户使用现有的数据仓库、进行作业迁移等。有刚刚 当让让.我认为提供与 Hive 交互的能力对于 FlinkSQL 也是非常重要的。

其中 name 是用户给每个 Catalog 实例指定的名字, Catalog 名字和 DB 名字构成了 FlinkSQL 中元数据的命名空间,有刚刚 须要保证每个 Catalog 的名字是唯一的。type 表示 Catalog 的类型,对于 HiveCatalog 而言,type 应该指定为 hive。hive-conf-dir 用于读取 Hive 的配置文件,用户都里能 将其设定为集群中 Hive 的配置文件目录。hive-version 用于指定所使用的 Hive 版本,都里能 设定为 2.3.4 可能 1.2.1。

为了访问内部系统的元数据,Flink 提供了 ExternalCatalog 的概念。有刚刚 目前 ExternalCatalog 的定义非常不完整篇 ,基本居于不可用的状况。有刚刚 ,当让让.我提出了一套全新的 Catalog 接口来取代现有的 ExternalCatalog。新的 Catalog 都里能 支持数据库、表、分区等多种元数据对象;允许在另另一一三个用户 Session 中维护多个 Catalog 实例,从而同时访问多个内部系统;有刚刚 Catalog 以可插拔的法律依据接入 Flink,允许用户提供自定义的实现。下图展示了新的 Catalog API 的总体架构。



创建 TableEnvironment 的以一定会同时创建另另一一三个 CatalogManager,负责管理不同的 Catalog 实例。TableEnvironment 通过 Catalog 来为 Table API 和 SQL Client 用户提供元数据服务。

欢迎当让让.我试用 Flink 1.9 中的 Hive 功能,可能遇到任何大间题也欢迎当让让.我通过钉钉、邮件列表等法律依据与当让让.我联系。

当让让.我提供了 Hive Data Connector 来读写 Hive 的表数据。Hive Data Connector 尽可能的复用了 Hive 你这一的 Input/Output Format 和 SerDe 等类,另另一一三个多做的好处一方面是减少了代码重复,更重要的是都里能 最大程度的保持与 Hive 的兼容,即 Flink 写入的数据 Hive 都里能 正常读取,有刚刚 反之亦然。

其中 flink-shaded-hadoop-2-uber 含晒 了 Hive 对于 Hadoop 的依赖。可能不需要 Flink 提供的包,用户也都里能 将集群中使用的 Hadoop 包打上去进来,不过须要保证打上去的 Hadoop 版本与 Hive 所依赖的版本是兼容的(Hive 2.3.4 依赖的 Hadoop 版本是 2.7.2;Hive 1.2.1 依赖的 Hadoop 版本是 2.6.0)。