Flink写入hive的问题简单记录

背景:Flink读取Kafka数据写入hive

两种方式
1、flink 0.9版本以上支持 table api直接写入hive 方式,需要使用hivecatalog,可以参考官方文档示例
2、flink写入 hdfs文件,需要小文件合并以及手动添加分区元数据
本文主要记录 第一种方式遇到的问题。

hive-exec
flink-connector-hive
flink-connector-kafka
hadoop-mapreduce-client-core
hadoop-common
hadoop-hdfs
libfb303 版本0.9.3 (重要,容易忽略的依赖)
其它依赖版本可以按集群条件自行选择。
这些依赖 如果集群上没有,运行会报错,需要一起打包到 jar包文件中 ,一起打包的方法可以用 maven-shade-plugin 插件。(添加依赖jar包时,记得把主类所在路径也添加到include配置,否则可能报错主类未找到)

table api 的方式需要加载hive的元数据,随意在代码中需要生成HiveCatalog对象,构造方法有几种:
1、传入hive-site.xml的所在目录,字符串
2、不传hive的配置文件,即(String)null 这种写法将hive-site.xml 文件放入resource文件夹,在jar包运行时会自动读取到 resources文件夹下的配置
3、构造 HiveConf对象,并设置 “hive.metastore.uris” 参数。 然后把hiveconf对象传入构造方法
4、如果不写配置文件路径,也没有任何制定,可能会报错,不支持内嵌数据库 :Embedded metasotre is not allowed

如果在本地调试的话,除了hive配置文件,还需要本地的hadoop环境
同时配置 winutils.exe ,同时修改 etc/hadop下的hdfs-site.xml core-site.xml 文件,对应hive的数据存储地址,主要是namenode service的配置,也就是保证本地电脑能够解析 hive表 对应的hdfs存储地址

这里hadoop 的配置文件,也是在生成hvecatalog对象时 查找的,可以debug看一下,会有一些默认的扫描文件夹,一般是 $HADOOP_HOME/etc/hadoop 或者 $HADOOP_HOME/conf 所以需要本地电脑配置环境变量,或者 程序运行时,指定变量:HADOOP_HOME=D:/Hadoop-3.1.0 这里写自己的hadoop安装文件夹,注意不要加引号

大部分类未找到,或者方法未找到,一般都是 依赖冲突 或者相关依赖确实没打包
还遇到了 类型解析错误:getLong for input string 30s
解析配置文件时,应该是由于程序运行版本和 集群的hdfs版本不一致,hdfs 低于3.0 会出现这个问题 ,解决:构建catalog对象时,采用方法3,自己传入hiveconf对象,同时设置以下两个参数:
Ddfs.client.datanode-restart.timeout 30000
dfs.client.slow.io.warning.threshold.ms 30000
这两个参数 是根据报错信息,查看 DfsClientConf类,用到的getLong方法取的参数,就这两个 是30s的,所以这里提前指定,覆盖默认配置。

写入时 可能会报错 地址不能识别,或者写入不进去,这时候需要检查 hdfs配置文件,host文件,是不是能ping通 hdfs文件中的 namenode service地址 。写入不进去需要检查 路径的权限,和程序运行时的写入用户 。粗暴的方法是把hive表的存储路径权限 改成777

最后,在调研直接写入hdfs文件方式时,遇到的一些问题。其实方法1 写入hive的方式 底层也是调用的stramingFileSink 的方式。
分为两种,行文件和 列文件 forRowFormat forBulkFormat
这两种配置方式都需要配置表的实体类或者schema(列式导入)
行式 采用 SimpleStringEncoder方式,需要重写 实体类的toString方法 。
列式 一般采用 forReflectrecord方式,也是指定实体类,这里在写入parquet文件会有依赖冲突,
主要是会调用 hive-exec下的Schema类 ,报get LogicalType 方法未找到,需要注释掉这个依赖(采用exclude的方式没生效 )

Original: https://blog.csdn.net/qq_42265026/article/details/127105599
Author: qq_42265026
Title: Flink写入hive的问题简单记录

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/818122/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球