FLINK1.12.2 使用问题记录 (持续更新)

问题记录清单

1.使用StreamExecutionEnvironment创建StreamTableEnvironment写hive报错

2.在IDE中无法写入hive

3.flink使用catalog写入hive报错没有权限(相同问题在sparksql写入hive时也有)

4.flink源码编译问题

 

1.使用StreamExecutionEnvironment创建StreamTableEnvironment写hive报错

问题描述:job在flink web界面中状态一直显示为restarting,检查job的exception报错如下图所示:

Cannot load user class:

org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer

FLINK1.12.2 使用问题记录 (持续更新)_第1张图片

网上没有搜到相关问题,实际上代码中并未使用到FlinkKafkaConsumer,而且flink-connector-kafka_2.11.jar已经在工程依赖中,flink集群的lib中也有该jar包。

因为代码最初是直接使用TableEnvironment实现读取kafka写入hive的,分析认为报错代码与flink的StreamExecutionEnvironment创建StreamTableEnvironment有关。报错代码如下:

FLINK1.12.2 使用问题记录 (持续更新)_第2张图片

原因未知,猜测与stream api和table api体系的冲突导致的。

解决办法:将checkpoint的相关设置放在StreamExecutionEnvironment中,而不是StreamTableEnvironment的config中,变更后代码如下:

FLINK1.12.2 使用问题记录 (持续更新)_第3张图片

2.在IDE中无法写入hive

问题描述:相同代码打包后从flink web中上传提交是可以正常写入hive的,但是在ide中直接运行无法写入hive。

原因:flink写入hive依赖于hadoop环境,IDE中运行缺少hadoop环境,项目依赖hadoop的jar包也不行。

解决办法:1.windows下载hadoop环境包winutils,注意对应hadoop版本

2.windows配置系统环境变量HADOOP_HOME

3.flink使用catalog写入hive报错没有权限

问题描述:远程连接hive时报错没有访问权限

Permission denied: user=xxxx, access=WRITE, inode="/":root:supergroup:drwxr-xr-x

此问题与使用sparksql连接hive时一样。

原因:从这个异常可以看出,客户端的用户是xxxx(jar运行的用户),要求的write权限,但是hdfs的节点上用户是root,从而判断用户没有权限,拒绝访问。

登陆hdfs有2种安全认证模式:弱认证和强认证。弱认证只要求登陆使用hdfs目录用户名,强认证需要配合kerberos。而弱认证时默认取的是系统登陆用户名来远程连接hdfs。

解决办法:可以直接修改hdfs目录的权限为777,但实际安全认证时不会这么干,那么弱认证情况下代码中需要加入

System.setProperty("HADOOP_USER_NAME","root"); 

或者使用强认证登陆hdfs。

4.flink源码编译问题

遇到两个问题:

1.依赖下载失败

删除本地maven仓库中的jar包目录后会重新下载,直到所有包都下载完成。对于访问外网有麻烦的童鞋可以换成阿里云的maven仓库地址https://maven.aliyun.com/repository/apache-snapshots。

2.要求代码格式化

应该是Flink源码中要求的,编译会提示使用mvn spotless进行格式化。但是IDE中默认maven仓库地址是10.10.xx,总是执行失败。查询该命令后发现可以指定自己的setting.xml,命令如下:

mvn spotless:apply -s C:\Users\xxx\.m2\settings.xml

从终端进入flink-connector-jdbc的目录后,顺利执行,再次编译即可。

 

你可能感兴趣的:(FLINK,1.12.2,学习实践记录,java,hadoop,hive,flink)