// keytab OK

[root@server06]# kinit -V -k -t hdfs.keytab hdfs/server06@EXAMPLE.COM

Authenticated to Kerberos v5


// port check OK

[root@server06]# nc kdc1 -v -z -u 88

Connection to kdc1 88 port [udp/kerberos] succeeded!


위처럼 Hadoop에 Kerberos 인증을 붙이기 위해 노드에 맞는 principal을 생성하고 keytab 파일을 만들고,

해당 keytab 파일로 kinit 도 해보고 포트 열려 있는 것도 확인된 상태인데,

막상 hdfs-site.xml 에 적용하고 시작해보면 아래와 같은 로그를 남기면서 실패하는 경우가 발생.


2015-04-20 10:40:00,370 FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Exception in secureMain

java.io.IOException: Login failure for hdfs/server06@EXAMPLE.COM from keytab /home/hadoop/etc/hadoop/hdfs.keytab: javax.security.auth.login.LoginException: Receive timed out



구글링을 해보니 Kerberos 통신을 UDP가 아니라 TCP로 하도록 설정하면 됨. (원인은 모르겠음..;)

아래처럼 /etc/krb5.conf 의 libdefaults 항목에 udp_preference_limit = 1 한 줄 추가해주면 됨.


[libdefaults]

 udp_preference_limit = 1









Posted by bloodguy
,