2014-09-10 2 views
4

프로그래밍 방식으로 작업을 시작하려면 YarnClient를 사용하고 있습니다. 내가 운영하는 클러스터는 kerberosized입니다.클라이언트가 다음을 통해 인증 할 수 없습니다. [TOKEN, KERBEROS]

"yarn jar examples.jar wordcount ..."를 통해 제출 된 일반지도 축소 작업이 작동합니다.

프로그래밍 방식으로 제출하려고하는 작업은 그렇지 않습니다.

14/09/04 21:14:29 ERROR client.ClientService: Error happened during application submit: Application application_1409863263326_0002 failed 2 times due to AM Container for appattempt_1409863263326_0002_000002 exited with exitCode: -1000 due to: Failed on local exception: java.io.IOException: org.apache.hadoop.security.AccessControlException: Client cannot authenticate via:[TOKEN, KERBEROS]; Host Details : local host is: "yarn-c1-n1.clouddev.snaplogic.com/10.184.28.108"; destination host is: "yarn-c1-cdh.clouddev.snaplogic.com":8020; .Failing this attempt.. Failing the application. 14/09/04 21:14:29 ERROR client.YClient: Application submission failed

코드는 다음과 같은 : :이 오류가

ClientContext context = createContextFrom(args); 
YarnConfiguration configuration = new YarnConfiguration(); 
YarnClient yarnClient = YarnClient.createYarnClient(); 
yarnClient.init(configuration); 
ClientService client = new ClientService(context, yarnClient, new InstallManager(FileSystem.get(configuration))); 
LOG.info(Messages.RUNNING_CLIENT_SERVICE); 
boolean result = client.execute(); 
나는 생각했다

그 아마의 효과에 뭔가를 추가 :

yarnClient.getRMDelegationToken(new Text(InetAddress.getLocalHost().getHostAddress())); 

아마도 내 비애를 누그러 수 ,하지만 그건 도움이되지 않는 것 같습니다. 어떤 도움이라도 대단히 감사하겠습니다.

답변

2

좋아, 시간과 시간과 시간 후에 우리는 이것을 알아 냈습니다. 다음 세대의 코더 모두, hadoop의 문서 부족으로 영원히 괴롭힘 :

자격 증명을 얻기 위해 UserGroupInformation 객체에서 토큰을 가져와야합니다. 그런 다음 ContainerLaunchContext에 토큰을 설정해야합니다.

+0

이 작업을 수행하는 방법을 보여주는 코드 스 니펫은 정말 좋을 것입니다. 나는이 문제에 어려움을 겪고 있으며, 당신이 말하는 것을 어떻게하는지 분명하지 않습니다. – quux00

+0

관련 내용 : https://groups.google.com/a/cloudera.org/forum/#!topic/scm-users/D0qbrngp59g –

0

hdfs 경로에서 HA의 논리 URI 대신 실제 이름 노드를 사용하는 경우에도이 오류가 발생합니다.

이것은 논리 uri 대신 namenode uri를 찾으면 kerberos UGI 대신 간단한 UGI를 사용하려고하는 non-HA 파일 시스템을 생성하기 때문입니다.

관련 문제