本文翻译自官网:Hive Beta https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/hive/

Flink Table Api & SQL 翻译目录

Apache Hive已将自己确立为数据仓库生态系统的焦点。 它不仅充当用于大数据分析和ETL的SQL引擎,而且也是数据发现, 定义和演变数据的数据管理平台。

Flink提供了与Hive的双重集成。 首先是利用Hive的Metastore作为持久性 catalog,以跨会话存储Flink特定的元数据。 第二个是提供Flink作为读取和写入Hive表的替代引擎。

hive catalog 旨在与现有的 hive 安装程序 “开箱即用” 兼容。 您不需要修改现有的 Hive Metastore 或更改表的数据放置或分区。

Flink支持Hive 2.3.41.2.1并且依赖于Hive对其他次要版本的兼容性保证。

如果您使用其他次要Hive版本,例如1.2.2或2.3.1,则还可以选择最接近的版本1.2.1(对于1.2.2)或2.3.4(对于2.3.1)来解决。 例如,您要使用Flink在SQL客户端中集成2.3.1 hive版本,只需在YAML配置中将hive-version设置为2.3.4。 通过Table API创建HiveCatalog实例时,类似地传递版本字符串。

欢迎用户使用此替代方法尝试不同的版本。 由于仅测试了2.3.4和1.2.1,所以可能存在意外问题。 我们将在将来的版本中测试并支持更多版本。

依赖

为了与Hive集成,用户在他们的项目中需要以下依赖项。

 hive 2.3.4

<dependency>
  <groupId>org.apache.flink</groupId>
  <artifactId>flink-connector-hive_2.11</artifactId>
  <version>1.9.0</version>
  <scope>provided</scope>
</dependency>

<!-- Hadoop Dependencies -->

<dependency>
  <groupId>org.apache.flink</groupId>
  <artifactId>flink-hadoop-compatibility_2.11</artifactId>
  <version>1.9.0</version>
  <scope>provided</scope>
</dependency>

<!-- Hive 2.3.4 is built with Hadoop 2.7.2. We pick 2.7.5 which flink-shaded-hadoop is pre-built with, but users can pick their own hadoop version, as long as it's compatible with Hadoop 2.7.2 -->

<dependency>
  <groupId>org.apache.flink</groupId>
  <artifactId>flink-shaded-hadoop-2-uber</artifactId>
  <version>2.7.5-8.0</version>
  <scope>provided</scope>
</dependency>

<!-- Hive Metastore -->
<dependency>
    <groupId>org.apache.hive</groupId>
    <artifactId>hive-exec</artifactId>
    <version>2.3.4</version>
</dependency>

hive 1.2.1

<dependency>
  <groupId>org.apache.flink</groupId>
  <artifactId>flink-connector-hive_2.11</artifactId>
  <version>1.9.0</version>
  <scope>provided</scope>
</dependency>

<!-- Hadoop Dependencies -->

<dependency>
  <groupId>org.apache.flink</groupId>
  <artifactId>flink-hadoop-compatibility_2.11</artifactId>
  <version>1.9.0</version>
  <scope>provided</scope>
</dependency>

<!-- Hive 1.2.1 is built with Hadoop 2.6.0. We pick 2.6.5 which flink-shaded-hadoop is pre-built with, but users can pick their own hadoop version, as long as it's compatible with Hadoop 2.6.0 -->

<dependency>
  <groupId>org.apache.flink</groupId>
  <artifactId>flink-shaded-hadoop-2-uber</artifactId>
  <version>2.6.5-8.0</version>
  <scope>provided</scope>
</dependency>

<!-- Hive Metastore -->
<dependency>
    <groupId>org.apache.hive</groupId>
    <artifactId>hive-metastore</artifactId>
    <version>1.2.1</version>
</dependency>

<dependency>
    <groupId>org.apache.hive</groupId>
    <artifactId>hive-exec</artifactId>
    <version>1.2.1</version>
</dependency>

<dependency>
    <groupId>org.apache.thrift</groupId>
    <artifactId>libfb303</artifactId>
    <version>0.9.3</version>
</dependency>

连接到Hive

 通过表环境或YAML配置,使用Hive catalog 连接到现有的Hive安装程序。

val name            = "myhive"
val defaultDatabase = "mydatabase"
val hiveConfDir     = "/opt/hive-conf"
val version         = "2.3.4" // or 1.2.1

val hive = new HiveCatalog(name, defaultDatabase, hiveConfDir, version)
tableEnv.registerCatalog("myhive", hive)

支持的类型

当前HiveCatalog支持具有以下映射的大多数Flink数据类型:

Flink Data TypeHive Data Type
CHAR(p) CHAR(p)
VARCHAR(p) VARCHAR(p)
STRING STRING
BOOLEAN BOOLEAN
TINYINT TINYINT
SMALLINT SMALLINT
INT INT
BIGINT LONG
FLOAT FLOAT
DOUBLE DOUBLE
DECIMAL(p, s) DECIMAL(p, s)
DATE DATE
BYTES BINARY
ARRAY<T> LIST<T>
MAP<K, V> MAP<K, V>
ROW STRUCT

局限性 

Hive数据类型中的以下限制会影响Flink和Hive之间的映射:

  • CHAR(p) 最大长度为255
  • VARCHAR(p) 最大长度为65535
  • Hive MAP仅支持原始键类型,而Flink MAP可以是任何数据类型
  • 不支持Hive的 UNION 类型
  • Flink的INTERVAL类型不能映射到Hive INTERVAL类型
  • Hive不支持 Flink TIMESTAMP_WITH_TIME_ZONETIMESTAMP_WITH_LOCAL_TIME_ZONE
  • 由于精度差异,Flink的TIMESTAMP_WITHOUT_TIME_ZONE类型无法映射到Hive的TIMESTAMP类型。
  • Hive不支持Flink 的 MULTISET

欢迎关注Flink菜鸟公众号,会不定期更新Flink(开发技术)相关的推文

 

posted on 2019-12-02 13:24  Flink菜鸟  阅读(500)  评论(0编辑  收藏  举报