NiFi 와 TensorflowOnSpark를 활용한 이미지 프로세싱
전 회사에서 다뤘던 Apache NiFi
와 TensorflowOnSpark
를 활용해서 이미지 프로세싱까지 해보는 내용을 다루겠습니다.
Apache NiFi
Apache NiFi supports powerful and scalable directed graphs of data routing, transformation, and system mediation logic.
Apache NiFi DataFlow, ETL
을 구성하는데 필요하는데 필요한 데이터 트랜스포메이션, 전송, flow 로직등을 제공하는 오픈소스 프로젝트입니다.
NiFi는 다음과 같은 특징을 가지고 있습니다.
- 직관적인 웹 인터페이스 제공
- 모든 데이터 흐름 로직에 대한 디자인, 조절, 모니터링 등을 브라우저를 통해서 조작할 수 있다.
- 데이터 flow
- 데이터의 source 에서 target까지의 흐름을 제어할 수 있습니다.
- 다양한 source 지원
- HDFS, S3, HBase 등의 다양한 데이터 저장소와 데이터를 불러올 수 있는 API를 제공하며, processor를 통해 다양한 로직을 개발할 수 있습니다.
- 보안
- SSL, SSH, HTTP, 데이터 암호화 등의 보안기능 제공
홈페이지에 기제된 특징대로 다양한 데이터 원천(source)로 부터 데이터 트랜스포메이션을 제공하며 특정 이벤트를 추가하여 다양한 용도로 활용가능합니다.
NiFi를 활용하여 HDFS로부터 이미지 추출부터 TensorflowOnSpark를 활용한 이미지 프로세싱에 대해서 다뤄보겠습니다.
NiFi는 Niagara File을 줄임말입니다.
NiFi 설치
Centos7 에서 설치를 진행합니다.
NiFi 다운로드 페이지에서 NiFI Binaries
버전을 확인합니다. 저는 1.10.0
버전을 기준으로 진행하겠습니다.
centos에서 적당한 위치로 이동한 후 wget
명령으로 다운로드 받겠습니다.
1 | # cd /some/where/nice/ |
tar xvf
명령으로 압축을 해제해줍시다.
1 | tar xvf nifi-1.10.0-bin.tar.gz |
JVM 설정
NiFi는 JVM 기반으로 동작하므로 JAVA_HOME
경로를 ~/.bashrc
에 넣어줍니다.
1 | echo "export JAVA_HOME=/where/to/java" >> ~/.bashrc |
편의성을 위해 $NIFI_HOME
과 바이너리 파일들을 PATH에 추가합시다.
1 | echo "export NIFI_HOME=/where/to/nifi" >> ~/.bashrc |
NiFi 설정
NiFi를 구동하면 웹 브라우저에서 해당 서버의 IP와 특정 포트를 통해 접근할 수 있습니다.
서버 URL과 포트등의 설정을 변경하고자 하면 $NIFI_HOME/conf/nifi.properties
를 수정합니다.
1 | vi $NIFI_HOME/conf/nifi.properties |
아래에 보면 `# web properties #`에서 포트와 호스트주소를 수정할 수 있습니다.
1
2nifi.web.http.host=
nifi.web.http.port=8080
JVM 메모리 설정은 $NIFI_HOME/conf/bootstrap.conf
에서 java.arg.2=-Xms
부분을 수정하여 조절할 수 있습니다.
NiFi 실행
NiFi 실행 및 종료는 $NIFI_HOME/bin/nifi.sh
스크립트로 관리합니다.
1 | $NIFI_HOME/bin/nifi.sh |
필자는 해당 bin 디렉토리를 PATH에 등록했으므로 쉘에서 nifi.sh start
로 nifi 서버를 실행하겠습니다.
1 | $ nifi.sh start |
ps -ef | grep nifi
로 NiFi 데몬을 확인하실 수 있습니다.
NiFi 로그는 $NIFI_HOME/logs
에 저장됩니다. 설정파일을 수정하여 경로를 수정할 수 있습니다.
이제 브라우저를 통해서 NiFi에 접속합니다.
1 | http://<ip>:<port>/nifi |
IP와 포트를 포함한 URL을 입력후 /nifi
를 추가하여 NiFi에 접속합니다.