[S/W] [NiFi] NiFi를 활용한 대량의 파일 압축

김민성·2023년 2월 28일
0

NiFi 작업일지

목록 보기
6/6

<배경설명>

- 특정 폴더 안에 백만개 이상의 이미지 파일이 존재함

- 해당 파일들은 원본을 보존하고 복사해야 하는데, 시스템 성능을 고려해서 압축이 필요함

- 압축파일의 형식은 'msgrok_<압축한 시각>.tar.gz'로 하려고 함

<세부 NiFi Processor>

- 전체 흐름도

- ListFile & FetchFile

원본 디렉터리에서 파일을 삭제하지 않고, 파일을 중복되게 하지 않기 위해 ListFile과 FetchFille 프로세서를 적용

- MergeContent

FetchFile로 가져온 파일들을 하나로 묶음 (tar의 역할)
여기서는 TAR로 묶었지만, 다양한 묶는 방법을 지정할 수 있음.

Minimum Numbers of Entries 와 Minimum Group Size를 조절하면, 
한번 묶을 때 최소 파일의 갯수와 용량을 지정할 수 있다.
(즉, 해당 기준값 이하에서는 기다린다는 뜻)

- CompressContent

Compress는 말 그대로, 압축을 시키는 프로세서임.
여기서는 tar.gz로 압축하기 위해 'gzip'을 선택하였고,
이미지 파일의 특성 상 압축률이 낮아서 Compression Level(압축률)은 그냥 0으로 설정하였다.

 gzip 뿐만 아니라 다양한 압축을 지원한다

- UpdateAttribute

압축파일(msgrok_YYYYMMDDHHmmss.tar.gz)의 이름을 지정한다.

filename이라는 속성을 'msgrok_${now():format('yyyyMMddHHmmss')}.tar.gz' 로 부여한다.

 * ${now()} : 현재 시스템의 시각
 * YYYY : 연도(ex. 2023), MM : 월 (ex. 03 = 3월), dd : 일, HHmmss : 시각(ex. 233500 = 23시 35분 00초)
 

<작업후기>

- 쉘 스크립트로 로그를 확인하는 것보다, GUI 인터페이스로 간편하게 진행현황을 확인할 수 있어서 좋음

- 각 프로세서별 'SCHEDULING' 이 가능해서, 시스템 로드를 조절할 수 있다는게 최고 장점인 듯

특히, ListFile → FetchFile 단계에서는 list한 파일의 목록만 가지고 있으므로, 용량적으로는 부하가 적다.

FetchFile 프로세서가 실제로 파일을 읽고/가져오므로 FetchFile의 스케쥴링을 그림과 같이 하면, 
30초 마다 10개의 파일을 가져오게 된다.

 * NiFi에서 CRON은 초/분/시/일/월/요일 순이다! (맨 앞자리가 초 라서 서버의 cron과 헷갈릴 수 있음)
profile
맛소금토일

0개의 댓글