flink1.2 sql client连接hive出现的相关问题

前言

最近空闲时间准备看一下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的版本也有限
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/目录下
hive版本对应的flink-sql-connector版本
3.准备hive配置
在flink安装目录的conf目录下,新建hive.yaml文件,添加hive相关配置项。hive.yaml配置
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遇到这些问题,所以要自己踩一遍坑,才会对知识有宽泛的认知和更深的理解。后续会继续深入,慢慢踩坑!

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
要在Flink SQL连接并读取Hive表,您可以使用Hive catalog或Flink JDBC连接器的方法。 使用Hive catalog的方法如下: 1. 首先,您需要在Flink SQL Stream Builder中注册Hive catalog。这可以通过在Flink SQL CLI或Flink SQL客户端中执行相应的DDL语句来完成。\[3\] 2. 注册完成后,您可以在Flink SQL中使用Hive表。您可以通过在SQL查询中使用类似于"SELECT * FROM hive_table"的语句来读取Hive表的数据。\[1\] 使用Flink JDBC连接器的方法如下: 1. 首先,您需要确保Hive表的数据可以通过JDBC连接器访问。这可以通过在Flink的配置文件中配置Hive JDBC连接器的相关信息来实现。\[2\] 2. 配置完成后,您可以在Flink SQL中使用JDBC连接器来读取Hive表。您可以通过在SQL查询中使用类似于"SELECT * FROM jdbc_table"的语句来读取Hive表的数据。 无论您选择使用Hive catalog还是JDBC连接器,都可以在Flink SQL连接并读取Hive表的数据。具体选择取决于您的需求和环境。 #### 引用[.reference_title] - *1* *2* *3* [通过 Flink SQL 使用 Hive 表丰富流](https://blog.csdn.net/wang_x_f911/article/details/127980900)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值