Flink SQL Client 是一个帮助用户直接运行SQL,而不要进行编译运行的工具,首先他支持多个数据源,在Flink1.9.0开始支持了Hive,并且在Flink 1.10.0时候发布了企业级Hive支持,这样就把批处理和流计算结合了起来,这篇博客详解了Hive在Flink SQL Client中的安装和使用,以及探索在上面做的一些复杂开发实践
Hive安装 #
依赖的jar
包如下
antlr4-runtime-4.5.jar
flink-connector-hive_2.11-1.9.0.jar
antlr-runtime-3.5.2.jar
flink-hadoop-compatibility_2.11-1.9.0.jar
datanucleus-api-jdo-4.2.4.jar
hive-exec-2.3.4.jar
datanucleus-api-jdo-5.2.2.jar
javax.jdo-3.2.0-m3.jar
datanucleus-core-4.1.17.jar
datanucleus-rdbms-4.1.9.jar
flink-shaded-hadoop-2-uber-2.7.5-8.0.jar
将这些复制到flink/lib
目录下面即可,下面是下载链接
1.10.0 flink hive jar Google Driver 下载地址
1.9.0 flink hive jar Google Driver下载地址
百度云提取码: 1.9.0 flink hive 百度云下载地址
百度云提取码: e9c7 链接: 1.10.0 flink hive 百度云下载地址
Hive使用中遇到的问题 #
1. 目前只支持2.3.4和1.2.1
2. 支持的读取的hive类型有限,时间类型只支持1个Date
PS: Sqoop导入数据库表到Hive的时候,只能将DateTime
和TimeStamp
设置为String
,否则无法在Client中使用
3. 跨越Catalog
读取表的时候Hive不能存放在default
(默认)数据库中,否则会解析异常
例如:想从Hive默认数据库中获取表a
,使用insert b select * from hive_catalog.default.a
会解析失败
4. Hive不支持写入分区表,也不支持Overwrite,只支持append模式
目前flink-1.10已经支持多个Hive版本并且修复了上面所遇到的问题,但是目前在SQL Client
里面使用较为麻烦,需要自己安装缺少的jar包(而且版本不兼容的话会出现各种奇奇怪怪的bug),所以我写了一个项目把所以的依赖打包到一起这样只要一行命令就可以生成所需要的依赖,而且支持多个Hive
版本
下面是这个项目的github地址
未完待续