Apache Nifi

[Nifi] FTP 파일 수집

비번변경 2022. 3. 21. 20:33

Nifi를 이용해 특정 FTP 서버의 정해진 경로에서 파일을 수집하여 클라이언트의 특정 경로에 저장하려고 한다.

플로우를 구성해보자.

 

프로세서를 추가할 때, 아래에 선택한 프로세서에 대한 간단한 설명을 확인할 수 있다. 해당 설명을 참고하거나, 공식 문서를 참고하여 사용할 프로세서를 선택하면 된다.

프로세서마다 데이터 처리에 필요한 속성이 있을 수 있으므로 플로우를 구성할 때 호환되는 프로세서를 활용해 구성하거나, 프로세서에 필요한 값을 맞추는 작업을 별도로 수행해야 한다.

 

사용 프로세서

FTP에서 파일을 가져올 때는 ListFTP와 FethFTP를 사용한다. 각 프로세서의 역할은 아래와 같다.

  • ListFTP
    FTP 서버에 있는 파일의 목록을 확인한다. 
    확인된 각 파일에 대해 새 FlowFile을 생성한다. 생성한 FlowFile의 파일명 속성은 FTP 서버에 존재하는 파일의 파일명에 해당한다.
    파일을 가져올 때는 FetchFTP를 사용할 수 있다.
  • FetchFTP
    FTP 서버에서 파일을 내용을 가져와서, FlowFile의 내용을 파일 내용으로 덮어쓴다.

 

가져온 파일을 서버에 저장할 때는 PutFile을 사용한다.

  • PutFile
    FlowFile의 내용을 로컬 파일 시스템에 작성한다.
FlowFile
Nifi에서 처리되는 기본적인 단위로, 처리하고자 하는 데이터와 그 데이터를 처리할 때 필요한 속성 값을 가리킨다.
프로세서에서 데이터를 처리하기 위해 사용한다. FlowFile을 생성할 수 있는 프로세서도 존재하지만, 생성하지 않는 프로세서도 존재한다.

 

Flow 구성

설정할 프로세서를 더블클릭하여 설정 창을 연다.

프로세서 설정 창은 크게, Settings, Schedulings, Properties, Comments 탭으로 구성되어 있다.

  • Settings : 프로세서의 이름, 로그 레벨, 처리 방식 등을 설정한다.
  • Schedulings : 타이머 또는 크론 방식으로 스케쥴링을 설정한다.
  • Properties : 프로세서가 동작하는데 필요한 속성 값을 설정한다.
  • Comments : 프로세서에 주석 등을 적는다.

 

ListFTP

이 글에서는 KST 기준 9시에서 오후 6시까지 10분 단위로 수집을 시도하도록 스케쥴링할 것이다.

 

Schedulings

CRON 방식으로 설정한다. Nifi의 크론은 리눅스 크론과 다르게 "초 분 시 일 월 요일"로 설정한다.

서버 시간이 UTC이므로 0시부터 9시까지 동작하도록 설정한다.

Properties

속성 이름이 굵게 표시된 것은 필수값이다.

속성 설명
Hostname FTP 서버 주소
Port  FTP 접속 시 사용할 포트 번호. 기본값은 21이다.
Username FTP 서버에 접속할 사용자 계정
Password FTP 서버의 접속할 사용자 계정의 비밀번호. 민감정보로 암호화처리되어 평문값은 볼 수 없다.
Remote Path FTP 서버에서 파일을 수집할 경로
경로 내에 존재하는 모든 파일의 메타 정보를 읽는다.
Search Recursively True로 설정하면 Remote Path 아래의 하위 디렉터리에서도 파일을 탐색한다.
False면 하위 디렉터리에서 파일을 탐색하지 않는다.
File Filter Regex 파일 이름을 필터링한다.
사진의 경우 파일명이 .txt로 끝나는 파일만을 탐색한다.

이 외의 속성은 ListFTP 속성을 참고한다.

 

FetchFTP

ListFTP가 성공하면 FetchFTP를 실행하도록 한다.

 

Connection

마우스를 프로세서 위로 가져가면 초록색 연결 아이콘이 나타난다. 연결할 프로세서로 드래그하면 연결을 설정할 수 있다. 연결을 생성하면 invalid라고 표시된 ListFTP 프로세서가 valid로 변경되어 Stop 상태가 된다.

 

Settings

이 글에서 프로세서가 실패한 경우에는 다른 작업을 하지 않는다. 따라서 자동으로 FlowFile을 종료하도록 설정한다. 프로세서는 모든 관계에 대한 연결 또는 종료를 설정하지 않으면 valid 상태로 변경되지 않는다.

success인 경우에는 다음 프로세서로 연결을 설정할 것이기 때문에 체크하지 않았다.

 

Properties

속성 설명
Hostname FTP 서버 주소
Port  FTP 접속 시 사용할 포트 번호. 기본값은 21이다.
Username FTP 서버에 접속할 사용자 계정
Password FTP 서버의 접속할 사용자 계정의 비밀번호. 민감정보로 암호화 처리되어 평문값은 볼 수 없다.
Remote File 원격 서버의 파일 이름

ListFTP에 의해 생성된 FlowFile의 속성을 이용해 파일을 지정할 수 있다.
예시 ) ${path}/${filename}
Completion Strategy Nifi로 가져온 원본 파일을 FTP 서버에서 어떻게 처리할지 지정한다. 기본값은 None이다.

- Move File : 파일을 Move Destination Directory에 설정한 경로로 이동시킨다.
- Delete File : 파일을 삭제한다.

작업 시 FTP 서버에 쓰기 권한이 적절하게 부여되어 있는지 확인이 필요하다. 

이 외의 속성은 FetchFTP 속성을 참고한다.

 

PutFile

FetchFTP가 성공적으로 완료하면 실행되도록 한다.

Properties

 

Directory 속성은 파일을 저장할 로컬 서버 경로를 설정한다.

예시 )

- /data/nifi/repository/ftp/${path:replaceAll('/data/projects/ftp', '')} : FlowFile의 path 값 중 "/data/projects/ftp"를 공백으로 치환

 

실행

모든 프로세서의 설정이 끝났다면, 캔버스를 우클릭하여 Start를 누르거나 왼쪽 Operation Pallete의 Start 버튼을 클릭하여 모든 프로세서를 실행시킬 수 있다.