Apache NiFi Installation
Page content
강의 홍보
- 취준생을 위한 강의를 제작하였습니다.
- 본 블로그를 통해서 강의를 수강하신 분은 게시글 제목과 링크를 수강하여 인프런 메시지를 통해 보내주시기를 바랍니다.
스타벅스 아이스 아메리카노를 선물
로 보내드리겠습니다.
- [비전공자 대환영] 제로베이스도 쉽게 입문하는 파이썬 데이터 분석 - 캐글입문기
개요
- 데이터 엔지니어링에 필요한 기본적인 인프라를 설치 진행하는 튜토리얼을 만들었다.
- 기본적으로 교재에 충실하지만, 약 1년전에 쓰인 책이라, 최신 버전으로 업그레이드 하였다.
Apache NiFi 설치과정
- 먼저 웹사이트에 방문하여 필요한 파일을 다운로드 받는다.
- URL: https://nifi.apache.org/download.html
- 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
.tar.gz
파일의 압축을 푼다.
$ tar -xvf nifi-1.14.0-bin.tar.gz
$ ls
nifi-1.14.0 nifi-1.14.0-bin.tar.gz
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를 통해서 지정한다) 11 버전을 설치한다.
- Java 버전을 확인 한다.
- 주요 참고자료: https://mkyong.com/java/how-to-install-java-on-mac-osx/
$ 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분 정도 지난 후, https://localhost:8443/nifi 를 접속하면 아래와 같이 접속이 될 것이다. /img/python/data_engineering/ch02_infra/apache_niFi_install
-
이번에는 페이지를 종료하는 명령어를 실행한다.
$ 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.
- 그러나, 사용자 로그인 등이 추가가 되지 않았다. 따라서, 사용자 및 패스워드를 추가하도록 한다.
$ ./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 주요 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에서 실습을 진행해본다. 포트를 다시 8443으로 변경한 뒤, 재시작을 진행한다.
-
상단 메뉴에서 가장 많이 사용하는 도구는 Processor(처리기)이다.
-
먼저 Processor를 끌어다가 본 화면에 놓으면 다음과 같은 화면이 나타난다.
-
GenerateFlowFile 처리기와 PutFile을 Filter에서 검색 한 후,
ADD
버튼을 클릭하여 순차적으로 놓는다.
- 이번에는 GenerateFlowFile 처리기를 설정하도록 한다. GenerateFlowFile을 더블클릭 한다.
- 그리고, 아래와 같이 Text를
Custom Text
에서 추가 한다.
- 모든 설정이 끝났으면, APPLY 버튼을 클릭한 후, 아래 그림과 같이 화살표로 연결한다.
- 그리고, 아래 화살표에서 Start 버튼을 클릭한다.
- 그 후에 먼저 GenerateFlowFile에서 재생 아이콘으로 바뀌면 실행한다.
- 실행이 진행된 후에는 아래 그림과 같이
Queued
의 숫자가 바뀌어 있을 것이다.
- 이 때, 해당 박스에서
오른쪽 마우스 버튼
을 클릭하면List Queue
를 선택하면 아래와 같은 그림이 나타나게 된다.
- 해당 목록에서 맨 왼쪽
!
아이콘을 클릭하면 아래와 같은 화면이 나온다.
- 그리고 VIEW 버튼을 클릭하면,
GenerateFlowFile
에서 입력한 Custom Text를 확인할 수 있다. - 해당 파일을 개인 PC로 내려받도록 하는 것이다.
- PutFile 박스를 실행하면,
List Queue
에 있는 파일을 다운로드 받을 수 있다.- 다운로드 받을 폴더 경로는
PutFile
박스에서 지정할 수 있다.
- 다운로드 받을 폴더 경로는
- 이제 파일을 확인해보자.
$ 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
를 추가한다.
- 그리고, 기존 했던 작업을 모두 재 실행한 후, 다시 재 실행한다.
$ 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
- Data Engineering with Python by Paul Crickard, https://www.packtpub.com/product/data-engineering-with-python/9781839214189
- Getting Started with Apache NiFi, https://nifi.apache.org/docs/nifi-docs/html/getting-started.html#installing-as-a-service