You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-zh@flink.apache.org by yihan <x2...@126.com> on 2023/04/08 16:12:55 UTC

回复:Kerberos加密Yarn集群上的Flink任务写入其他未互信的加密HDFS是否可能

Biao Geng:


十分感谢您的回复。



这个问题是我的同事之前向我提出的。我当时直觉感觉是不行的。现在周末放空的时候再想想这个问题。


我考虑的是,提交任务使用到本集群的principal和keytab和要他写入的另一集群用到的principal和keytab在hadoop的UserGroupInformation类login时会冲突,导致要么任务无法在本集群顺利做如checkpoint之类的操作,要么就是无法写入另一集群的HDFS。


我想任务提交到非加密yarn上时确实是可行的,但是对于加密yarn来说就不行了。



不知道上面考虑是否合理。
---- 回复的原邮件 ----
| 发件人 | Geng Biao<bi...@gmail.com> |
| 发送日期 | 2023年04月08日 23:20 |
| 收件人 | user-zh@flink.apache.org<us...@flink.apache.org> |
| 主题 | Re: Kerberos加密Yarn集群上的Flink任务写入其他未互信的加密HDFS是否可能 |
Hi yihan,
这个本质上可以理解成在Flink的taskmanager运行一个UDF(UDF做的事情是写另一个Kerberos HDFS集群),所以技术上是可能的。
我之前走通过普通Yarn集群的Flink任务写入另一个Kerberos HDFS集群的流程,整体操作感觉比较复杂,通常而言,你需要如下步骤:
1. 准备一个HAOOP_CONF_DIR,它包含hdfs-site.xml、core-site.xml等配置,除此之外还要准备kerberos鉴权所需的krb5.conf等文件,使得你在使用这个HAOOP_CONF_DIR以及通过kinit命令完成授权后,可以在你的Yarn集群通过Hadoop client访问另一个加密HDFS(例如可以get/put文件)。
2. 在你的flink应用中,通过containerized.taskmanager.env.XX、containerized.master.env.XX这2类配置项来指定需要使用的HADOOP_USER_NAME、HAOOP_CONF_DIR(你需要把步骤1准备好的HAOOP_CONF_DIR通过yarn.ship-files参数进行指定,从而使得它被ship到YARN TM container中,然后-D containerized.taskmanager.env. HAOOP_CONF_DIR=./hadoop-conf)。类似的,用于访问目标kerberos集群的krb5.conf也需要ship。

整体流程比较容易遇到很多kerberos相关报错,可能需要多做些尝试与搜素。

Best,
Biao Geng


From: yihan <x2...@126.com>
Date: Saturday, April 8, 2023 at 10:26 PM
To: user-zh@flink.apache.org <us...@flink.apache.org>
Subject: Kerberos加密Yarn集群上的Flink任务写入其他未互信的加密HDFS是否可能
请教如标题问题,谢谢。

Re: 回复:Kerberos加密Yarn集群上的Flink任务写入其他未互信的加密HDFS是否可能

Posted by Geng Biao <bi...@gmail.com>.
你的考虑是对的;可能需要2个KDC互信<https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/system-level_authentication_guide/using_trusts>,来使得一个keytab访问2个kerberos集群。这个其实就是我在刚才说的第一步操作中要考虑的事情。本质上是打通2个kerberos集群。

From: yihan <x2...@126.com>
Date: Sunday, April 9, 2023 at 12:13 AM
To: Geng Biao <bi...@gmail.com>
Cc: user-zh@flink.apache.org <us...@flink.apache.org>
Subject: 回复:Kerberos加密Yarn集群上的Flink任务写入其他未互信的加密HDFS是否可能
Biao Geng:


十分感谢您的回复。

这个问题是我的同事之前向我提出的。我当时直觉感觉是不行的。现在周末放空的时候再想想这个问题。


我考虑的是,提交任务使用到本集群的principal和keytab和要他写入的另一集群用到的principal和keytab在hadoop的UserGroupInformation类login时会冲突,导致要么任务无法在本集群顺利做如checkpoint之类的操作,要么就是无法写入另一集群的HDFS。


我想任务提交到非加密yarn上时确实是可行的,但是对于加密yarn来说就不行了。


不知道上面考虑是否合理。
---- 回复的原邮件 ----
发件人
Geng Biao<bi...@gmail.com>
发送日期
2023年04月08日 23:20
收件人
user-zh@flink.apache.org<us...@flink.apache.org>
主题
Re: Kerberos加密Yarn集群上的Flink任务写入其他未互信的加密HDFS是否可能
Hi yihan,
这个本质上可以理解成在Flink的taskmanager运行一个UDF(UDF做的事情是写另一个Kerberos HDFS集群),所以技术上是可能的。
我之前走通过普通Yarn集群的Flink任务写入另一个Kerberos HDFS集群的流程,整体操作感觉比较复杂,通常而言,你需要如下步骤:
1. 准备一个HAOOP_CONF_DIR,它包含hdfs-site.xml、core-site.xml等配置,除此之外还要准备kerberos鉴权所需的krb5.conf等文件,使得你在使用这个HAOOP_CONF_DIR以及通过kinit命令完成授权后,可以在你的Yarn集群通过Hadoop client访问另一个加密HDFS(例如可以get/put文件)。
2. 在你的flink应用中,通过containerized.taskmanager.env.XX、containerized.master.env.XX这2类配置项来指定需要使用的HADOOP_USER_NAME、HAOOP_CONF_DIR(你需要把步骤1准备好的HAOOP_CONF_DIR通过yarn.ship-files参数进行指定,从而使得它被ship到YARN TM container中,然后-D containerized.taskmanager.env. HAOOP_CONF_DIR=./hadoop-conf)。类似的,用于访问目标kerberos集群的krb5.conf也需要ship。

整体流程比较容易遇到很多kerberos相关报错,可能需要多做些尝试与搜素。

Best,
Biao Geng


From: yihan <x2...@126.com>
Date: Saturday, April 8, 2023 at 10:26 PM
To: user-zh@flink.apache.org <us...@flink.apache.org>
Subject: Kerberos加密Yarn集群上的Flink任务写入其他未互信的加密HDFS是否可能
请教如标题问题,谢谢。