NIFI 모든 노드에 작업 분배하기 (Using ListSFTP -> RPG / Input Port -> FetchSFTP)

2020. 4. 16. 16:13Nifi

##Nifi 에서 Flow를 처음 구성하는 Processor가 Primary일 경우 Execution을 All nodes로 설정하여도 Primary에서만 작동하여 Nifi를 클러스터로 구성 하였을 경우 자원을 효율적으로 분배해 쓰지 못하는 단점이 있다.

 

이러한 문제를 해결해 주는 것이 NIFI 모든 노드에 작업을 분배 하도록 해주는 RPG를 활용하는 것이다.

 

 

 

 P가 있을 경우 오직 Primary node 에서만 실행이 가능하다.

 

 

 

 

 FetchSFTP와 PutSFTP를 모두 All nodes로 설정하였다

 

 

 

 

 

 

 

 

 

 

 

 

전부 Primary Node인 1번 노드에서만 실행된 것을 확인 할 수 있다.

 

 

##작업을 분배해주기 위한 Flow 생성

 

1

 

 2

 

 

 

2번 캡쳐본 밖으로 나가면 1번과 같이 Connection을 설정하였다.

 

1번 캡쳐본

 

Nifi Remote는 Process Group을 통하여 생성하였다

 

 

 

ALLNODE distribution 이것은 input Port로 만드는 것인데 RPG(Remote Process Group)로 부터 받은 정보를 다시 Process Group으로 보내준다.

 

 

 

2번 캡쳐본

 Nifi flow라는 Remote Process Group을 생성하였다. RPG는 Flow를 시작하는 Processor가 Primary에서만 진행하도록 설정 되어 있는경우 Flow Flow가 끝날때까지 하나의 노드에서만 작업을 해야한다. 만약 Nifi를 Single이 아닌 Cluster로 구축 하였을 경우 이는 비효율을 가져올 수 있다.

 

 Receive ALL nodes distribution 은 ALL nodes distribution에서 갖고 있는 메타정보를 다시 Processgroup으로 받아오는 역할을 한다.

 

 

 

 

##Flow 설명

ListSFTP를 실행하면 Primary Node에서만 실행이 가능하고 조회할 파일의 메타 정보가 Connection Queue로 전달된다.3개의 노드(그림에서)에서 실행 되기 위해선 메타 정보가 RPG전달되어야한다.(RPG에는 분산할 NODEURL적혀있어야한다.)

 

 

Queue의 리스트를 보면 실행 노드는 Primary인 Node 1번인 것을 확인할 수 있다.

 

RemoteProcessGroup에 등록된 노드들이 메타 정보를 받아 실제 가져와야 할  파일들을 여러 노드가 나눠서 가져온다.

Node 0,1,2,5,6으로 분산되어서 가져온 것을 알 수 있다.

 

## 장점

실제로 이렇게 플로우를 구성하면 GetSFTPALL nodes실행하였을때 발생하는 Concurrent Access 방지할 수 있다.(하나의 파일을 여러 노드가 접근) 또한 ListSFTP à FetchSftp 방식으로 구성하여 Primary Node만 사용하는 방법 보다 여러 노드가 작업을 수행 하도록 하여 작업의 분산이 가능하다.

 

 

#1.1 Create ListSFTP

Remote Path 같은 경우 파일 이름 까지 넣을 필요 없고 경로 까지만 입력하면 해당 폴더에 있는 모든 파일의 메타정보를 읽어온다.

 

 

#1.2 Create RemoteProcessGroup

구성한 NIFI 클러스터의 ip 입력하여준다.

 

 

#1.3 Create connection

 

##1.4 Fetch SFTP Configuration

 

 

만약 지정한 디렉토리의 모든 파일을 가져오고 싶다면${path}/${filename}

 

 

##1.5 PutSFTP configuratinon

##1.6 실행결과

30000개의 파일이 들어왔다.