티스토리 뷰

반응형

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
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함