Flink故障排除
使用不同用户执行yarn-session创建Flink集群失败
使用Flink过程中,具有两个相同权限用户testuser和bdpuser。使用用户testuser创建Flink集群正常,但是切换至bdpuser用户创建Fllink集群时,执行yarn-session.sh命令报错:
2019-01-02 14:28:09,098 | ERROR | [main] | Ensure path threw exception | org.apache.flink.shaded.curator.org.apache.curator.framework.imps.CuratorFrameworkImpl (CuratorFrameworkImpl.java:566) org.apache.flink.shaded.zookeeper.org.apache.zookeeper.KeeperException$NoAuthException: KeeperErrorCode = NoAuth for /flink/application_1545397824912_0022
原因是高可用配置项未修改。由于在Flink的配置文件中,“high-availability.zookeeper.client.acl”默认为“creator”,仅创建者有权限访问,新用户无法访问ZooKeeper上的目录导致yarn-session.sh执行失败。
解决方法如下:
- 修改客户端配置文件“conf/flink-conf.yaml”中配置项“high-availability.zookeeper.path.root”,例如:
high-availability.zookeeper.path.root: flink2
- 重新提交Flink任务。
Flink客户端执行命令报错security.kerberos.login.keytab
客户端安装成功,执行客户端命令例如yarn-session.sh时报错,提示如下:
[root@host01 bin]# yarn-session.sh 2018-10-25 01:22:06,454 | ERROR | [main] | Error while trying to split key and value in configuration file /opt/flinkclient/Flink/flink/conf/flink-conf.yaml:80: "security.kerberos.login.keytab: " | org.apache.flink.configuration.GlobalConfiguration (GlobalConfiguration.java:160) Exception in thread "main" org.apache.flink.configuration.IllegalConfigurationException: Error while parsing YAML configuration file :80: "security.kerberos.login.keytab: "
在安全集群环境下,Flink需要进行安全认证。当前客户端未进行相关安全认证设置。
- Flink整个系统有两种认证方式:
- 使用kerberos认证:Flink yarn client、Yarn Resource Manager、JobManager、HDFS、TaskManager、Kafka和Zookeeper。
- 使用YARN内部的认证机制:Yarn Resource Manager与Application Master(简称AM)。
- 如果用户安装安全集群需要使用kerberos认证和security cookie认证。根据日志提示,发现配置文件中“security.kerberos.login.keytab :”配置项错误,未进行安全配置。
解决方法如下:
- 从MRS上下载用户的keytab认证文件,并放置到Flink客户端所在节点的某个目录下。
- 在“flink-conf.yaml”文件中配置:
- keytab路径。
security.kerberos.login.keytab: /home/flinkuser/keytab/abc222.keytab
- “/home/flinkuser/keytab/abc222.keytab”表示的是用户目录,为1中放置目录。
- 请确保客户端用户具备对应目录权限。
- principal名。
security.kerberos.login.principal: abc222
- 对于HA模式,如果配置了ZooKeeper,还需要设置ZooKeeper Kerberos认证相关的配置。
zookeeper.sasl.disable: false security.kerberos.login.contexts: Client
- 如果用户对于Kafka Client和Kafka Broker之间也需要做Kerberos认证,配置如下:
security.kerberos.login.contexts: Client,KafkaClient
- keytab路径。