Hello Rong, Chesnay,
Thank you for your answer, the way we are trying to launch the job is
through a scheduler (similar to oozie) where we have a keytab for the
scheduler user and with that keytab we get delegation tokens
impersonating
the right user (owner of the job). But the only way I was able to
make this
work is by getting a ticket (through kinit).
As a comparison, if I launch a spark job (without doing kinit) just with
the delegation tokens, it works okay. So I guess Spark does something
extra.
This is as far as I could go but at this point I’m not sure if this is
something just not supported by Flink or I’m doing something wrong.
Thank you,
Juan
*From: *Rong Rong <walter...@gmail.com>
*Date: *Saturday, January 4, 2020 at 6:06 PM
*To: *Chesnay Schepler <ches...@apache.org>
*Cc: *Juan Gentile <j.gent...@criteo.com>, "user@flink.apache.org" <
user@flink.apache.org>, Oleksandr Nitavskyi <o.nitavs...@criteo.com>
*Subject: *Re: Yarn Kerberos issue
Hi Juan,
Chesnay was right. If you are using CLI to launch your session cluster
based on the document [1], you following the instruction to use kinit
[2]
first seems to be one of the right way to go.
Another way of approaching it is to setup the kerberos settings in the
flink-conf.yaml file [3]. FlinkYarnSessionCli will be able to pick up
your
keytab files and run the CLI securely.
As far as I know the option `security.kerberos.login.use-ticket-cache`
doesn't actually change the behavior of the authentication process,
it is
more of a hint whether to use the ticket cache instantiated by
`kinit`. If
you disable using the ticket cache, you will have to use the
"keytab/principle" approach - this doc [4] might be helpful to explain
better.
Thanks,
Rong
[1]
https://ci.apache.org/projects/flink/flink-docs-stable/ops/deployment/yarn_setup.html#start-flink-session
<https://eur03.safelinks.protection.outlook.com/?url=https%3A%2F%2Fci.apache.org%2Fprojects%2Fflink%2Fflink-docs-stable%2Fops%2Fdeployment%2Fyarn_setup.html%23start-flink-session&data=02%7C01%7Cj.gentile%40criteo.com%7C62d8034f25d94e52ccb008d791387e31%7C2a35d8fd574d48e3927c8c398e225a01%7C1%7C0%7C637137544137797845&sdata=d6QcPdLPDolW0Nv4jo469HyxP99E5mEGBOUjVw219a0%3D&reserved=0>
[2]
https://ci.apache.org/projects/flink/flink-docs-stable/ops/security-kerberos.html#using-kinit-yarn-only
<https://eur03.safelinks.protection.outlook.com/?url=https%3A%2F%2Fci.apache.org%2Fprojects%2Fflink%2Fflink-docs-stable%2Fops%2Fsecurity-kerberos.html%23using-kinit-yarn-only&data=02%7C01%7Cj.gentile%40criteo.com%7C62d8034f25d94e52ccb008d791387e31%7C2a35d8fd574d48e3927c8c398e225a01%7C1%7C0%7C637137544137807833&sdata=pPCm4%2BNzJ6oQ0tA5%2B7uSLR3BuGAxbJiCI8xs1nc355Y%3D&reserved=0>
[3]
https://ci.apache.org/projects/flink/flink-docs-stable/ops/security-kerberos.html#yarnmesos-mode
<https://eur03.safelinks.protection.outlook.com/?url=https%3A%2F%2Fci.apache.org%2Fprojects%2Fflink%2Fflink-docs-stable%2Fops%2Fsecurity-kerberos.html%23yarnmesos-mode&data=02%7C01%7Cj.gentile%40criteo.com%7C62d8034f25d94e52ccb008d791387e31%7C2a35d8fd574d48e3927c8c398e225a01%7C1%7C0%7C637137544137807833&sdata=rsVxD%2B3QteiNPaIRQriF3lTKV22Rxk7TyU0hbCDr9pk%3D&reserved=0>
[4]
https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/connectors/kafka.html#enabling-kerberos-authentication-for-versions-09-and-above-only
<https://eur03.safelinks.protection.outlook.com/?url=https%3A%2F%2Fci.apache.org%2Fprojects%2Fflink%2Fflink-docs-release-1.9%2Fdev%2Fconnectors%2Fkafka.html%23enabling-kerberos-authentication-for-versions-09-and-above-only&data=02%7C01%7Cj.gentile%40criteo.com%7C62d8034f25d94e52ccb008d791387e31%7C2a35d8fd574d48e3927c8c398e225a01%7C1%7C0%7C637137544137807833&sdata=urJNklA%2Bz9IVV7k0H%2Fp8k5NWm526wHcXiw2qY4tiI7g%3D&reserved=0>
On Fri, Jan 3, 2020 at 7:20 AM Chesnay Schepler <ches...@apache.org>
wrote:
From what I understand from the documentation, if you want to use
delegation tokens you always first have to issue a ticket using
kinit; so
you did everything correctly?
On 02/01/2020 13:00, Juan Gentile wrote:
Hello,
Im trying to submit a job (batch worcount) to a Yarn cluster. I’m trying
to use delegation tokens and I’m getting the following error:
*org.apache.flink.client.deployment.ClusterDeploymentException: Couldn't
deploy Yarn session cluster*
* at
org.apache.flink.yarn.AbstractYarnClusterDescriptor.deploySessionCluster(AbstractYarnClusterDescriptor.java:423)*
* at
org.apache.flink.client.cli.CliFrontend.runProgram(CliFrontend.java:262)*
* at
org.apache.flink.client.cli.CliFrontend.run(CliFrontend.java:216)*
* at
org.apache.flink.client.cli.CliFrontend.parseParameters(CliFrontend.java:1053)*
* at
org.apache.flink.client.cli.CliFrontend.lambda$main$11(CliFrontend.java:1129)*
* at java.security.AccessController.doPrivileged(Native
Method)*
* at javax.security.auth.Subject.doAs(Subject.java:422)*
* at
org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1920)*
* at
org.apache.flink.runtime.security.HadoopSecurityContext.runSecured(HadoopSecurityContext.java:41)*
* at
org.apache.flink.client.cli.CliFrontend.main(CliFrontend.java:1129)*
*Caused by: org.apache.hadoop.ipc.RemoteException(java.io.IOException):
Delegation Token can be issued only with kerberos or web authentication*
* at
org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getDelegationToken(FSNamesystem.java:7560)*
* at
org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.getDelegationToken(NameNodeRpcServer.java:548)*
* at
org.apache.hadoop.hdfs.server.namenode.AuthorizationProviderProxyClientProtocol.getDelegationToken(AuthorizationProviderProxyClientProtocol.java:663)*
* at
org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.getDelegationToken(ClientNamenodeProtocolServerSideTranslatorPB.java:981)*
* at
org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java)*
* at
org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:617)*
* at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:1073)*
* at
org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2221)*
* at
org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2217)*
* at java.security.AccessController.doPrivileged(Native
Method)*
* at javax.security.auth.Subject.doAs(Subject.java:422)*
* at
org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1920)*
* at
org.apache.hadoop.ipc.Server$Handler.run(Server.java:2215) *
* at org.apache.hadoop.ipc.Client.call(Client.java:1472)*
* at org.apache.hadoop.ipc.Client.call(Client.java:1409)*
* at
org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:230)*
* at com.sun.proxy.$Proxy18.getDelegationToken(Unknown
Source)*
* at
org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.getDelegationToken(ClientNamenodeProtocolTranslatorPB.java:928)*
* at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)*
* at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)*
* at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)*
* at java.lang.reflect.Method.invoke(Method.java:498)*
* at
org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:256)*
* at
org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:104)*
* at com.sun.proxy.$Proxy19.getDelegationToken(Unknown
Source)*
* at
org.apache.hadoop.hdfs.DFSClient.getDelegationToken(DFSClient.java:1082)*
* at
org.apache.hadoop.hdfs.DistributedFileSystem.getDelegationToken(DistributedFileSystem.java:1499)*
* at
org.apache.hadoop.fs.FileSystem.collectDelegationTokens(FileSystem.java:546)*
* at
org.apache.hadoop.fs.FileSystem.collectDelegationTokens(FileSystem.java:557)*
* at
org.apache.hadoop.fs.FileSystem.addDelegationTokens(FileSystem.java:524)*
* at
org.apache.hadoop.mapreduce.security.TokenCache.obtainTokensForNamenodesInternal(TokenCache.java:140)*
* at
org.apache.hadoop.mapreduce.security.TokenCache.obtainTokensForNamenodesInternal(TokenCache.java:100)*
* at
org.apache.hadoop.mapreduce.security.TokenCache.obtainTokensForNamenodes(TokenCache.java:80)*
* at
org.apache.flink.yarn.Utils.setTokensFor(Utils.java:235)*
* at
org.apache.flink.yarn.AbstractYarnClusterDescriptor.startAppMaster(AbstractYarnClusterDescriptor.java:972)*
* at
org.apache.flink.yarn.AbstractYarnClusterDescriptor.deployInternal(AbstractYarnClusterDescriptor.java:545)*
* at
org.apache.flink.yarn.AbstractYarnClusterDescriptor.deploySessionCluster(AbstractYarnClusterDescriptor.java:416)*
The kerberos configuration in this case is the default one. Then I tried
with this option set to false ‘security.kerberos.login.use-ticket-cache‘
but I get the same error.
I was able to solve the problem by issuing a ticket (with kinit) but I’d
like to know if it’s possible to make flink work with delegation
tokens and
if so what is the right config.
Thank you,
Juan