본문 바로가기
BIG DATA/NiFi

NiFi에서 FetchFile Processor란?

by 골든크랩 2025. 5. 28.
728x90
반응형

FetchFile Processor란?

ListFile 또는 수동으로 지정된 경로를 기반으로,
파일 시스템에 존재하는 실제 파일 내용을 읽어 FlowFile의 내용(Content) 으로 가져오는 Processor입니다.

즉,

  • ListFile은 → 파일의 "이름"만 FlowFile 속성(attribute)으로 만듦
  • FetchFile은 → 해당 "파일을 실제로 열어서", 그 내용을 FlowFile의 body(content) 로 만듦

🛠️ 주요 사용 흐름

plaintext
CopyEdit
[ListFile] → [FetchFile] → [후속 처리: 예, UpdateAttribute, PutFile 등]

✅ 주요 속성 설명

속성설명예시
Input Directory 기본 입력 경로 설정 (FlowFile에 path 속성이 없을 경우 사용) /data/incoming
Completion Strategy 파일을 어떻게 처리할지 설정 None, Move File, Delete File
Move Destination Directory Move File 선택 시 이동할 경로 /data/processed
Log level for not found file 파일이 없을 때 로그 레벨 warn, error 등
 

※ 실제 경로는 FlowFile의 path, filename 속성을 조합해서 만듭니다:
<path>/<filename>


✅ 필수 입력 속성 (FlowFile에 있어야 함)

속성설명예시
filename 읽을 파일의 이름 sales.csv
path 해당 파일의 상대 경로 /data/incoming/
 

👉 따라서 보통은 ListFile로 이 두 속성을 생성하고 → FetchFile로 처리하는 구조입니다.


📄 예시: 실전 흐름

  1. ListFile: /data/incoming/report.csv 감지 → filename=report.csv, path=/data/incoming/
  2. FetchFile: 해당 경로의 파일 내용 읽어서 → FlowFile의 content에 저장
  3. 이후 → UpdateAttribute, LogAttribute, PutFile, PutElasticsearchHttp 등으로 후속 처리

🧠 Completion Strategy 옵션

옵션설명
None 파일을 그대로 둠 (읽기만 함)
Delete File 읽은 후 삭제
Move File 읽은 후 다른 디렉토리로 이동 (Move Destination Directory 필요)
 

⚠️ 주의 사항

항목설명
경로+파일명이 정확히 맞아야 함 path + filename 경로에 실제 파일이 존재해야 함
파일이 없으면 FlowFile은 failure로 라우팅됨
대용량 파일 읽기 전에 메모리 압박 체크 필요
병렬 읽기 시 여러 FetchFile을 병렬 배치하면 디스크 I/O 부하 발생 가능
 

✅ 요약 정리

항목설명
역할 실제 파일 내용을 읽어 FlowFile의 content로 채움
입력 필요 속성 filename, path
일반 사용 ListFile → FetchFile
후속 옵션 파일 삭제/이동 가능 (Completion Strategy)
실패 처리 파일이 없으면 failure 라우팅
 

💡 추가 팁

  • 실수로 FetchFile만 쓰고 filename, path를 지정 안 하면 오류 납니다
  • 경로가 절대경로인지, 상대경로인지 디버깅 시 LogAttribute로 확인하세요
  • 파일 확장자별로 처리 경로를 나누고 싶다면 → RouteOnAttribute Processor와 함께 쓰세요


🔍 File to Fetch란?

📄 NiFi가 실제로 읽어올 파일의 전체 경로(path + filename)를 설정하는 속성입니다.

이 속성은 보통 자동으로 설정되지만, 직접 FlowFile의 attribute에서 값을 가져와 지정할 수도 있고,
고정값이나 Expression Language를 사용할 수도 있습니다.


✅ 기본 동작

File to Fetch는 내부적으로 다음과 같이 구성됩니다:

plaintext
CopyEdit
${path}/${filename}
  • 즉, FlowFile이 가지고 있는 path와 filename 속성을 조합해서 실제 파일 경로를 만듭니다.
  • 이 경로의 파일을 NiFi가 읽어와 FlowFile의 내용(content) 으로 채우게 됩니다.

🧠 예시

FlowFile 속성:

text
CopyEdit
filename = sales_20240514.csv path = /data/incoming/

File to Fetch = ${path}/${filename}
→ 실제 읽을 파일 = /data/incoming/sales_20240514.csv


🛠️ 커스터마이징 가능

File to Fetch는 Expression Language를 지원하므로, 다양한 방식으로 활용할 수 있습니다:

목적표현식 예시설명
기본 조합 ${path}/${filename} 가장 일반적인 방식
절대 경로 고정 /var/data/fixed_file.csv 모든 FlowFile이 동일 파일을 읽음
날짜 포함 /data/${now():format("yyyy/MM/dd")}/report.csv 날짜별 파일 자동 추적
경로 전처리 ${path:trim()}/${filename:toLower()} 공백 제거, 소문자 처리 등 가능
 

✅ 유의사항

항목설명
실제 파일이 있어야 함 지정된 경로에 파일이 없으면 failure 관계로 이동
파일 권한 확인 필요 OS 권한 부족 시 읽기 실패
경로 오타 주의 슬래시(/) 빠짐이나 경로 잘못 지정되면 탐색 실패
 

📂 절대경로 vs 상대경로

  • File to Fetch는 절대 경로를 필요로 합니다.
  • FlowFile의 path 속성이 /data/incoming/처럼 절대 경로로 지정되어 있어야 함
  • 상대경로만 있다면 → Input Directory 속성과 합쳐져서 처리됨

✅ 요약 정리

항목설명
속성명 File to Fetch
역할 읽어올 파일의 전체 경로를 지정
기본값 ${path}/${filename}
커스터마이징 가능 (Expression Language 지원)
유의사항 경로가 정확하고 접근 가능해야 함

 

728x90
반응형

댓글