NiFi 는 Hive 버전별로 다른 컨트롤러 서비스를 제공한다. 클러스터의 HiveServer2 버전에 맞는 것을 고른다. 이름에 붙은 숫자가 Hive 계열을 뜻하므로, Hive 3 환경에 Hive 1 용 서비스를 쓰면 접속 단계에서 실패한다. NiFi 2 계열에서는 제공되는 서비스와 NAR 구성이 달라졌으므로 배포본의 목록을 먼저 확인한다.
Controller Services 탭에서 서비스를 추가하고 다음을 채운다.
| 속성 | 값 예시 |
|---|---|
| Database Connection URL | jdbc:hive2://hiveserver01:10000/default |
| Hive Configuration Resources | /etc/hive/conf/hive-site.xml,/etc/hadoop/conf/core-site.xml |
| Database User | 접속 계정 |
| Password | 비밀번호. 민감 속성으로 저장된다 |
| Max Wait Time | 30 sec |
| Max Total Connections | 8 |
Hive Configuration Resources 는 HA 네임서비스나 Kerberos 처럼 클라이언트가 클러스터 설정을 알아야 할 때 필요하다. 지정한 파일은 NiFi 가 도는 모든 노드에 같은 경로로 있어야 한다.
Kerberos 가 켜져 있으면 Kerberos Credentials Service 를 따로 만들고 커넥션 풀에 연결한다. principal 과 keytab 을 지정하며, keytab 파일은 NiFi 프로세스 사용자가 읽을 수 있어야 한다.
jdbc:hive2://hiveserver01:10000/default;principal=hive/_HOST@KRB.EXAMPLE.NET
Knox 를 거친다면 HTTP 전송 모드로 바뀐다.
jdbc:hive2://gateway:8443/;ssl=true;transportMode=http;httpPath=gateway/cdp-proxy-api/hive
SelectHiveQL 로 조회하고 PutHiveQL 로 DDL·DML 을 실행한다. 레코드 기반 처리에는 PutHiveStreaming 계열이나 PutDatabaseRecord 를 쓴다. 어느 프로세서든 위에서 만든 커넥션 풀을 참조한다.
Hive 커넥션은 HiveServer2 에 세션을 만든다. NiFi 노드 수 × 커넥션 풀 크기만큼 세션이 열릴 수 있으므로, HiveServer2 의 세션 한도와 메모리를 함께 본다. 동시성이 필요 없다면 풀 크기를 작게 두는 편이 안전하다.
프로세서의 Concurrent Tasks 를 늘리면 그만큼 커넥션을 쓴다. 풀 크기보다 크게 잡으면 대기가 생기고 Max Wait Time 을 넘기면 실패한다.
beeline -u "jdbc:hive2://hiveserver01:10000/default" -e "select 1"
ss -tnp | grep 10000 | head
NiFi 쪽에서는 컨트롤러 서비스를 Enable 할 때 오류 메시지를 본다. 드라이버를 찾지 못한다는 오류라면 NAR 구성이나 Hive 버전 선택이 잘못된 것이고, 인증 오류라면 principal 과 keytab 을 확인한다.