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


Reply via email to