加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 运营中心 > 网站设计 > 教程 > 正文

如何在Flink 1.9中使用 Hive?

发布时间:2019-09-05 04:32:06 所属栏目:教程 来源:游客syxudncovqql2
导读:副标题#e# Apache Flink 从 1.9.0 版本开始增加了与 Hive 集成的功能,用户可以通过 Flink 来访问 Hive 的元数据,以及读写 Hive 中的表。本文将主要从项目的设计架构、最新进展、使用说明等方面来介绍这一功能。 Flink on Hive 介绍 SQL 是大数据领域中的
副标题[/!--empirenews.page--]

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

如何在Flink 1.9中使用 Hive?

Flink on Hive 介绍

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

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

设计架构

与 Hive 集成主要包含了元数据和实际表数据的访问,因此我们会从这两方面介绍一下该项目的架构。

元数据

为了访问外部系统的元数据,Flink 提供了 ExternalCatalog 的概念。但是目前 ExternalCatalog 的定义非常不完整,基本处于不可用的状态。因此,我们提出了一套全新的 Catalog 接口来取代现有的 ExternalCatalog。新的 Catalog 能够支持数据库、表、分区等多种元数据对象;允许在一个用户 Session 中维护多个 Catalog 实例,从而同时访问多个外部系统;并且 Catalog 以可插拔的方式接入 Flink,允许用户提供自定义的实现。下图展示了新的 Catalog API 的总体架构。

如何在 Flink 1.9 中使用 Hive?

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

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

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

表数据

我们提供了 Hive Data Connector 来读写 Hive 的表数据。Hive Data Connector 尽可能的复用了 Hive 本身的 Input/Output Format 和 SerDe 等类,这样做的好处一方面是减少了代码重复,更重要的是可以最大程度的保持与 Hive 的兼容,即 Flink 写入的数据 Hive 可以正常读取,并且反之亦然。

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

项目进展

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

  • 提供简单的 DDL 来读取 Hive 元数据,比如 show databases、show tables、describe table 等。
  • 可通过 Catalog API 来修改 Hive 元数据,如 create table、drop table 等。
  • 读取 Hive 数据,支持分区表和非分区表。
  • 写 Hive 数据,支持非分区表。
  • 支持 Text、ORC、Parquet、SequenceFile 等文件格式。
  • 支持调用用户在 Hive 中创建的 UDF。

由于是试用功能,因此还有一些方面不够完善,下面列出的是在 1.9.0 中缺失的功能:

  • 不支持INSERT OVERWRITE。
  • 不支持写分区表。
  • 不支持ACID表。
  • 不支持Bucket表。
  • 不支持View。

部分数据类型不支持,包括Decimal、Char、Varchar、Date、Time、Timestamp、Interval、Union等。

如何应用

添加依赖

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

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

如何在 Flink 1.9 中使用 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)。

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

配置 HiveCatalog

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

SQL Client

使用 SQL Client 时,用户需要在 sql-client-defaults.yaml 中指定自己所需的 Catalog,在 sql-client-defaults.yaml 的“catalogs”列表中可以指定一个或多个 Catalog 实例。以下的示例展示了如何指定一个 HiveCatalog:

  1. catalogs: 
  2. # A typical catalog definition looks like: 
  3.   - name: myhive 
  4.     type: hive 
  5. hive-conf-dir: /path/to/hive_conf_dir 
  6. hive-version: 2.3.4 

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读