본문 바로가기
엑셈 경쟁력/엑.기.스

엑기스 | 빅데이터 플랫폼 NiFi의 구성과 활용

by EXEM 2021. 7. 21.

 

NiFi는 소프트웨어 시스템 간 데이터 흐름을 자동화하도록 설계된 아파치 소프트웨어 재단의 소프트웨어 프로젝트입니다. 과거 NSA에 의해 개발되었고, 2014년 기술 전송 프로그램의 일부로서 오픈소스화된 나이아가라파일즈(NiagaraFiles)에 기반을 두고 있습니다

  • NiFi는 Dataflow를 쉽게 개발할 수 있고, 시스템 간 데이터 이동 및 내용을 볼 수 있는 UI를 제공합니다.
  • 실시간 데이터 전송에 필요한 기능을 제공하고, 여러 NiFi시스템 간 통신을 지원(site to site)합니다.
  • 강력한 자원과 권한 관리를 통해 Multi-tenant를 지원합니다.
  • 오픈소스로 사용 비용이 들지 않는다는 장점이 있습니다.

 

NiFi는 실시간 데이터 처리에 유리하지만, 복잡한 연산이 어려워 spark 또는 storm과 연동하여 사용하는 경우가 많습니다.

 

NiFiFlowFile, Connection, Processor 세 가지로 이루어져 있습니다.

  1. FlowFile은 NiFi가 인식하는 데이터 단위이며, 속성과 내용으로 구성되어있습니다. 키/벨류 형태로 데이터의 이동 및 저장 시 필요한 정보를 수록할 수 있고, Processor마다 이동 시 복사본이 생성돼 추적이 쉽다는 장점이 있습니다.
  2. Processor는 FlowFile을 수집, 변형 및 저장하는 기능이 있습니다. 자주 사용하는 프로세서는 http, kafka, db, ftp 관련 프로세서, 속성을 변경하는 updateattribute, 데이터를 합치는 mergecontent, 데이터를 분할하는 split스리즈, 데이터 타입을 변경하는 covert 등이 있습니다.
  3. Connection은 각 processor별로 연결해 FlowFile을 전달하는 역할을 담당하고 있습니다. FlowFile의 우선순위, 만료, 부하조절 기능도 제한하고 있습니다.

 

NiFi 아키텍처

이미지 출처 : Apache NiFi Overview

NiFi의 아키텍처의 구성요소는 다음과 같습니다.

  • Web Server
    : 발생하는 이벤트를 모니터링 하고 소프트웨어를 시각적으로 제어하기 위해 사용되는 HTTP 기반 구성요소입니다.
  • Flow controller
    : NiFi 동작의 뇌 역할을 담당하며, NiFi 확장 기능의 실행을 통제하고 이를 위한 자원 할당을 스케줄링합니다.
  • Extensions
    : NiFi가 다양한 종류의 시스템과 통신할 수 있게 하는 다양한 플러그인입니다.
  • FlowFile Repository
    : NiFi가 현재 실행 중인 FlowFile의 상태를 추적하고 정비하기 위해 사용합니다.
  • Content Repository
    : 전송 대상의 데이터가 관리됩니다.
  • Provenance Repository
    : 시스템을 경유하는 데이터의 프로버넌스와 관련한 데이터가 관리됩니다.

이미지 출처 : Apache NiFi Overview

  • FlowFile
    : Processor에 의해 생성되며, 속성정보와 데이터가 들어있습니다.
  • Cluster Coordinator
    : 각 NiFi 서버들의 정보(가동 여부, 상태)를 관리하며, DataFlow의 추가, 수정, 삭제 등의 변경을 클러스터에 등록된 NiFi 노드들에 복제해줍니다.
  • Primary Node
    : 여러 노드에서 Processor가 실행되지 않고, 특정 단일 노드에서만 실행하고자 할 때 사용하는 대표 노드입니다.

 

이러한 역할들은 ZooKeeper Server에 자동으로 선출되며, NiFi 1.0부터는 Zero-Master Clustering이 적용되어 클러스터 내에 NiFi 노드 중 한대가 자동으로 Cluster Coordinator와 Primary Node가 됩니다.

 

이미지 출처 : Dataflow 엔진 Apache NiFi 소개와 설치

 

Cluster와 각 노드는 같은 dataflow를 가지고 있으며, 각 노드에서 중복되지 않은 데이터를 그림과 같이 분산 처리할 수 있습니다. 이 과정에서 데이터 중복 조회를 막기위해 Primary Node에서 ListHDFS를 실행합니다.

ListHDFSHDFS의 특정 디렉토리 안의 파일을 조회하며, 파일 별로 FlowFile을 생성합니다. 이렇게 생성된 FlowFileRPG에 전달해 각 노드로 FlowFile을 분산하여 전달하고, FetchHDFS Processor를 이용해 HDFS파일을 조회합니다.

 

 

NiFi 활용 사례 - CSV 데이터를 HDFS에 적재하기

엑셈은 E사 빅데이터 기반 데이터 관리 시스템사업에서 데이터 수집 솔루션으로 아래 나열된 NiFi의 다양한 기능들을 사용하였습니다.

  • GUI기반의 Top-Down 방식의 개발환경
  • 직관적인 추출, 변환, 적재 설계
  • 다양한 변환 기능
  • 웹 기반의 운영 콘솔 기능
  • 실시간 모니터링 및 분석 기능

 

실제로 E사의 빅데이터 기반 에너지 관리 시스템 구축 시 NiFi Dataflow를 구성하여 사업을 진행하였고, NiFi를 활용하여 분석에 필요한 에너지 신고 데이터를 하둡으로 적재, 가공하였습니다.

 

E사 사업에서 적용한 NiFi Dataflow 중 하나인 CSV데이터를 HDFS에 적재하는 방법을 살펴보겠습니다.

 

 

CSV에 데이터를 HDFS에 적재하기 위한 Dataflow 구성은 다음과 같습니다.

 

  • GetSFTP Processor의 Property 값을 사용자의 환경에 맞게 설정한 후, PutHDFS Processor의 Property 값을 설정합니다.
  • Dataflow구성이 완료되었다면 전체 Dataflow를 선택 후 NiFi 화면에 있는 Dataflow 실행 버튼을 클릭하여 전체 Dataflow를 실행시켜 Queue의 데이터 수집 상황을 확인합니다.
  • 정상적으로 수집이 되고 있다면 HDFS에 데이터 적재 여부를 최종적으로 확인합니다.

 

또한 외부데이터 재수집 과정에서도 NiFi를 사용하였는데, 데이터 관리 시스템 포탈에서 데이터 수집 로그를 확인해 수집에 실패한 데이터들을 재수집하기 위해 사용하였습니다.

 

NiFi를 이용해 데이터 재수집 날짜를 지정하면 데이터 수집 작업이 실행되며, 지정 날짜의 데이터가 존재할 경우 삭제 후 저장하는 방식을 사용하였습니다.

 

 

이번에는 H사 프로젝트 활용 사례를 살펴보겠습니다.

 

Open API를 호출하여 하둡에 데이터를 적재하는 워크플로우

InvokeHTTP ProcessorProperty 값에 OpenAPI로 호출할 URL과 파라미터 값을 설정한 후 실행하면 JSON, XML 등 원하는 값으로 데이터를 수집할 수 있습니다. 이후에 Split Json Processor를 이용하여 Json의 키별로 값을 파싱하고, ConvertRecord를 이용하여 파싱 된 값을 CSV 형태로 저장할 수 있습니다. 그리고 위에 설명해 드린 CSV to HDFS 워크플로우를 사용하면 Open API에 호출한 값을 Hadoop에 쉽게 저장할 수 있습니다.

 

데이터베이스에 저장된 값을 하이브로 복제하는 워크플로우

ExecuteSQL ProcessorProperty 값에 복제하고자 하는 데이터베이스의 접속정보와 테이블명을 입력 후 실행하면 CSV 형태로 값을 반환합니다. 이후 PutHiveStreaming ProcessorProperty 값에 저장하고자 하는 하이브의 접속정보, 테이블명, 데이터베이스명 등을 입력하면 데이터베이스에 있는 테이블이 하이브에 복제가 됩니다. 여러 가지 Processor를 조합하면 유용하게 사용하실 수 있습니다.

 


 

앞서 소개해드린 사례와 같이 엑셈은 여러 프로젝트에서 NiFi를 적용하였습니다.

E사와 H사 프로젝트에서는 데이터 수집부터 분석까지 광범위하게 활용을 하였고, K사 프로젝트에서는 기존 상용으로 사용하던 ETL 솔루션의 대체재로 사용하였습니다.

 

NiFi에서 다양한 기능을 지원하기 때문에 여러 프로젝트에 적용을 시킬 수 있었는데요. 덕분에 빅데이터 구축 프로젝트를 진행할 때 실제로 코딩을 해야만 했던 과거와는 달리 웹페이지에서 UI/UX로 편하게 다양한 작업을 진행할 수 있게 되었습니다. UI/UX를 지원하여 모니터링도 쉽고, 오픈소스이다 보니 사용에 제약도 없습니다. 여러 가지 장점이 많은 소프트웨어이니 실제 프로젝트를 진행하시면서 유용하게 활용해보시길 권해드립니다

 

 

 

 

 

기고 | 빅데이터사업본부 최기용

편집 | 사업기획팀 박예영

 

 

 

 

 

 

 

댓글