CSA 파셀로 배포한 Flink 에서 예제 JAR 을 YARN 에 제출하면 작업 자체는 끝나지만 ZooKeeper 인증 관련 예외가 함께 찍힌다.
Cannot use kerberos delegation token manager, no valid kerberos credentials provided.
SASL configuration failed. Will continue connection to Zookeeper server without SASL authentication.
javax.security.auth.login.LoginException: No JAAS configuration section named 'Client' was found
in specified JAAS configuration file: '/tmp/jaas-...conf'
ERROR org.apache.flink.shaded.curator5...ConnectionState - Authentication failed
Flink 클라이언트가 ZooKeeper 에 접속하기 위해 JAAS 설정 파일을 만들었지만 그 안에 Client 섹션이 없다. Client 섹션은 Kerberos 자격 증명에서 생성되므로, 작업을 제출한 계정에 유효한 Kerberos 티켓이나 keytab 이 없으면 비어 있는 채로 만들어진다. 첫 줄의 no valid kerberos credentials provided 가 그 신호다.
Kerberos 가 켜진 클러스터에서 인증 없이 제출했기 때문이며, ZooKeeper 설정 문제도 Flink 결함도 아니다. 예제 작업이 그래도 끝난 것은 ZooKeeper 접속이 고가용성 경로에만 필요했기 때문이고, 실제 운영 작업에서는 체크포인트·리더 선출 경로에서 막힌다.
kinit <principal>
klist
flink run-application -t yarn-application <application.jar>
장기 실행 스트리밍 작업은 티켓 만료를 피하기 위해 keytab 을 쓴다.
flink run-application -t yarn-application \
-Dsecurity.kerberos.login.keytab=/path/to/<user>.keytab \
-Dsecurity.kerberos.login.principal=<principal> \
-Dsecurity.kerberos.login.contexts=Client,KafkaClient \
<application.jar>
security.kerberos.login.contexts 에 Client 가 들어가야 Flink 가 ZooKeeper 용 Client 섹션을 만든다. Kafka 를 함께 쓰면 KafkaClient 도 넣는다.
Cloudera Manager 에서 Flink 서비스 설정에 keytab 과 principal 을 넣어 두면 개별 제출 때마다 지정하지 않아도 된다.
클러스터가 Kerberos 로 보호돼 있으면 사실상 불가능하다. hadoop.security.authentication 이 kerberos 이면 HDFS · YARN · ZooKeeper 접근 전체가 인증을 요구하므로, Flink 쪽 옵션으로 우회할 수 없다. 테스트 목적이라도 인증을 끄는 방향이 아니라 테스트용 principal 을 발급받는 방향으로 간다.
Job Clusters are deprecated since Flink 1.15. Please use an Application Cluster/Application Mode instead. 는 제출 방식이 낡았다는 경고다. flink run -m yarn-cluster 대신 flink run-application -t yarn-application 을 쓴다.
SLF4J: Class path contains multiple SLF4J bindings. 는 Flink 파셀과 CDH 파셀의 로깅 바인딩이 함께 잡혀 나오는 경고이며 동작에는 영향이 없다.
Trying to access closed classloader 는 작업 종료 후 정리 과정에서 나는 것으로, 예제 실행에서는 무시해도 된다.