Docker
내가 원하는 환경의 서버를 container라는 개념으로 쉽게 생성 및 삭제할 수 있는 플랫폼.
NiFi
다양한 포맷의 데이터들을 ETL 처리할 수 있는 Flow-Based Programming(FBP) 툴
관련 글
[NiFi] Docker & NiFi로 HDFS 데이터 수집하기
앞선 글에서 Docker를 이용해 NiFi 클러스터 환경을 구성했다면, 이번에는 클러스터 환경에서 HDFS 데이터를 분산 수집하는 과정을 진행해보겠습니다.
HDFS 데이터 만들기
테스트할 데이터를 만들기 위해 아래의 파일을 똑같이 복사하여 30개를 만들어주고 namenode container에 옮겨줍니다.
/* Local PC Terminal */
$ docker cp orders* namenode:/root
namenode container에 옮겼다면 이 파일들을 모두 HDFS에 저장해줍니다.
/* namenode Container */
$ hdfs dfs -mkdir /nifi_test
$ hdfs dfs -put orders* /nifi_test
NiFi Processor 생성하기
우선 이번글에서 진행할 과정은 HDFS에 저장되어 있는 데이터를 3개 노드에 분산 저장하는 것입니다. 이 과정을 위해서 ListHDFS, FetchHDFS, PutFile을 주요 Processor로 이용할 계획입니다. 이전 글에서처럼 NiFi 서비스를 실행 후 URL에 접속하면 아래와 같이 비어있는 템플릿이 보입니다.
우리가 만들 Processor들을 정리하기 위해, 위의 그림에서 빨간색으로 표시한 Process Group을 만들어줍니다. 만들어진 Process Group을 마우스로 더블 클릭하여 내부로 들어가 줍니다.
Process Group 내부로 들어왔다면 이전 글을 참고하여 ListHDFS, FetchHDFS, PutFile Processor를 만들어줍니다. FetchHDFS와 PutFile Processor 우측에는 Processor 작업이 실패되었을 때 FlowFile을 임시로 보관하기 위한 임시 Processor를 만들어줍니다. 주의할 점은 좌측과 우측 Processor를 연결하는 Queue의 조건은 comms.failure와 failure로 설정해줍니다.
이때 가장 중요한 설정 값으로써 ListSFTP와 FetchSFTP를 연결해주는 Queue의 설정 값으로 "Load Balance Strategy" 값에 "Round robin"을 선택해줍니다.
참고사항으로 NiFi 1.8버전 이전에는 RPG(Remote Process Group)을 통해 분산 처리를 수행했지만, 1.8버전부터는 Load-Balanced Connection의 기능이 추가되면서 RPG 없이 쉽고 편리하게 분산 처리가 가능해졌습니다. Apache blogs를 참고하시면 더 자세한 내용을 알 수 있습니다.
And the latest release of NiFi, version 1.8.0, is no exception! Version 1.8.0 brings us a very powerful new feature, known as Load-Balanced Connections, which makes it much easier to move data around a cluster. Prior to this feature, when a user needs to spread data from one node in a cluster to all the nodes of the cluster, the best option was to use Remote Process Groups and Site-to-Site to move the data. The approach looks like this: |
준비가 다 되었다면 순차적으로 하나씩 실행하며 데이터를 옮겨줍니다.
- ListHDFS
- FetchHDFS
- PutFile
모든 파일들이 PutFile까지 진행되었다면 PutFile에서 설정한 경로에 접속해서 확인해줍니다.
NiFi01 Container
NiFi02 Container
NiFi03 Container
위의 그림처럼 30개 파일이 각각 3개 노드에 분산 처리된 것을 결과로써 확인할 수 있습니다. 그리고 이러한 분선 처리 과정은 NiFi UI에서도 확인 가능합니다. FetchHDFS에 마우스 우클릭을 하여 "View data provenance"를 확인해줍니다.
그러면 FlowFile들이 우측 "Node" 열에서와 같이 각각 다른 노드에서 처리된 것을 확인할 수 있습니다.
References
https://blogs.apache.org/nifi/entry/load-balancing-across-the-cluster
'Hadoop Ecosystem > NiFi' 카테고리의 다른 글
[NiFi] Json 데이터의 동적 크기 Array 전처리하기 (Base64 decoding) (1) | 2022.09.21 |
---|---|
[NiFi] Untrusted proxy 및 UninheritableFlowException 에러 해결 방법 (0) | 2022.05.22 |
[NiFi] Docker로 NiFi 클러스터 구성하기 (0) | 2022.01.31 |
[NiFi] Docker & NiFi로 HDFS 데이터 수집하기 (0) | 2021.11.17 |
[NiFi] NiFi의 핵심 개념 및 아키텍쳐 (0) | 2021.11.17 |