前言
最近空闲时间准备看一下flink sql&table模块,发现flink提供了sql client来直接进行交互式查询。体验了sql client的基本功能后准备去操作hive,kafka等数据源,但是在操作连接hive时就出现了相关问题,在此记录一下。本地使用软件的相关版本为flink1.12.3,hive2.1.0,hadoop2.7.3
连接准备
1.检查版本
由于flink和hive的版本过多,flink支持hive的版本也有限
2.下载依赖
根据本地flink和hive的版本,下载对应的依赖包。
参考网上资料和版本对应关系,flink sql client连接hive需要用到3个依赖jar包,分别为flink-connector-hive_2.11-1.12.3.jar,hive-exec-2.1.0.jar,flink-sql-connector-hive-2.2.0_2.11-1.12.3.jar。将其放到flink按照目录的lib/目录下
3.准备hive配置
在flink安装目录的conf目录下,新建hive.yaml文件,添加hive相关配置项。
name可以随便定义,type参数必须为hive
4.启动flink和flink sql client
在flink安装目录的bin/目录下,启动flink和flink sql client。
由于我没有使用默认的配置文件,启动时需要指定配置文件
用命令 ./sql-client.sh embedded -d …/conf/hive.yaml启动sql-client
5.通过命令连接访问hive
简单查询hive表
问题汇总
1.Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.conf.Configuration
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
问题描述:在启动sql-client时,获取不到hadoop相关的方法
解决:在/etc/profile中配置HADOOP_CLASSPATH,HADOOP_CLASSPATH的值为hadoop相关jar包的路径
export HADOOP_CLASSPATH=/usr/hdp/2.6.5.0-292/slider/lib/*
我这里加了通配符,修改完要source生效
2.[ERROR] Could not execute SQL statement. Reason:
org.apache.flink.table.client.gateway.SqlExecutionException: Results of batch queries can only be served in table or tableau mode.
问题描述:使用select * from table limit 10查询时,出现该错误。flink在获取批量查询结果时,需要用到表格展示模式。
解决:可以在sql命令行设置展示模式
SET execution.result-mode=table; 表格模式
SET execution.result-mode=tableau; tableau模式,更接近传统的数据库
3.[ERROR] Could not execute SQL statement. Reason:
org.apache.flink.table.api.TableException: Stream Tables can only be emitted by AppendStreamTableSink, RetractStreamTableSink, or UpsertStreamTableSink.
问题描述:使用select * from table limit 10查询时,出现该错误,目前 HiveTableSink 不支持流式写入(未实现 AppendStreamTableSink)。需要将执行模式改成 batch模式,否则会出现错误
解决:修改连接hive配置文件hive.yaml,添加execution配置。将type配置为batch
4.[ERROR] Could not execute SQL statement. Reason:
java.lang.ClassNotFoundException: org.apache.flink.connectors.hive.HiveSource
问题描述:使用select * from table limit 10查询时,出现该错误。
解决:出现这个问题好像是因为jar包冲突,flink-sql-connector-hive与flink-connector-hive,hive-exec冲突,移除掉flink-sql-connector-hive-2.2.0_2.11-1.12.3.jar
总结:纸上得来终觉浅,绝知此事要躬行。初次接触flink sql client遇到这些问题,所以要自己踩一遍坑,才会对知识有宽泛的认知和更深的理解。后续会继续深入,慢慢踩坑!