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로 처리하는 구조입니다.
📄 예시: 실전 흐름
- ListFile: /data/incoming/report.csv 감지 → filename=report.csv, path=/data/incoming/
- FetchFile: 해당 경로의 파일 내용 읽어서 → FlowFile의 content에 저장
- 이후 → 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
반응형
'BIG DATA > NiFi' 카테고리의 다른 글
NiFi 2.2.0 PostgreSQL to CSV 예제 (0) | 2025.06.02 |
---|---|
NiFi 2.2.0 에 ListFile 프로세스 (0) | 2025.05.28 |
NiFi 1.16.3 수동설치 - Windows 11에 (0) | 2025.05.15 |
Apache NiFi Expression Language(NiFi EL) (0) | 2025.05.14 |
Apache NiFi 에서 FlowFile 이란...개념과 디버깅방법 (1) | 2025.05.14 |
댓글