nifi.apache.org/docs/nifi-docs/html/getting-started.html

 

Getting Started with Apache NiFi

In order to create an effective dataflow, the users must understand what types of Processors are available to them. NiFi contains many different Processors out of the box. These Processors provide capabilities to ingest data from numerous different systems

nifi.apache.org

 

자주 사용되는 프로세서들에 대해 간략한 소개가 있음

혹시 이런 작업을 하는 프로세서는 없을까 생각중이라면, 아래 리스트부터 찾아보자

위에 링크는 모든 프로세서들을 주르륵 나열한 것이고

아래 링크는 프로세서의 성격대로 모아두고 큼직큼직한 프로세서들 소개함

nifi.apache.org/docs/nifi-docs/

nifi.apache.org/docs/nifi-docs/html/getting-started.html#what-processors-are-available

 

NiFi front 에서 시작 ) bin/nifi.sh run

NiFi background 에서 시작 ) bin/nifi.sh start

NiFi 상태 확인 ) bin/nifi.sh status

NiFi 멈춤 ) bin/nifi.sh stop

 

NiFi 를 서비스로 설치 ) bin/nifi.sh install 명령어 실행, nifi 라는 기본 이름으로 설치

사용자 지정 이름을 지정하려면 bin/nifi.sh install eyeballs 같이 뒤에 이름을 덧붙이면 됨

NiFi 서비스 시작 ) sudo service nifi start

NiFi 서비스 멈춤 ) sudo service nifi stop

NiFi 서비스 상태 확인 ) sudo service nifi status

 

Provenance 데이터 검색할 때 FlowFile 의 속성을 기준으로 검색할 수 있다고 함.

그러면 검색이 쉬워지긴 하겠따

 

FlowFile 에 expiration 을 정할 수 있다고 함.

connector 의 settings 에서 FliwFile Expiration 을 조절하면 됨.

0 sec 은 expiration 이 없는거고, 1 이상의 값을 넣으면 expiration 이 생김

 

 

Connector 의 settings 에서 Prioritizers 를 변경할 수 있음

그냥 마우스로 드래그해서 위에 나온 4개의 우선순위 전략을 원하는 순서대로 변경해주면 됨.

 

FlowFile 을 유일하게 구분할 수 있는 것은 uuid 임.

uuid : FlowFile 을 다른 시스템의 FlowFile과 구별하는 범용 고유 식별자

 

FlowFile 이 생성된 날짜 시간은 entryDate 라는 속성값을 통해 알 수 있음

 

FlowFile 이 복제되고 병합되고 분할 될 때마다 생성되는 부모-자식 관계에서 가장 먼저 생성된 FlowFile

생성 날짜와 시간을 보려면 lineageStartDate 라는 속성값을 이용

 

uuid, entryDate, lineageStartDate, fileSize 는 직접 변경이 불가함.

 

FlowFile 속성을 추출하려면 아래 processor 들을 사용하면 됨

nifi.apache.org/docs/nifi-docs/html/getting-started.html#AttributeExtraction

 

FlowFile 의 속성을 추출하고 수정하는 것 외에도,

FlowFile 에 속성을 직접 추가할 수 있음.

UpdateAttribute Processor 를 이용하거나, 속성탭의 오른쪽 상단에 + 버튼 클릭하여 새로운 속성 추가 가능

다른 속성을 기준으로 새로운 속성을 추가할 수 있음

예를 들어 ${hostname()}-${now():format('yyyy-dd-MM')}-${filename} 같은 것을 넣어서

다른 속성값을 이용한 연산식을 만들 수 있찌!

자세한 내용은 아래 링크 참고

nifi.apache.org/docs/nifi-docs/html/getting-started.html#adding-user-defined-attributes

 

FlowFile 의 속성을 기반으로 라우팅 하려면 RouteOnAttribute Processor 사용

예를 들어 파일 사이즈가 10mb 이하면 왼쪽으로, 10mb 이상이면 오른쪽으로 라우팅하게 할 수 있음.

다른 예로, $ {filename : startsWith (\ 'r')} 식을 사용하여

파일의 이름이 r 로 시작하면 왼쪽으로, 아니라면 오른쪽으로 라우팅하게 할 수 있음.

 

이렇게 표현식(위에 startwith r 같은 식)을 적용할 수 있는 속성값이 있고, 아닌 속성값이 있는데,

이를 구분하기 위해서 (?) 물음표 아이콘을 마우스오버하면 나오는 풍선도움말을 확인

Expression Language Scope 에 표현식 적용이 되는지 안 되는지 뜬다.

 

표현식은 간단하게 ${...} 을 사용함.

예를 들어 내가 uuid 를 표현식에 이용하고 싶다면 ${uuid} 이렇게 불러와 사용 가능.

 

속성의 이름이 숫자, 문자, 마침표, 밑줄 로만 이루어진 (이를테면 uuid) 속성값 외에

white space 나 특수문자가 들어간 속성 이름은 작은 따옴표를 사용해서 표현해야 함.

가령 내가 직접 만든 속성 이름이 My Attribute Name 이라면

${'My Attribute Name'} 이렇게 불러옴

 

표현식에 함수를 어떻게 사용하는지, 예를 통해 살펴보자.

파일 이름에 r 이 포함되어있는지 살펴보려면

${filename:toLower():contains('r')}

이라는 표현식을 사용하면 되는데, 여기서 본 것처럼 함수(toLower, contains) 는 콜롬 ( : ) 으로 사용 가능

 

표현식 내부에 다른 표현식을 사용하려면 괄호를 넣어주면 됨

예를 들어 ${attr1:equals( ${attr2} )}

 

이 외에 문자열 분석, 문자열 조작, 문자열 비교, 숫자값 비교, 숫자값 조작, 숫자값 수정 등의 함수가 제공됨.

자세한 설명은 아래 링크 참고

nifi.apache.org/docs/nifi-docs/html/expression-language-guide.html

이것도 하나의 언어처럼 쓰이겠네.. ㅎㄷㄷ

근데 표현식 작성중에 Ctrl+Space 누르면 이클립스처럼 함수 도움말이 뜬다고 함.

 

표현식에서의 사용자 지정 속성에 대한 내용은 지금 읽으니 뭔 말인지 모르겠음

nifi.apache.org/docs/nifi-docs/html/getting-started.html#custom-properties-within-expression-language

 

 

상태표시줄의 가장 첫번째 숫자는 Active Threads 수인데,

현재 얼마만큼의 threads 를 NiFi 가 열심히 굴리고있는지 나타냄.

클러스터링이 되어있는 경우라면, 클러스터 내의 모든 노드의 활성 threads 수를 나타냄.

두번째 숫자는 전체 flow 에서 현재 connector 에 있는 flowfile 수와 해당 flowfile 의 총 크기를 나타냄

즉, ( connector 에 있는 flowfile 의 수 / connector 에 있는 flowfile 의 크기 )

클러스터링이 되어있는 경우라면, 클러스터 내의 모든 노드의 connector 큐 flowfile 수,크기를 나타냄

 

 

NiFi 에 문제가 발생하면 문제가 생긴 processor 위와 WebUI 오른쪽 위에 빨간 딱지가 생겨서 문제 내용을 알 수 있음

또한 Bulletin Board 에도 기록이 되어 문제 내용을 알 수 있음

이슈는 5분동안 표시된다고 함

 

 

 

provenance 의 ( ! ) 버튼을 누르고, Content 탭에 들어가서 Replay 를 할 수 있음

flow 를 수정한 후 replay 를 누르면 flowfile 을 다시 처리한 결과를 볼 수 있음! 오옹

예를 들어, 13579 이라는 결과값을 예상하고 flow 를 실행했는데 24680가 나왔다면

flow 를 조금 수정한 후 replay 를 하여 결과값이 제대로 나왔는지 확인 가능하다는 것.

 

 

 

 

+ Recent posts