Apache NiFi Installation

Page content

강의 홍보

개요

  • 데이터 엔지니어링에 필요한 기본적인 인프라를 설치 진행하는 튜토리얼을 만들었다.
  • 기본적으로 교재에 충실하지만, 약 1년전에 쓰인 책이라, 최신 버전으로 업그레이드 하였다.

Apache NiFi 설치과정

  • 먼저 웹사이트에 방문하여 필요한 파일을 다운로드 받는다.
  1. wget을 이용해서 NiFi를 현재 디렉터리에 내려받는다.
$ wget https://downloads.apache.org/nifi/1.14.0/nifi-1.14.0-bin.tar.gz
--2021-09-06 13:10:55--  https://downloads.apache.org/nifi/1.14.0/nifi-1.14.0-bin.tar.gz
Resolving downloads.apache.org (downloads.apache.org)... 135.181.214.104, 135.181.209.10, 88.99.95.219
Connecting to downloads.apache.org (downloads.apache.org)|135.181.214.104|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1417663663 (1.3G) [application/x-gzip]
Saving to: ‘nifi-1.14.0-bin.tar.gz’

nifi-1.14.0-bin.tar.gz                      100%[==========================================================================================>]   1.32G  5.27MB/s    in 4m 13s
  1. .tar.gz 파일의 압축을 푼다.
$ tar -xvf nifi-1.14.0-bin.tar.gz
$ ls
nifi-1.14.0             nifi-1.14.0-bin.tar.gz
  1. nifi-1.14.0 의 디렉터리가 생겼을 것이며, 해당 디렉터리로 가서 다음 명령어를 실행한다.
$ cd nifi-1.14.0
$ bin/nifi.sh start
nifi.sh: JAVA_HOME not set; results may vary

Java home: 
NiFi home: /Users/evan/Desktop/data_engineering_python/install_files/nifi-1.14.0

Bootstrap Config File: /Users/evan/Desktop/data_engineering_python/install_files/nifi-1.14.0/conf/bootstrap.conf

The operation couldn’t be completed. Unable to locate a Java Runtime.
Please visit http://www.java.com for information on installing Java.
  • 자바가 이미 설치가 되어 있다면 정상적으로 실행이 된다.
  • 그러나, 자바가 설치가 되어 있지 않다면 위 에러와 같이 별도로 자바 환경 설치를 해야 한다.

3.1 자바 설치 및 환경변수 지정

$ brew update
$ brew tap adoptopenjdk/openjdk
$ brew search jdk
==> Formulae
openjdk                      openjdk@11                   openjdk@8                    jd                           mdk                          cdk
==> Casks
adoptopenjdk-jre                   adoptopenjdk11-openj9-large        adoptopenjdk13-openj9-jre-large    adoptopenjdk15-openj9-jre          adoptopenjdk8-openj9-jre-large
adoptopenjdk-openj9                adoptopenjdk12                     adoptopenjdk13-openj9-large        adoptopenjdk15-openj9-jre-large    adoptopenjdk8-openj9-large
adoptopenjdk-openj9-jre            adoptopenjdk12-jre                 adoptopenjdk14                     adoptopenjdk15-openj9-large        adoptopenjdk9
adoptopenjdk-openj9-jre-large      adoptopenjdk12-openj9              adoptopenjdk14-jre                 adoptopenjdk16                     homebrew/cask/jdk-mission-control
adoptopenjdk-openj9-large          adoptopenjdk12-openj9-jre          adoptopenjdk14-openj9              adoptopenjdk16-jre                 homebrew/cask/oracle-jdk
adoptopenjdk10                     adoptopenjdk12-openj9-jre-large    adoptopenjdk14-openj9-jre          adoptopenjdk16-openj9              homebrew/cask/oracle-jdk-javadoc
adoptopenjdk11                     adoptopenjdk12-openj9-large        adoptopenjdk14-openj9-jre-large    adoptopenjdk16-openj9-jre          homebrew/cask/sapmachine-jdk
adoptopenjdk11-jre                 adoptopenjdk13                     adoptopenjdk14-openj9-large        adoptopenjdk8
adoptopenjdk11-openj9              adoptopenjdk13-jre                 adoptopenjdk15                     adoptopenjdk8-jre
adoptopenjdk11-openj9-jre          adoptopenjdk13-openj9              adoptopenjdk15-jre                 adoptopenjdk8-openj9
adoptopenjdk11-openj9-jre-large    adoptopenjdk13-openj9-jre          adoptopenjdk15-openj9              adoptopenjdk8-openj9-jre
$ brew install --cask adoptopenjdk11
==> Downloading https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.11%2B9/OpenJDK11U-jdk_x64_mac_hotspot_11.0.11_9.pkg
==> Downloading from https://github-releases.githubusercontent.com/140419044/15623b80-a2e2-11eb-89cd-bed191d70c46?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX
######################################################################## 100.0%
==> Installing Cask adoptopenjdk11
==> Running installer for adoptopenjdk11; your password may be necessary.
Package installers may write to any location; options such as `--appdir` are ignored.
Password:
Sorry, try again.
Password:
installer: Package name is AdoptOpenJDK
installer: Installing at base path /
installer: The install was successful.
package-id: net.adoptopenjdk.11.jdk
version: 11.0.11+9
volume: /
location: 
install-time: 1630903228
🍺  adoptopenjdk11 was successfully installed!
$ 
$ java --version
openjdk 11.0.11 2021-04-20
OpenJDK Runtime Environment AdoptOpenJDK-11.0.11+9 (build 11.0.11+9)
OpenJDK 64-Bit Server VM AdoptOpenJDK-11.0.11+9 (build 11.0.11+9, mixed mode)
  • 이번에는 bash_profile에서 자바 버전 세팅하도록 한다.
    • vi 편집기로 작업했다.
$ vi ~/.bash_profile
  • 이번에는 PATH를 추가한다.
# Java Paths
export JAVA_HOME_11=$(/usr/libexec/java_home -v11)

# Java 11
export JAVA_HOME=$JAVA_HOME_11
  • 편집기에 위 경로를 반영하도록 한다.
$ source ~/.bash_profile

3.2 이번에 다시 3번 명령어를 실행 해본다. 이번에는 정상적으로 Java Home이 설정이 된 것을 확인할 수 있다.

$ bin/nifi.sh start

Java home: /Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home
NiFi home: /Users/evan/Desktop/data_engineering_python/install_files/nifi-1.14.0

Bootstrap Config File: /Users/evan/Desktop/data_engineering_python/install_files/nifi-1.14.0/conf/bootstrap.conf
  1. 실행 후 1분 정도 지난 후, https://localhost:8443/nifi 를 접속하면 아래와 같이 접속이 될 것이다. /img/python/data_engineering/ch02_infra/apache_niFi_install nifi_01.png

  2. 이번에는 페이지를 종료하는 명령어를 실행한다.

$ bin/nifi.sh stop
Java home: /Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home
NiFi home: /Users/evan/Desktop/data_engineering_python/install_files/nifi-1.14.0

Bootstrap Config File: /Users/evan/Desktop/data_engineering_python/install_files/nifi-1.14.0/conf/bootstrap.conf

2021-09-06 13:59:06,374 INFO [main] org.apache.nifi.bootstrap.Command Apache NiFi has accepted the Shutdown Command and is shutting down now
2021-09-06 13:59:06,419 INFO [main] org.apache.nifi.bootstrap.Command Waiting for Apache NiFi to finish shutting down...
2021-09-06 13:59:08,447 INFO [main] org.apache.nifi.bootstrap.Command NiFi has finished shutting down.
  1. 그러나, 사용자 로그인 등이 추가가 되지 않았다. 따라서, 사용자 및 패스워드를 추가하도록 한다.
$ ./bin/nifi.sh set-single-user-credentials <username> <password>
Java home: /Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home
NiFi home: /Users/evan/Desktop/data_engineering_python/install_files/nifi-1.14.0

Bootstrap Config File: /Users/evan/Desktop/data_engineering_python/install_files/nifi-1.14.0/conf/bootstrap.conf

Login Identity Providers Processed [/Users/evan/Desktop/data_engineering_python/install_files/nifi-1.14.0/./conf/login-identity-providers.xml]
  • ID & PW: evan / evan1234567890

6.1. 이번에는 다시 페이지를 실행한다. (페이지: https://localhost:8443/nifi)

$ bin/nifi.sh start

nifi_02.png

  • 이제 접속 하면 아래와 같은 화면이 나타나게 된다.

nifi_03.png

  • nifi 주요 config 설정은 conf/nifi.properties에서 확인이 가능한다.
  • 예를들면, 현재 포트 8443을 9000으로 변경해본다.
#############################################

nifi.web.https.host=127.0.0.1
nifi.web.https.port=9000 # 8443
  • 변경 후, bin/nifi.sh restart 만 실행한 뒤, 이번에는 포트번호만 바꿔서 확인한다.
  • 정상적으로 변경이 되었을 것이다.

nifi_04.png

  1. 이번에는 NiFi에서 실습을 진행해본다. 포트를 다시 8443으로 변경한 뒤, 재시작을 진행한다.
  • 상단 메뉴에서 가장 많이 사용하는 도구는 Processor(처리기)이다.

  • 먼저 Processor를 끌어다가 본 화면에 놓으면 다음과 같은 화면이 나타난다.

    nifi_05.png

  • GenerateFlowFile 처리기와 PutFile을 Filter에서 검색 한 후, ADD 버튼을 클릭하여 순차적으로 놓는다.

nifi_06.png

  • 이번에는 GenerateFlowFile 처리기를 설정하도록 한다. GenerateFlowFile을 더블클릭 한다.
  • 그리고, 아래와 같이 Text를 Custom Text 에서 추가 한다.

nifi_07.png

  • 모든 설정이 끝났으면, APPLY 버튼을 클릭한 후, 아래 그림과 같이 화살표로 연결한다.

nifi_09.png

  • 그리고, 아래 화살표에서 Start 버튼을 클릭한다.

nifi_10.png

  • 그 후에 먼저 GenerateFlowFile에서 재생 아이콘으로 바뀌면 실행한다.
  • 실행이 진행된 후에는 아래 그림과 같이 Queued 의 숫자가 바뀌어 있을 것이다.

nifi_11.png

  • 이 때, 해당 박스에서 오른쪽 마우스 버튼 을 클릭하면 List Queue를 선택하면 아래와 같은 그림이 나타나게 된다.

nifi_12.png

  • 해당 목록에서 맨 왼쪽 ! 아이콘을 클릭하면 아래와 같은 화면이 나온다.

nifi_12.png

  • 그리고 VIEW 버튼을 클릭하면, GenerateFlowFile 에서 입력한 Custom Text를 확인할 수 있다.
  • 해당 파일을 개인 PC로 내려받도록 하는 것이다.
  • PutFile 박스를 실행하면, List Queue 에 있는 파일을 다운로드 받을 수 있다.
    • 다운로드 받을 폴더 경로는 PutFile 박스에서 지정할 수 있다.

nifi_14.png

  • 이제 파일을 확인해보자.
$ ls
0548fe3a-22cb-4ccd-b8d8-09560d471350    ac604de1-91fd-4e8f-a8c8-f7ee49d02ac7    bf33acb7-51d8-4e65-8862-f3604185f63a    cd807cae-94b5-4507-9644-c91a3df7d93e
  • 그런데, filename이 제각각이다. 또한 .txt 형태가 아니다.
  • 따라서, GenerateFlowFile의 설정에서 아래와 같이 filename 필드를 추가 후 myFirstNifiFile.txt 를 추가한다.

nifi_15.png

  • 그리고, 기존 했던 작업을 모두 재 실행한 후, 다시 재 실행한다.
$ ls
0548fe3a-22cb-4ccd-b8d8-09560d471350    ac604de1-91fd-4e8f-a8c8-f7ee49d02ac7    bf33acb7-51d8-4e65-8862-f3604185f63a    cd807cae-94b5-4507-9644-c91a3df7d93e    myFirstNifiFile.txt
  • cat 명령어를 통해서 실제로 파일을 다운로드 받았는지 확인한다.
$ cat myFirstNifiFile.txt 
This is a file from nifi

References