2017-11-24 24 views
-1

에지 노드에서 sqoop 작업을 실행할 때 해당 작업이 잘되고 Oracle에서 데이터를 추출 할 수 있지만 crontab에서 동일한 작업을 예약하면 kerberos 보안 오류가 발생합니다.kerberos 보안이있는 Sqoop이 cron에서 작동하지 않는 경우 GSSException이 발생합니다

동일한 문제가 hortonworks 사이트 (링크 참조)에서보고되었지만 유효한 답변이 없습니다.

https://community.hortonworks.com/questions/61856/kerberos-ticket-error-in-a-cron-job.html

나는 cron 작업의 시작 시간과 10 시간의 유효 전에 유효한 Kerberos 티켓을 가지고,하지만 난 5 분 안에 크론 작업을 예약 할 때, 그것의 Kerberos 오류가 발생.

cron 작업에서 sqoop 가져 오기를 시작하기 전에 수행해야 할 단계는 무엇입니까?

17/11/23 11시 24분 17초 오류 tool.ImportTool : 가져 오기 작업을 실행 IOException이 발생했습니다 때 java.io.IOException : 지역 예외에 실패 : 자바 아래

은 자세한 오류 메시지입니다 .io.IOException : javax.security.sasl.SaslException :

GSS 실패 [GSSException가에 의해 발생 : 유효한 자격 증명을 제공하지 (메커니즘 수준 : 어떤에서 Kerberos TGT를 찾지 못했습니다)]를 개시 할;

호스트 정보 : 로컬 호스트 : "ps2pr028380.express-scripts.com/10.221.171.22"; 대상 호스트 : "ps2pr028377.express-scripts.com": 8020; at org.apache.hadoop.net.NetUtils.wrapException (NetUtils.java:782) at org.apache.hadoop.ipc.Client.getRpcResponse (Client.java:1558) at org.apache.hadoop.ipc. (org.apache.hadoop.ipc.Client.call에서 Client.call (Client.java:1498) sun.reflect.NativeMethodAccessorImpl.invoke0에서 com.sun.proxy에서 233) . $ Proxy11.getDelegationToken (알 소스) org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.getDelegationToken (ClientNamenodeProtocolTranslatorPB.java:980에서 ) (네이티브 메소드) 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 (org.apache.hadoop.io.retry.RetryInvocationHandler.invoke에서 org.apache.hadoop.io.retry.RetryInvocationHandler.invoke (RetryInvocationHandler.java:203) 에서 RetryInvocationHandler.java:291) (RetryInvocationHandler.java:185) org.apache.hadoop.hdfs.DistributedFileSystem.getDelegationToken에서 com.sun.proxy에서 . $ Proxy12.getDelegationToken (알 수없는 소스) org.apache.hadoop.hdfs.DFSClient.getDelegationToken (DFSClient.java:1041)에서 (DistributedFileSystem.java:1688) at org.apache.hadoop.fs.FileSystem.collectDelegationToke NS org.apache.hadoop.hdfs.DistributedFileSystem.addDelegationTokens에서 org.apache.hadoop.fs.FileSystem.addDelegationTokens에서 (FileSystem.java:549) (FileSystem.java:527) (DistributedFileSystem.java:2400)에서 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.getTokensForNamenodes (TokenCache.java:80) at org.apache.hadoop.mapreduce.lib.output.FileOutputFormat.checkOutputSpecs (FileOutputFormat.java:142) at org.apache.hadoop.mapreduce.JobSubmitter.checkSpecs (JobSubmitter.java : 266) at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal (JobSubmitter.java:139) at org.apache.hadoop.mapreduce.Job $ 10.run (Job.java:1290) at org.apache.hadoop .mapreduce.Job $ 10.run (Job.java:1287)at java.security.AccessController.doPrivileged (네이티브 메소드) at javax.security.auth.Subject.doAs (Subject.java:422) at org.apache .hadoop.security.UserGroupInformation.doAs (UserGroupInformation.java:1866) at org.apache.hadoop.mapreduce.Job.submit (Job.java:1287)(org.apache.sqoop.mapreduce.ImportJobBase.doSubmitJob (ImportJobBase.java:200) 에서) (importJobBase.java:270) at org.apache.sqoop.manager.SqlManager.importQuery (SqlManager.java:748) at org.apache.sqoop.manager.OracleManager.importQuery (OracleManager.java:454) at org.apache.sqoop.tool.ImportTool.importTable (ImportTool.java:509) at org.apache.sqoop.tool. (org.apache.sqoop.Sqoop.run (Sqoop.java:147) ) ToolRunner.java:76) at org.apache.sqoop.Sqoop.runSqoop (Sqoop.java:183) at org.apache.sqoop.Sqoop.runTool (Sqoop.java:225) at org.apache.sqoop. Sqoop.runTool (Sqoop.java:234) at org.apache.sqoop.Sqoop.main (Sqoop.java:243) 에 의해 발생 : java.io.IOException : javax.security.sasl.SaslException : GSS 시작 실패 [ GSSException에 의해 발생 : 유효한 자격증 명이 없습니다 (메커니즘 레벨 : Kerberos tgt를 찾지 못했습니다)] at org.apache.hadoop.ipc.Client $ Connection $ 1.run (Client.java:720) at java.security.AccessController .doPrivileged (네이티브 메소드) at javax.security.auth.Subject.doAs (Subject.java:422) at org.apache.hadoop.security.UserGroupInformation.doAs (UserGroupInformation.java:1866) at org.apache.hadoop.ipc.Client $ Connection.handleSaslConnectionFailure (Client.java:683) at org.apache.hadoop.ipc.Client $ Connection.setupIOstreams (Client.java:770) at org.apache. hadoop.ipc.Client $ Connection.access $ 3200 (Client.java:397) at org.apache.hadoop.ipc.Client.getConnection (Client.java:1620) at org.apache.hadoop.ipc.Client.call (Client.java:1451) ... 43 more 에 의해 발생 : javax.security.sasl.SaslException : GSS 초기화 실패 [GSSException에 의해 발생 : 유효한 자격 증명이 제공되지 않음 (메커니즘 수준 : Kerberos tgt를 찾지 못함)] com.sun.security.sasl.gsskerb.GssKrb5Client.evaluateChallenge (GssKrb5Client.java:211) at org.apache.hadoop.security.SaslRpcClient.saslConnect (SaslRpcClient.java:413) at org.apache.hadoop.ipc.Client $ Connection.setupSaslConnection (Client.java:595) at org.apache.hadoop.ipc.Client $ Connection.access $ 2000 (Client.java:397) at org.apache .hadoop.ipc.Client $ Connection $ 2.run (Client.java:762) at org.apache.hadoop.ipc.Client $ Connection $ 2.run (Client.java:758) at java.security.AccessController.doPrivileged (네이티브 메소드) at javax.security.auth.Subject.doAs (Subject.java:422) at org.apache.hadoop.security.UserGroupInformation.doAs (UserGroupInformation.java:1866) at org.apache.hadoop. ipc.Client $ Connection.setupIOstreams (Client.java:757) ...46 more 발생 원인 : GSSException : 유효한 자격 증명이 제공되지 않음 (메커니즘 수준 : Kerberos tgt를 찾지 못함)at sun.security.jgss.krb5.Krb5InitCredential.getInstance (Krb5InitCredential.java:147) at sun.security.jgss sun.security.jgss.GSSManagerImpl.getMechanismContext에서 sun.security.jgss.krb5.Krb5MechFactory.getMechanismContext (Krb5MechFactory.java:187) 에서 .krb5.Krb5MechFactory.getCredentialElement (Krb5MechFactory.java:122) (GSSManagerImpl.java:224 sun.security.jgss.GSSContextImpl.initSecContext (GSSContextImpl.java:212 AT) ) sun.security.jgss.GSSContextImpl.initSecContext (GSSContextImpl.java:179에서 )에서 com.sun.security.sasl.gsskerb.GssKrb5Client .evaluateChallenge (GssKrb5Client.java:192) ... 55 more

+1

아래의 다른 솔루션 링크를 찾아주십시오 : 내 스크립트에 주석 아래에 추가 sqoop이 시작되기 전에 이것을 호출했다. kinit -kt /home/userName/userName.keytab [email protected] –

+0

"답변"으로 추가하십시오. 그런 다음 2 일 후에 다시 받아 와서 직접 수락하십시오. –

+0

귀하의 의견에 감사드립니다 Heron –

답변

1

나는 내 자신의 질문을 해결했다. 나는 아래 스크립트를 주석에 추가하여 sqoop을 시작하기 전에 이것을 호출했다.

kinit -kt /home/userName/userName.keytab [email protected] 

우리는 호튼 웍스 클러스터를 사용하는, 그래서 그들은이 문제에 대한 또 다른 해결책을 가지고, 나는 내 자신의 질문을 해결

https://community.hortonworks.com/questions/149168/sqoop-with-kerberos-security-not-working-in-cron-t.html

+0

답변을 스스로 수락하여 녹색으로 표시하고 검색 결과에서 우연히 발견 될 수있는 다른 사람들에게 강조 표시하십시오. –

+1

알리미 주셔서 감사합니다. 나는 대답을 수락했다. –