[NiFi] NiFi-1.15.0 설치 및 간단한 ETL
CentOS7에 NiFi를 설치해보려고 한다.
환경 정보 확인(CentOS 7.9, OpenJDK 1.8)
[hadoop@node1 ~]$ cat /etc/system-release
CentOS Linux release 7.9.2009 (Core)
[hadoop@node1 ~]$
[hadoop@node1 ~]$ java -version
openjdk version "1.8.0_322"
OpenJDK Runtime Environment (build 1.8.0_322-b06)
OpenJDK 64-Bit Server VM (build 25.322-b06, mixed mode)
[hadoop@node1 ~]$
NiFi 설치파일 다운로드(nifi-1.15.0-bin-zip) 후 /opt 업로드
압축 해제 뒤 심볼릭링크 생성
NiFi 구동 전 nifi.properties 수정(NiFi IP 주소 및 포트 설정)
NiFi 실행
이후 설정한 웹포트 입력하고 접속하면 설치 완료된다. 이처럼 NiFi 설치 및 구동은 매우 간단하다.
간단한 ETL을 해보자.
시나리오 : RDB(PostgreSQL)에서 데이터를 fetch하여 Hadoop에 적재한다.
각 프로세스마다 어떤 작업을 하는지 살펴보자.
ExecuteSQL
먼저 RDB에 접근하기 위해 ExecuteSQL 프로세서를 사용했다. 해당 프로세서는 sql 쿼리를 실행해서 쿼리 결과를 avro 형식으로 리턴하는 기능을 가진다.
데이터베이스에 연결하기 위해서는 JDBC와 연결하려는 데이터베이스 드라이버 등을 설정해주고 실행할 쿼리를 기재해주면 된다.
해당 프로세서가 정상적으로 실행 되면 다음과 같이 avro 형식으로 데이터가 잘 떨어진 것을 확인할 수 있다.
하지만 이렇게 되면 빨간 박스처럼 파일명이 자동으로 생성되기 때문에 내가 원하는 파일명으로 변경 가능하다.
UpdateAttribute
위처럼 filename 옵션을 추가하고 원하는 파일명으로 지정한다.
6f9eeedd-..... 하던 파일명이 t_rule_meta_0001.dat으로 변경되었다.
ConvertRecord
ExecuteSQL 프로세서는 쿼리 실행 결과를 기본 avro 포맷으로 리턴하기 때문에 내가 원하는 csv 포맷으로 수정하기 위해 ConverRecord 프로세서를 사용했다. 변경 가능한 포맷은 csv 형식 말고도 json이나 xml 등 다양하게 변경할 수 있으니 사용자가 원하는 형식으로 변경하면 된다.
avro 형식이었던 데이터가 아래와 같이 csv 형식으로 변경된 것을 확인할 수 있다.
PutHDFS
이제 마지막으로 HDFS에 데이터를 쓰기 위해서 PutHDFS 프로세서를 사용했다. 설정파일들의 경로를 지정하고 데이터가 쓰여질 디렉터리를 설정한 후 실행하면 정상적으로 데이터가 HDFS에 적재된 것을 확인 할 수 있다.
Hadoop의 설정 파일들의 위치를 기재해주고 HDFS 디렉터리를 기재한다.
그럼 위처럼 정상적으로 hdfs에 적재된 것을 확인할 수 있다.
OpenCSVSerde 사용하여 데이터 검증까지 해보자. HIVE DDL 후 쿼리 조회.
위에서 사용한 프로세서들은 정답이 아니다. 같은 결과를 내더라도 과정은 다를 수 있기 때문에 상황에 맞는 프로세서를 잘 찾아보는 것이 중요한 것 같다.