티스토리 뷰
반응형
kerberos 인증을 위한 정보는 기본적으로는 /etc/krb5.conf 가 기본경로로 되어있다. 하지만, 경우에 따라서는 이 파일을 변경하지 않고 임의로 지정하여 실행해야 하는 경우가 생긴다. 이때 hadoop 명령어 실행시 관련 경로를 지키지 않았을경우 다음과 같은 오류가 발생된다.
# -----------------------------------------------
# 커버로스 인증 (krb.conf 가 별도의 경로에 있음을 인지하자)
# -----------------------------------------------
% export KEYTAB_PATH=/Users/myUser/hadoop3/keytab
% export KRB5_CONFIG=/Users/myUser/hadoop3/keytab/krb5.conf
% export HADOOP_HOME=/Users/myUser/hadoop3/hadoop-3.3.4
% export HADOOP_CONF_DIR=/Users/myUser/hadoop3/hadoop-3.3.4/etc/hadoop
% export PATH=$PATH:$HADOOP_HOME/bin
% export KRB5CCNAME=/tmp/sample_ccache
% kinit -f -a -r 3600m -k -t ${KEYTAB_PATH}/sample.keytab -c /tmp/sample_ccache sample@MY-DEV.MYHOME.COM
# -----------------------------------------------
# 하둡명령어 호출
# -----------------------------------------------
% hadoop fs -ls hdfs://myNameservice/
Exception in thread "main" java.lang.IllegalArgumentException: Can't get Kerberos realm
at org.apache.hadoop.security.HadoopKerberosName.setConfiguration(HadoopKerberosName.java:71)
at org.apache.hadoop.security.UserGroupInformation.initialize(UserGroupInformation.java:315)
at org.apache.hadoop.security.UserGroupInformation.setConfiguration(UserGroupInformation.java:366)
at org.apache.hadoop.fs.FsShell.init(FsShell.java:102)
at org.apache.hadoop.fs.FsShell.run(FsShell.java:303)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:81)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:95)
at org.apache.hadoop.fs.FsShell.main(FsShell.java:390)
Caused by: java.lang.IllegalArgumentException: KrbException: Cannot locate default realm
at java.security.jgss/javax.security.auth.kerberos.KerberosPrincipal.<init>(KerberosPrincipal.java:179)
at org.apache.hadoop.security.authentication.util.KerberosUtil.getDefaultRealm(KerberosUtil.java:120)
at org.apache.hadoop.security.HadoopKerberosName.setConfiguration(HadoopKerberosName.java:69)
... 7 more
해결방법
java 옵션에서 krb5.conf 를 사용자가 임의의 경로에 사용했다면, HADOOP_OPTS 환경변수에 사용자가 사용한 krb5 경로를 직접 지정하여 해결할 수 있다.
% export KRB5_CONFIG=/Users/myUser/hadoop3/keytab/krb5.conf
% export HADOOP_OPTS="-Djava.security.krb5.conf=${KRB5_CONFIG}"
% hadoop fs -ls hdfs://myNameservice/
2023-03-07 12:47:09,950 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
2023-03-07 12:47:10,274 WARN shortcircuit.DomainSocketFactory: The short-circuit local reads feature cannot be used because libhadoop cannot be loaded.
Found 16 items
...
drwxrwxrwx - hdfs hdfs 0 2023-02-24 12:16 hdfs://myNameservice/tmp
drwxr-xr-x - hdfs hdfs 0 2023-02-24 12:16 hdfs://myNameservice/user
drwxr-xr-x - hdfs hdfs 0 2022-07-08 14:26 hdfs://myNameservice/warehouse
원인찾기
원인을 찾기 가장 좋은 방법은 로깅 메시지를 더 많이 출력하면 원인을 찾기 더 유리하다. 아래오 같은 옵션을 추가후 실행하면, 하둡명령어 실행시 더 많은 로깅메시지가 출력되기 때문에 원인을 찾기 쉬울것이다. 나도 이 디버깅 메시지에서 krb5.conf 경로가 /etc/krb5.conf 를 바라보는걸 확인했고 이걸 직접 지정하여 해결하는 방향성을 찾았다. 참고하기 바란다.
export HADOOP_OPTS="-Dsun.security.krb5.debug=true"
export HADOOP_ROOT_LOGGER=DEBUG,console
반응형
'데이터처리 > Hadoop' 카테고리의 다른 글
[Hadoop] HDFS 파일생성 여부 체크방법 (loop 돌면서) (0) | 2023.05.23 |
---|---|
[Hadoop] 커버로스 인증을 변경후 접근시 not allowed 오류 (0) | 2023.03.14 |
[하둡] Server asks us to fall back to SIMPLE auth, but this client is configured to only allow secure connections 문제 해결하기 (0) | 2022.10.04 |
[YARN] cannot be cast to com.google.protobuf.Message 오류 (0) | 2022.09.20 |
[YARN] java.io.IOException: DestHost:destPort 오류문제 (0) | 2022.09.19 |
댓글