Commit ad0ae79b authored by HooYoungAhn's avatar HooYoungAhn
Browse files

remove webstorm .idea directory

parent 33e06ddd
Pipeline #806 canceled with stages
---
html:
toc: true
offline: true
export_on_save:
html: true
---
# KSB 인공지능 프레임워크 개요
---
KSB 인공지능 프레임워크는 다양한 학습모델과 지식/경험을 선택조합하여 서비스를 생성할 수 있는 DIY 자가학습형 지식융합 인공지능 서비스 프레임워크를 지향합니다.
분산병렬 인프라를 기반으로, 다양한 데이터 소스로부터 도메인의 응용서비스를 제공하기까지의 전주기적 솔루션을 지향합니다. 데이터의 수집-적재-처리-분석-서빙에 이르는 시스템을 구성할 수 있는 프레임워크 기능과 이를 실행하고 운영할 수 있는 플랫폼 기능을 제공합니다.
KSB 인공지능 프레임워크는 프레임워크 개발자들이 기능을 확장할 수 있도록 컴퍼넌트와 API를 개발할 수 있는 인터페이스를 제공합니다. 또한 개발자들에 의해서 만들어진 컴퍼넌트나 API 들을 이용하여 응용을 개발하고 실행하도록 하는 사용자 인터페이스를 제공합니다.
KSB 인공지능 프레임워크의 **주요 이해관계자** 는 다음과 같습니다.
- **<span style="font-size: 14pt; color:green">응용 개발자</span>** KSB 인공지능 프레임워크에 탑재된 모듈 및 소프트웨어 컴퍼넌트를 이용하여 응용을 개발하고 이를 실행하여 최종사용자에게 응용을 이용한 서비스를 제공하고자 하는 자
- **<span style="font-size: 14pt; color:green">개발자</span>** 프레임워크 기능을 확장할 수 있도록 컴퍼넌트와 API를 개발하는 자로서 **소프트웨어 컴퍼넌트 개발자**, **파이썬 모듈 개발자**, **지식전문가** 가 포함됩니다.
- **소프트웨어 컴퍼넌트 개발자** 프레임워크의 개발자 인터페이스를 통하여 새로운 소프트웨어 컴퍼넌트를 개발하여 프레임워크에 탑재하는 자
- **파이썬 모듈 개발자** 프레임워크에서 제시하는 인터페이스를 만족하는 파이썬 모듈을 개발하여 프레임워크에 탑재하는 자
- **지식 전문가** 경험이나 지식을 구조화하여 저장하고 이를 활용할 수 있도록 인터페이스를 생성하여 탑재하는 자
- **<span style="font-size: 14pt; color:green">운용자</span>** 프레임워크를 통해 실행된 시스템(엔진)들을 중단없이 안정적으로 실행되도록 자원을 할당하고 운영하고자 하는 자
- **<span style="font-size: 14pt; color:green">관리자</span>** 프레임워크 및 웹툴킷 사용자에 대한 관리 및 시스템 전반적인 관리를 담당하는 자
- **<span style="font-size: 14pt; color:green">최종사용자</span>** 프레임워크를 통해 실행된 응용 시스템으로부터 제공되는 서비스를 최종적으로 제공받는 자
---
## 주요개념
KSB 인공지능 프레임워크는 유기적인 관계에 있는 일련의 작업의 흐름을 **워크플로우** 라는 개념으로 정의합니다. 워크플로우는 독립적인 실행 시스템에 해당하는 단위인 **엔진** 을 하나 이상 선언함으로써 정의될 수 있습니다. 독립적인 논리 배포단위인 **엔진** 은 엔진의 틀에 해당하는 **엔진 컨테이너** 에 필요한 **컴퍼넌트** 를 선언함으로써 정의됩니다. 이러한 과정에 의해 정의된 워크플로우 스펙에 따라 프레임워크는 실행시스템을 동적으로 구성하고, 이를 도메인의 응용에 필요한 서비스를 제공하도록 클러스터 상에 실행합니다.
### 워크플로우
일련의 작업을 정의하고 실행하기 위한 단위입니다. 하나의 워크플로우는 하나 이상의 엔진컨테이너의 정의로 구성될 수 있으며, 워크플로우를 구성하는 각각의 엔진들은 배치실행과 동시실행 방식으로 구동될 수 있습니다.
- **배치실행 방식** 엔진의 순서정보에 의해 순차적으로 일련의 엔진이 실행되고 종료되는 방식
- **동시실행 방식** 워크플로우에 정의된 엔진이 동시에 실행되는 방식
### 엔진컨테이너
엔진컨테이너는 워크플로우 상에서 필요한 목적에 맞게 구성할 수 있는 하나의 실행 시스템인 엔진에 대한 틀로서, 엔진컨터이너 상에 컴퍼넌트들을 탑재하여 각 컴퍼넌트의 값을 설정하여 엔진에 대한 정의를 합니다. 엔진의 유형은 현재 총 12 종이 제공되고 있으며, 자세한 내용은 <a href="./2.4.1.EngineTypeList.html">엔진 유형 목록</a>을 참조하시기 바랍니다.
### 컴퍼넌트
엔진컨테이너를 구성하는 구성체로서, 5가지의 컴퍼넌트의 유형이 존재하며 각각 다음과 같은 역할을 수행합니다.
- **Reader** 데이터 발생지로부터 데이터를 읽어오기 위한 컴퍼넌트 유형
- **Writer** 데이터 저장소로 데이터를 출력하기 위한 컴퍼넌트의 유형
- **Operator** 데이터를 처리하기 위한 컴퍼넌트의 유형
- **Runner** 실행 런타임을 실행하기 위한 컴퍼넌트 유형
- **Controller** 엔진컨테이너 내의 처리절차를 구성하고 실행을 주관하는 컴퍼넌트의 유형
현재 프레임워크 상에는 데이터처리/학습/서빙 관련 총 73종의 컴퍼넌트가 탑재되어 있으며, 자세한 내용은 <a href="./2.4.2.ComponentList.html">컴퍼넌트 목록</a>을 참조하시기 바랍니다. 개략적인 분류는 다음과 같습니다.
- **데이터 수집/처리 컴퍼넌트 (62종)**: 수집/적재 17종, 미니배치 32종, 실시간 처리 13종
- **학습 SW (2종)**: 분산텐서플로우 스케툴러(CoDDL), AutoSparkML
- **모델서빙 관련 컴퍼넌트 (3종)**: 온디맨드 DL 모델 서빙, 스트림 DL 모델서빙, 스트림 ML모델서빙
- **융합서빙 관련 컴퍼넌트 (6종)**: 컨트롤러 1종, 오퍼레이터 5종
------
## KSB 인공지능 프레임워크 SW v19.03 구성요소
### KSB 클라이언트
**KSB 클라이언트** 는 워크플로우를 작성하고, 이를 **KSB 프레임워크** 에서 구동하도록 지시하기 위해 **KSB 프론트엔드** 로 요청하는 역할을 수행하는 도구입니다. **KSB 프레임워크** 의 클라이언트 모듈은 웹기반의 클라이언트 모듈인 **KSB 웹툴킷** 과 스칼라 기반의 클라이언트 모듈인 **KSB Client SDK** 두 가지 형태로 제공됩니다.
#### KSB 웹툴킷
**KSB 웹툴킷** 은 워크플로우를 정의할 수 있는 편집기, 워크플로우를 실행하고 제어하기 위한 모니터링, 데이터의 업로드 및 시각화 등을 웹 방식의 그래픽 환경에서 수행할 수 있도록 제공되는 클라이언트 모듈입니다. 자세한 내용은 <a href="./2.1.IntroductionWebToolkit.html">KSB 웹툴킷 소개</a> 를 참조하시기 바랍니다.
#### KSB Client SDK
**KSB Client SDK** 는 스칼라(자바) 기반의 클라이언트 개발도구로서, 개발자가 **KSB 프레임워크** 상에서 실행하고자 하는 워크플로우를 개발할 수 있는 환경과 작성한 워크플로우를 실행할 수 있는 API 를 함께 제공합니다 (자세한 설명은 <a href="./3.1.HowToConfigureDevelopEnvironment.html">KSB 프레임워크 SW 개발환경 구성</a>을 참조). 또한 **KSB 프레임워크** 상에 실행가능한 다양한 종류의 워크플로우 예제를 포함하고 있으므로, 이를 참조하여 다양한 워크플로우 시나리오 예제를 작성할 수 있습니다.
### KSB 프론트엔드
**KSB 프론트엔드****KSB 웹툴킷** 이나 **KSB Client SDK** 를 이용하여 작성된 워크플로우 스펙을 받아서 **KSB 오케스트레이터** 로 넘겨 줌으로써 워크플로우를 수행하도록 하는 매개역할을 수행합니다. 이 외에도 사용자 관리나 저장소 관리 등의 다양한 요청에 대해 대응하는 front-end 로서의 역할을 수행합니다.
### KSB 메세지 인터페이스
**KSB 메세지 인터페이스** 는 각 컴퍼넌트들에 대한 속성값을 정의하고 값을 전달하기 위한 **KSB 메세지 인터페이스** 객체에 해당합니다.
### KSB 오케스트레이터
**KSB 프론트엔드** 로부터 넘겨받은 워크플로우 사양에 따라 필요한 엔진을 구성하여 실행하도록 요청하고, 각각의 엔진에 대한 구동과 종료 및 제어를 수행하는 등의 역할을 수행합니다.
### KSB 엔진 컴퍼넌트
엔진컨테이너를 구성하는 구성체로서 5가지 유형이 있으며, 이들 5가지의 컴퍼넌트의 조합에 의해 엔진이 생성됩니다. 현재 **KSB 프레임워크** 에는 약 73종 이상의 컴퍼넌트가 구현되어 있습니다. ( 상기 **컴퍼넌트** 설명 참조 )
### KSB 연동플랫폼
**KSB 프레임워크** 는 목적에 따른 다양한 외부 실행 플랫폼과 연동할 수 있는 인터페이스를 제공합니다. 각각의 **KSB 연동플랫폼****엔진컴퍼넌트****Runner** 에 의해 연동과 실행이 제어됩니다. 현재 **KSB 프레임워크** 에는 Spark, Tensorflow, Tensorflow Serving, Jena Knowledge Base 등을 연동하기 위한 모듈이 각각의 **Runner 컴퍼넌트** 로 구현되어 있습니다.
### KSB 저장소
**KSB 프레임워크** 는 수집한 데이터를 적재하기 위한 저장소인 **데이터 저장소**, 자원이나 응용에 필요한 자원이나 룰, 컨텍스트 정보 등을 저장할 수 있는 **자원/룰 저장소**, 프레임워크 자체적인 워크플로우를 보관하기 위한 **워크플로우 저장소**, 크게 3가지 유형의 저장소 기능을 제공합니다.
------
## KSB 배포
**KSB 인공지능 프레임워크**<a href="https://csleoss.etri.re.kr">KSB 인공지능 프레임워크 웹페이지</a> 를 통해 **툴박스 버전****클러스터 버전**, 두 가지의 배포버전에 대한 설치방법을 제공하고 있습니다.
### KSB 툴박스
**KSB 툴박스****KSB 웹툴킷** 과 stand-alone 버전의 **KSB 런타임(실행환경)** 을 지원하는 툴박스 형태의 **KSB 프레임워크** 로서, 사용자의 로컬환경에서 KSB 프레임워크 실행환경을 쉽고 빠르게 구성하여 사용하기 위한 환경을 제공합니다.
### KSB 클러스터
**KSB 클러스터** 는 실제 클러스터 환경에서 운영하기 위한 배포 형태로서 **KSB 웹툴킷** 과 분산병렬 버전의 **KSB 런타임** 을 지원하는 **KSB 프레임워크** 로 구성되어 있습니다. 설치와 사용에 관한 자세한 사항은 <a href="./3.1.HowToConfigureDevelopEnvironment.html">KSB 인공지능 프레임워크 설치</a> 매뉴얼을 참조하시기 바랍니다.
---
html:
toc: true
offline: true
export_on_save:
html: true
---
# KSB 툴박스 설치하기
---
KSB 프레임워크를 쉽게 사용하기 위한 KSB 툴박스 1.0 버전 설치 방법을 설명합니다.
## 설치 요구사항
- Ubuntu 16.04가 설치된 메모리 16GB 이상 데스트탑이나 노트북이 요구됩니다.
- KSB 툴박스는 Hadoop, hbase, kafka, zookeeper, spark 등 빅데이터 처리 프레임워크과 연동합니다. 따라서 다양한 워크플로우 예제를 실행하기 위해서는 16GB 이상의 메모리와 cpu 코어 8개이상의 PC 사양이 요구됩니다.
(메모리 8GB 및 cpu 코어 4개 사양 PC에서는 제한적으로 워크플로우 예제 실행이 가능합니다.)
## 설치 순서
Host PC에 KSB 툴박스를 설치하기 위해서 아래와 같은 절차로 설치합니다.
- [Host PC] csle 사용자 계정(권한: administrator) 생성하기
- [Host PC] hostname을 csle1으로 변경하기
- [Host PC] java-8-oracle 설치하기
- [Host PC] KSB 툴박스 관련 프로그램 설치하기
- [Host PC] SSH port 변경 및 root 로그인 가능하도도록 SSHD config 수정하기
- [Host PC] SSH config 수정하기
- [Host PC] Docker 설치하기
- [Host PC] /etc/hosts 수정하기
- [Host PC] bashrc 설정 추가하기
- [Host PC] 크롬 설치하기
- [Host PC] KSB 툴박스 설치 및 docker image 다운받기
- [Host PC] KSB 툴박스 docker 이미지내 SSH 키를 host pc에 복사하기
- [Host PC] SSH 재시작하기
- [Host PC] ksb-csle 폴더 권한 변경하기
## [Host PC] csle 사용자 계정(권한 : administrator) 생성하기
Host PC에 기존 Ubuntu 사용자와 설치환경을 분리하기 위해 아래의 명령으로 csle 계정을 추가 생성합니다.
```sh
sudo adduser csle
Adding user 'csle' ...
Adding new group 'csle' (1001) ...
Adding new user 'csle' (1001) with group 'csle' ...
Creating home directory '/home/csle' ...
Copying files from '/etc/skel' ...
새 UNIX 암호 입력:
새 UNIX 암호 재입력:
passwd: password updated successfully
Changing the user information for csle
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] Y
```
/etc/sudoers를 열어 csle 계정에 administrator 권한을 추가합니다.
"경고: 읽기 전용 파일을 고치고 있습니다" 경고는 무시하고 저장하고 나옵니다.
```sh
sudo vi /etc/sudoers
# User privilege specification
root ALL=(ALL:ALL) ALL
# 맨 아래줄에 내용을 추가합니다.
#includedir /etc/sudoers.d
csle ALL=(ALL) NOPASSWD: ALL
```
## [Host PC] hostname을 csle1으로 변경하기
docker 컨테이너가 호스트 pc의 네트워크를 동일하게 사용하는 host 모드로 동작하기 위해 docker 컨테이너와 호스트 pc의 호스트네임을 동일하게 합니다.
```sh
sudo vi /etc/hostname
csle1
```
PC를 재부팅하여 csle 계정으로 로그인합니다.
## [Host PC] java-8-oracle 설치하기
Host PC에 Ubuntu 16.04를 처음 설치한 경우 java 8을 설치합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
sudo apt-get update && \
sudo apt-get install -y python-software-properties && \
sudo add-apt-repository -y ppa:webupd8team/java && \
sudo apt-get update && \
echo "oracle-java8-installer \
shared/accepted-oracle-license-v1-1 select true" \
| sudo debconf-set-selections && \
sudo apt-get install -y oracle-java8-installer
```
터미널을 다시 시작한 후, 아래의 명령으로 java 설치 여부를 확인합니다.
```sh
csle@csle1:~$ java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
```
가끔 오라클에서 jdk 버전을 업데이트 하면 아래와 같은 에러가 발생하며 jdk가 설치되지 않는 경우가 있습니다.
```sh
접속 download.oracle.com (download.oracle.com)|23.35.220.157|:80... 접속됨.
HTTP request sent, awaiting response... 404 Not Found
2018-10-17 11:08:56 ERROR 404: Not Found.
download failed
Oracle JDK 8 is NOT installed.
dpkg: error processing package oracle-java8-installer (--configure):
설치한 post-installation 스크립트 하위 프로세스가 오류 1번을 리턴했습니다
처리하는데 오류가 발생했습니다:
oracle-java8-installer
E: Sub-process /usr/bin/dpkg returned an error code (1)
```
해결방법은 오라클 사이트에 방문하여 최신 버전(2018.10.21. 기준 : 8u191)을 jdk-8u191-linux-x64.tar.gz 파일을 다운받습니다.
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
그리고, 아래의 스크립트에서 다운받은 파일의 위치와 버전 부분만을 수정한 후, 터미널에 복사하면 직접 설치가능합니다.
```sh
sudo mkdir /usr/lib/jvm
cd /usr/lib/jvm
sudo tar -xvzf /home/csle/jdk-8u191-linux-x64.tar.gz # 수정 필요
sudo mv jdk1.8.0_191/ java-8-oracle/ # 수정 필요
sudo truncate -s0 /etc/environment
echo "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:\
/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/jvm/java-8-oracle/bin:\
/usr/lib/jvm/java-8-oracle/db/bin:/usr/lib/jvm/java-8-oracle/jre/bin" |\
sudo tee -a /etc/environment >/dev/null && \
echo "J2SDKDIR=/usr/lib/jvm/java-8-oracle" | \
sudo tee -a /etc/environment >/dev/null && \
echo "J2REDIR=/usr/lib/jvm/java-8-oracle/jre*" | \
sudo tee -a /etc/environment >/dev/null && \
echo "JAVA_HOME=/usr/lib/jvm/java-8-oracle" | \
sudo tee -a /etc/environment >/dev/null && \
echo "DERBY_HOME=/usr/lib/jvm/java-8-oracle/db" | \
sudo tee -a /etc/environment >/dev/null
sudo update-alternatives --install \
"/usr/bin/java" "java" "/usr/lib/jvm/java-8-oracle/bin/java" 0
sudo update-alternatives --install \
"/usr/bin/javac" "javac" "/usr/lib/jvm/java-8-oracle/bin/javac" 0
sudo update-alternatives --set java /usr/lib/jvm/java-8-oracle/bin/java
sudo update-alternatives --set javac /usr/lib/jvm/java-8-oracle/bin/javac
update-alternatives --list java
update-alternatives --list javac
```
## [Host PC] KSB 툴박스 관련 프로그램 설치하기
Host PC에 아래의 명령으로 KSB 툴박스 관련 프로그램을 설치합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
sudo apt-get update && \
sudo apt-get install -y --no-install-recommends apt-utils curl bc jq && \
sudo apt-get install -y ssh locales wget git vim rsync locales \
filezilla python3-pip && \
sudo apt-get install -y net-tools && \
pip3 install kafka-python
```
## [Host PC] SSH port 변경 및 root 로그인 가능하도록 SSHD config 수정하기
아래의 명령을 수행하여 포트 정보를 2243로 수정하고, root 로그인을 허용합니다.
```sh
sudo sed -ri 's/^Port 22/Port 2243/g' /etc/ssh/sshd_config
sudo sed -ri \
's/^PermitRootLogin prohibit-password/PermitRootLogin yes/g' \
/etc/ssh/sshd_config
```
## [Host PC] SSH config 수정하기 (known_hosts에 호스트 저장 질문을 하지 않도록 설정)
아래의 명령을 수행하여 ssh_config의 기존 내용을 모두 삭제하고 설정을 추가합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
sudo truncate -s0 /etc/ssh/ssh_config
echo "Host localhost" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "Host 0.0.0.0" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "Host 127.0.0.1" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "Host csle*" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "UserKnownHostsFile=/dev/null" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "Host master" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "UserKnownHostsFile=/dev/null" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
sudo service ssh restart
```
## [Host PC] Docker 설치하기
Host PC에 docker-ce 프로그램을 설치하기 위해 아래 명령어를 순차적으로 입력합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo apt-key add - && \
sudo add-apt-repository \
"deb [arch=amd64]
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" && \
sudo apt-get update && \
apt-cache policy docker-ce && \
sudo apt-get install -y docker-ce=18.06.1~ce~3-0~ubuntu && \
sudo systemctl status docker
```
#### [참고사항] 기존 docker-engine 삭제
```sh
sudo apt-get purge -y docker docker-engine docker.io
```
Docker 명령시 root 권한이 필요합니다. root가 아닌 사용자가 sudo 없이 사용하려면 해당 사용자를 docker 그룹에 추가합니다.
```sh
sudo usermod -aG docker csle
# 사용자가 로그인 중이라면 다시 로그인 후 권한이 적용됩니다.
# 단, 현재 터미널에서만 적용됩니다.
sudo su csle
PC 재부팅
```
PC 재부팅을 통해서 sudo 명령없이 docker 명령을 사용할 수 있습니다.
## [Host PC] /etc/hosts 수정하기
KSB 툴박스의 docker 컨테이너 주소에 쉽게 접근하기 위해 아래와 같이 /etc/hosts 내용을 수정합니다. (host pc의 IP는 192.168.0.5로 가정합니다. 자신의 PC IP에 맞게 설정합니다.)
```sh
127.0.0.1 localhost
# 아래 주석처리. Hdfs 연동시 문제가 생김.
#127.0.1.1 csle1
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
# 아래의 내용 추가
192.168.0.5 csle1 master
```
## [Host PC] bashrc 설정 추가하기
csle 계정의 bashrc 파일을 업데이트 합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
cat <<EOT >> ~/.bashrc
export JAVA_HOME=/usr/lib/jvm/java-8-oracle
export PATH=\$PATH:\$JAVA_HOME/bin
export KSB_HOME=/home/csle/ksb-csle
export PYTHONPATH=/home/csle/ksb-csle/pyML/:\$PYTHONPATH
export PYTHONPATH=./:/home/csle/ksb-csle/ksblib:\$PYTHONPATH
EOT
source ~/.bashrc
```
## [Host PC] 크롬 설치하기 (optional)
KSB 툴박스의 웹툴킷을 안정적으로 사용하기 위해서 크롬 브라우저를 설치합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
cd && \
wget \
https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo apt-get update && \
sudo apt-get install -y libxss1 libappindicator1 libindicator7 && \
sudo dpkg -i google-chrome-stable_current_amd64.deb
```
## [Host PC] KSB 툴박스 설치 및 docker image 다운받기
<a href="http://csleoss.etri.re.kr:8088/kor/sub02_01.do" title="다운로드"> 다운로드</a> 페이지로부터 KSB 툴박스(docker image 별도) 파일을 다운로드합니다.
- ksb_toolbox_v1.tar.gz : KSB 툴박스 파일
<br>
csle 사용자 계정의 home에 ksb_toolbox_v1.tar.gz 압축을 해제합니다. 결과적으로 /home/csle/ksb-csle 폴더가 생성됩니다.
```sh
tar zxvf ksb_toolbox_v1.tar.gz -C /home/csle/
```
/home/csle/ksb-csle 폴더는 다음의 하위 폴더들로 구성됩니다.
- /bin : KSB 프레임워크 shell 스크립트 파일 저장 폴더
- /components : tensorflow train 예제 프로그램 저장 폴더
- /conf : KSB 프레임워크 환경설정 파일 저장 폴더
- /docker : KSB 툴박스 docker 컨테이너 실행 스크립트 저장 폴더
- /examples : CLI(Command Line Interface)를 통해 워크플로우 생성 및 submit 할 수 있는 프로젝트 폴더
- /jars : KSB 프레임워크 1.0 버전의 jar 파일 저장 폴더
- /ksblib : python 전처리 라이브러리 폴더
- /kubernetes : 쿠버네티스 환경설정 폴더
- /logs : log 저장 폴더
- /pyML : autoML python 프로젝트 폴더
- /tools: 예제 테스트를 위한 프로그램(jmeter, hadoop, kafka, maven, .ssh, webToolkit_db)
<br>
Host PC에서 다음 명령으로 KSB 툴박스 docker image를 docker hub로부터 pull 합니다.
```sh
docker pull ksbframework/ksb_toolbox:1.0.0
```
Host PC에서 다음 명령으로 KSB 툴박스 docker image를 확인합니다.
(참고사항: 현재 docker image 버전은 1.0.0 버전이며, 추후 TAG 정보 및 SIZE 정보는 배포 버전에 따라 다를 수 있습니다)
```sh
csle@csle1:~/ksb-csle$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ksbframework/ksb_toolbox 1.0.0 01f760746a56 7 hours ago 15.4GB
```
## [Host PC] KSB 툴박스 docker 이미지내 SSH 키를 host pc에 복사하기
KSB 툴박스 docker 컨테이너의 인증키를 공유하기 위해 ksb-csle/tools 폴더에 있는 .ssh 폴더를 csle 홈에 카피합니다.
```sh
cp -r ~/ksb-csle/tools/.ssh/ /home/csle/
```
authorized_keys를 다른 계정이 읽고 쓸 수 없게 600 mode(소유자만 rw 가능)로 변경합니다.
```
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
```
## [Host PC] SSH 재시작하기
```sh
sudo service ssh restart
```
## [Host PC] ksb-csle 폴더 권한 변경하기
KSB 툴박스 docker 컨테이너에서 Host PC의 ksb-csle 폴더를 엑세스 할 수 있도록 폴더 권한을 변경합니다.
```sh
sudo chmod 777 -R /home/csle/ksb-csle/
```
이상으로 KSB 툴박스를 구동하기 위해 필요한 프로그램 설치 및 설정 변경을 완료하였습니다.
<a href="https://csleoss.etri.re.kr/images/contents/manual_1.0/1.5.HowToRunFirst.html" title="KSB 인공지능 프레임워크 실행하기">KSB 인공지능 프레임워크 실행하기</a> 페이지로 이동하여 KSB 프레임워크를 구동하도록 하겠습니다.
---
html:
toc: true
offline: true
export_on_save:
html: true
---
# KSB 툴박스 설치하기(nvidia-docker버전)
---
KSB 프레임워크를 쉽게 사용하기 위한 KSB 툴박스 v19.03 nvidia-docker 버전 설치 방법을 설명합니다.
## 설치 요구사항
- Ubuntu 16.04가 설치된 메모리 16GB 이상 데스트탑이나 노트북이 요구됩니다.
- KSB 툴박스는 Hadoop, hbase, kafka, zookeeper, spark 등 빅데이터 처리 프레임워크과 연동합니다. 따라서 다양한 워크플로우 예제를 실행하기 위해서는 16GB 이상의 메모리와 cpu 코어 8개이상의 PC 사양이 요구됩니다.
(메모리 8GB 및 cpu 코어 4개 사양 PC에서는 제한적으로 워크플로우 예제 실행이 가능합니다.)
## 사용시 유의사항
- 제한된 GPU 카드에 대해서만 테스트 되어 있습니다.(Titanx, 1080Ti). 따라서 저사양 GPU 카드나 최신 GPU 카드를 사용하는 경우 동작하지 않을 수 있습니다.
- 현재 KSB 툴박스 nvidia-docker 버전은 CUDA 9.0, CUDNN 7.3.1 이 포함되어 있습니다.
```sh
cat /usr/local/cuda/version.txt
CUDA Version 9.0.176
cat /usr/include/cudnn.h | grep CUDNN_MAJOR -A 2
#define CUDNN_MAJOR 7
#define CUDNN_MINOR 3
#define CUDNN_PATCHLEVEL 1
```
## 설치 순서
Host PC에 KSB 툴박스를 설치하기 위해서 아래와 같은 절차로 설치합니다.
- [Host PC] csle 사용자 계정(권한: administrator) 생성하기
- [Host PC] hostname을 csle1으로 변경하기
- [Host PC] NVIDIA 그래픽카드 드라이버 설치하기
- [Host PC] openjdk-8 설치하기
- [Host PC] KSB 툴박스 관련 프로그램 설치하기
- [Host PC] SSH port 변경 및 root 로그인 가능하도록 SSHD config 수정하기
- [Host PC] SSH config 수정하기
- [Host PC] Docker 설치하기
- [Host PC] nvidia-docker 2.0 설치하기
- [Host PC] /etc/hosts 수정하기
- [Host PC] bashrc 설정 추가하기
- [Host PC] 크롬 설치하기
- [Host PC] KSB 툴박스 설치 및 docker image 다운받기
- [Host PC] KSB 툴박스 docker 이미지내 SSH 키를 host pc에 복사하기
- [Host PC] SSH 재시작하기
- [Host PC] ksb-csle 폴더 권한 변경하기
- [Host PC] startDockerCsle.sh, stopDockerCsle.sh 추가하기
## [Host PC] csle 사용자 계정(권한 : administrator) 생성하기
Host PC에 기존 Ubuntu 사용자와 설치환경을 분리하기 위해 아래의 명령으로 csle 계정을 추가 생성합니다.
```sh
sudo adduser csle
Adding user 'csle' ...
Adding new group 'csle' (1001) ...
Adding new user 'csle' (1001) with group 'csle' ...
Creating home directory '/home/csle' ...
Copying files from '/etc/skel' ...
새 UNIX 암호 입력:
새 UNIX 암호 재입력:
passwd: password updated successfully
Changing the user information for csle
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] Y
```
/etc/sudoers를 열어 csle 계정에 administrator 권한을 추가합니다.
"경고: 읽기 전용 파일을 고치고 있습니다" 경고는 무시하고 저장하고 나옵니다.
```sh
sudo vi /etc/sudoers
# User privilege specification
root ALL=(ALL:ALL) ALL
# 맨 아래줄에 내용을 추가합니다.
#includedir /etc/sudoers.d
csle ALL=(ALL) NOPASSWD: ALL
```
## [Host PC] hostname을 csle1으로 변경하기
docker 컨테이너가 호스트 pc의 네트워크를 동일하게 사용하는 host 모드로 동작하기 위해 docker 컨테이너와 호스트 pc의 호스트네임을 동일하게 합니다.
```sh
sudo vi /etc/hostname
csle1
```
PC를 재부팅하여 csle 계정으로 로그인합니다.
## [Host PC] NVIDIA 그래픽카드 드라이버 설치하기
```sh
sudo add-apt-repository ppa:graphics-drivers
sudo apt-get update
왼쪽 우분투 "시스템설정" 아이콘 클릭 --> "자세히 보기" 아이콘 클릭 -->
하단의 "업데이트 설치" 버튼 클릭
왼쪽 우분투 "시스템설정" 아이콘 클릭 --> "소프트웨어&업데이터" 아이콘 클릭 -->
상단 메뉴에서 "추가 드라이버" 메뉴 선택 -->
NVIDIA 드라이버 사용 선택(예:NVIDIA binary driver-version 396.54(독점,확인함)) -->
"바뀐 내용 적용" 후 컴퓨터 재부팅
```
```sh
csle@csle1:~$ nvidia-smi
Sat Oct 24 13:17:41 2018
+----------------------------------------------------------------------------+
| NVIDIA-SMI 396.54 Driver Version: 396.54 |
|------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|==============================+======================+======================|
| 0 TITAN X (Pascal) Off | 00000000:01:00.0 On | N/A |
| 25% 40C P8 17W / 250W | 1186MiB / 12190MiB | 0% Default |
+------------------------------+----------------------+----------------------+
+----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|============================================================================|
| 0 1021 G /usr/lib/jvm/java-8-oracle/bin/java 632MiB |
+----------------------------------------------------------------------------+
```
PC를 재부팅합니다.
## [Host PC] openjdk-8 설치하기
Host PC에 Ubuntu 16.04를 처음 설치한 경우 java openjdk 8을 설치합니다. 아래의 내용을 터미널에 복사하여 설정 가능합니다.
```sh
sudo apt-get update && \
sudo apt-get -y install openjdk-8-jre && \
sudo apt-get -y install openjdk-8-jdk
```
터미널을 다시 시작한 후, 아래의 명령으로 java 설치 여부를 확인합니다.
```sh
csle@csle1:~$ java -version
java version "1.8.0_212"
Java(TM) SE Runtime Environment (build 1.8.0_212-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
```
## [Host PC] KSB 툴박스 관련 프로그램 설치하기
Host PC에 아래의 명령으로 KSB 툴박스 관련 프로그램을 설치합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
sudo apt-get update && \
sudo apt-get install -y --no-install-recommends apt-utils curl bc jq && \
sudo apt-get install -y ssh locales wget git vim rsync locales \
filezilla python3-pip && \
sudo apt-get install -y net-tools && \
pip3 install kafka-python
```
## [Host PC] SSH port 변경 및 root 로그인 가능하도록 SSHD config 수정하기
아래의 명령을 수행하여 포트 정보를 2243로 수정하고, root 로그인을 허용합니다.
```sh
sudo sed -ri 's/^Port 22/Port 2243/g' /etc/ssh/sshd_config
sudo sed -ri \
's/^PermitRootLogin prohibit-password/PermitRootLogin yes/g' \
/etc/ssh/sshd_config
```
## [Host PC] SSH config 수정하기 (known_hosts에 호스트 저장 질문을 하지 않도록 설정)
아래의 명령을 수행하여 ssh_config의 기존 내용을 모두 삭제하고 설정을 추가합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
sudo truncate -s0 /etc/ssh/ssh_config
echo "Host localhost" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "Host 0.0.0.0" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "Host 127.0.0.1" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "Host csle*" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "UserKnownHostsFile=/dev/null" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "Host master" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "UserKnownHostsFile=/dev/null" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
sudo service ssh restart
```
## [Host PC] Docker 설치하기
Host PC에 docker-ce 프로그램을 설치하기 위해 아래 명령어를 순차적으로 입력합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
현재 2018년 10월 최신 버전은 18.06.1\~ce\~3-0\~ubuntu 입니다.
```sh
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo apt-key add - && \
sudo add-apt-repository \
"deb [arch=amd64]
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" && \
sudo apt-get update && \
apt-cache policy docker-ce && \
sudo apt-get install -y docker-ce=18.06.1~ce~3-0~ubuntu && \
sudo systemctl status docker
```
#### [참고사항] 기존 docker-engine 삭제 방법
```sh
sudo apt-get purge -y docker docker-engine docker.io
```
Docker 명령시 root 권한이 필요합니다. root가 아닌 사용자가 sudo 없이 사용하려면 해당 사용자를 docker 그룹에 추가합니다.
```sh
sudo usermod -aG docker csle
# 사용자가 로그인 중이라면 다시 로그인 후 권한이 적용됩니다.
# 단, 현재 터미널에서만 적용됩니다.
sudo su csle
PC 재부팅
```
PC 재부팅을 통해서 sudo 명령없이 docker 명령을 사용할 수 있습니다.
## [Host PC] nvidia-docker 2.0 설치하기
```sh
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
sudo apt-key add - && \
curl -s -L \
https://nvidia.github.io/nvidia-docker/\
ubuntu16.04/amd64/nvidia-docker.list | \
sudo tee /etc/apt/sources.list.d/nvidia-docker.list && \
sudo apt-get update && \
sudo apt-get install -y nvidia-docker2 && \
sudo pkill -SIGHUP dockerd
```
아래의 질의에 대해서 Y를 누르면 설치가 완료됩니다.
```sh
Configuration file '/etc/docker/daemon.json'
==> File on system created by you or by a script.
==> File also in package provided by package maintainer.
어떻게 하시겠습니까? 다음 중에 하나를 선택할 수 있습니다:
Y 또는 I : 패키지 관리자의 버전을 설치합니다
N 또는 O : 현재 설치된 버전을 유지합니다
D : 버전 간의 차이점을 표시합니다
Z : 프로세스를 백그라운드로 하고 상황을 알아봅니다
기본값으로 현재 버전을 그대로 유지합니다.
*** daemon.json (Y/I/N/O/D/Z) [기본값=N] ? Y
```
```sh
csle@csle1:~$ nvidia-docker version
NVIDIA Docker: 2.0.3
Client:
Version: 18.06.1-ce
API version: 1.38
Go version: go1.10.3
Git commit: e68fc7a
Built: Tue Aug 21 17:24:56 2018
OS/Arch: linux/amd64
Experimental: false
```
```sh
Server:
Engine:
Version: 18.06.1-ce
API version: 1.38 (minimum version 1.12)
Go version: go1.10.3
Git commit: e68fc7a
Built: Tue Aug 21 17:23:21 2018
OS/Arch: linux/amd64
Experimental: false
```
### [참고사항] 기존 nvidia-docker 1.0 버전을 삭제 방법
```sh
docker volume ls -q -f driver=nvidia-docker | \
xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f
sudo apt-get purge nvidia-docker
```
## [Host PC] /etc/hosts 수정하기
KSB 툴박스의 docker 컨테이너 주소에 쉽게 접근하기 위해 아래와 같이 /etc/hosts 내용을 수정합니다. (host pc의 IP는 192.168.0.5로 가정합니다. 자신의 PC IP에 맞게 설정합니다.)
```sh
127.0.0.1 localhost
# 아래 주석처리. Hdfs 연동시 문제가 생김.
#127.0.1.1 csle1
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
# 아래의 내용 추가
192.168.0.5 csle1 master
```
## [Host PC] bashrc 설정 추가하기
csle 계정의 bashrc 파일을 업데이트 합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
cat <<EOT >> ~/.bashrc
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=\$PATH:\$JAVA_HOME/bin
export KSB_HOME=/home/csle/ksb-csle
export PYTHONPATH=/home/csle/ksb-csle/pyML/:\$PYTHONPATH
export PYTHONPATH=./:/home/csle/ksb-csle/ksblib:\$PYTHONPATH
EOT
source ~/.bashrc
```
## [Host PC] 크롬 설치하기 (optional)
KSB 툴박스의 웹툴킷을 안정적으로 사용하기 위해서 크롬 브라우저를 설치합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
cd && \
wget \
https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo apt-get update && \
sudo apt-get install -y libxss1 libappindicator1 libindicator7 && \
sudo dpkg -i google-chrome-stable_current_amd64.deb
```
## [Host PC] KSB 프레임워크 설치 및 docker image 다운받기
<a href="http://csleoss.etri.re.kr:8088/kor/sub02_01.do" title="다운로드"> 다운로드</a> 페이지로부터 KSB 툴박스(docker image 별도) 파일을 다운로드합니다.
- ksb_toolbox_v1903.tar.gz : KSB 툴박스 파일
<br>
csle 사용자 계정의 home에 ksb_toolbox_v1903.tar.gz 압축을 해제합니다. 결과적으로 /home/csle/ksb-csle 폴더가 생성됩니다.
```sh
tar zxvf ksb_toolbox_v1903.tar.gz -C /home/csle/
```
/home/csle/ksb-csle 폴더는 다음의 하위 폴더들로 구성됩니다.
- /bin : KSB 프레임워크 shell 스크립트 파일 저장 폴더
- /components : tensorflow train 예제 프로그램 저장 폴더
- /conf : KSB 프레임워크 환경설정 파일 저장 폴더
- /docker : KSB 툴박스 docker 컨테이너 실행 스크립트 저장 폴더
- /examples : CLI(Command Line Interface)를 통해 워크플로우 생성 및 submit 할 수 있는 프로젝트 폴더
- /jars : KSB 프레임워크 19.03 버전의 jar 파일 저장 폴더
- /ksblib : python 전처리 라이브러리 폴더
- /kubernetes : 쿠버네티스 환경설정 폴더
- /logs : log 저장 폴더
- /pyML : autoML python 프로젝트 폴더
- /tools: 예제 테스트를 위한 프로그램(jmeter, hadoop, kafka, maven, .ssh, webToolkit_db)
<br>
Host PC에서 다음 명령으로 KSB 툴박스 docker image를 docker hub로부터 pull 합니다.
```sh
docker pull ksbframework/ksb_toolbox_nvidia:19.03.5-cuda9.0-cudnn7
```
Host PC에서 다음 명령으로 KSB 툴박스 docker image를 확인합니다.
(참고사항: 2019.05.24일 docker image 버전은 19.03.5-cuda9.0-cudnn7 버전이며, 추후 TAG 정보 및 SIZE 정보는 배포 버전에 따라 다를 수 있습니다)
```sh
csle@csle1:~/ksb-csle$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ksbframework/ksb_toolbox_nvidia 19.03.5-cuda9.0-cudnn7 4b0ba4b5b184 5 hours ago 9.48GB
```
## [Host PC] KSB 툴박스 docker 이미지내 SSH 키를 host pc에 복사하기
KSB 툴박스 docker 컨테이너의 인증키를 공유하기 위해 ksb-csle/tools 폴더에 있는 .ssh 폴더를 csle 홈에 카피합니다.
```sh
cp -r ~/ksb-csle/tools/.ssh/ /home/csle/
```
authorized_keys를 다른 계정이 읽고 쓸 수 없게 600 mode(소유자만 rw 가능)로 변경합니다.
```
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
```
## [Host PC] SSH 재시작하기
```sh
sudo service ssh restart
```
## [Host PC] ksb.conf 수정하기
KSB 툴박스 nvidia 이미지 버전은 tensorflow 1.6 gpu 버전과 cpu 버전이 설치되어있습니다. 따라서, 아래와 같이 ksb.conf 파일을 수정합니다.
```sh
tensorflow {
enable = "true"
# python_path = "/anaconda3/envs/tensorflow/bin/python"
python_path = "/anaconda3/envs/tensorflow16_gpu/bin/python"
python_code_project_path = "/analysis"
}
```
## [Host PC] ksb-csle 폴더 권한 변경하기
KSB 툴박스 docker 컨테이너에서 Host PC의 ksb-csle 폴더를 엑세스 할 수 있도록 폴더 권한을 변경합니다.
```sh
sudo chmod 777 -R /home/csle/ksb-csle/
```
## [Host PC] startDockerCsle.sh stopDockerCsle.sh 추가하기
아래의 스크립트를 복사하여 터미널에서 실행하면 startDockerCsle.sh 파일이 생성됩니다.
```sh
mkdir -p /home/csle/ksb-csle/docker/19.03-nvidia
cat <<EOT >> /home/csle/ksb-csle/docker/19.03-nvidia/startDockerCsle.sh
#!/bin/bash
sudo service postgresql stop
docker network rm csle_cluster csle_standalone
docker rm -f csle1
echo "start csle1 slave container..."
docker run --rm -itd \\
--runtime=nvidia \\
--net=host \\
-v /home/csle/ksb-csle:/home/csle/ksb-csle \\
-v /etc/localtime:/etc/localtime:ro \\
-v /etc/timezone:/etc/timezone \\
--user=csle \\
--name=csle1 \\
--hostname=csle1\\
ksbframework/ksb_toolbox_nvidia:19.03.5-cuda9.0-cudnn7 bash
docker exec -it csle1 bash
EOT
chmod +x /home/csle/ksb-csle/docker/19.03-nvidia/startDockerCsle.sh
cat <<EOT >> /home/csle/ksb-csle/docker/19.03-nvidia/stopDockerCsle.sh
#!/bin/bash
docker rm -f csle1
EOT
chmod +x /home/csle/ksb-csle/docker/19.03-nvidia/stopDockerCsle.sh
```
KSB 인공지능 프레임워크 실행하기 위해 <a href="https://csleoss.etri.re.kr/images/contents/manual_1903/1.5.HowToRunFirst-1903.html" title="KSB 인공지능 프레임워크 실행하기">KSB 인공지능 프레임워크 실행하기</a> 페이지로 이동하여 KSB 프레임워크를 구동합니다.
단, nvidia-docker 버전 KSB 프레임워크 구동시 기존 cpu버전 툴박스와의 차이점은 위에서 생성한 /home/csle/ksb-csle/docker/19.03-nvidia/startDockerCsle.sh을 실행하여 KSB 툴박스 docker 컨테이너를 실행하고 접속하는 것일 뿐 모두 동일합니다.
```sh
csle@csle1:~/ksb-csle/docker/19.03-nvidia$ ./startDockerCsle.sh
Error response from daemon: network csle_cluster not found
Error response from daemon: network csle_standalone not found
csle1
start csle1 slave container...
4918997cd2dac93fe0b52f3df3a45a46db6df1f3f052854061696695451d2f22
csle@csle1:/$
```
이상으로 nvidia-docker 버전 KSB 툴박스를 구동하기 위해 준비가 완료되었습니다.
<a href="https://csleoss.etri.re.kr/images/contents/manual_1.0/1.5.HowToRunFirst.html" title="KSB 인공지능 프레임워크 실행하기">KSB 인공지능 프레임워크 실행하기</a> 페이지로 이동하여 KSB 프레임워크를 구동하도록 하겠습니다.
---
html:
toc: true
offline: true
export_on_save:
html: true
---
# KSB 툴박스 설치하기(nvidia-docker버전)
---
KSB 프레임워크를 쉽게 사용하기 위한 KSB 툴박스 1.0 nvidia-docker 버전 설치 방법을 설명합니다.
## 설치 요구사항
- Ubuntu 16.04가 설치된 메모리 16GB 이상 데스트탑이나 노트북이 요구됩니다.
- KSB 툴박스는 Hadoop, hbase, kafka, zookeeper, spark 등 빅데이터 처리 프레임워크과 연동합니다. 따라서 다양한 워크플로우 예제를 실행하기 위해서는 16GB 이상의 메모리와 cpu 코어 8개이상의 PC 사양이 요구됩니다.
(메모리 8GB 및 cpu 코어 4개 사양 PC에서는 제한적으로 워크플로우 예제 실행이 가능합니다.)
## 사용시 유의사항
- 제한된 GPU 카드에 대해서만 테스트 되어 있습니다.(Titanx, 1080Ti). 따라서 저사양 GPU 카드나 최신 GPU 카드를 사용하는 경우 동작하지 않을 수 있습니다.
- 현재 KSB 툴박스 nvidia-docker 버전은 CUDA 9.0, CUDNN 7.3.1 이 포함되어 있습니다.
```sh
cat /usr/local/cuda/version.txt
CUDA Version 9.0.176
cat /usr/include/cudnn.h | grep CUDNN_MAJOR -A 2
#define CUDNN_MAJOR 7
#define CUDNN_MINOR 3
#define CUDNN_PATCHLEVEL 1
```
## 설치 순서
Host PC에 KSB 툴박스를 설치하기 위해서 아래와 같은 절차로 설치합니다.
- [Host PC] csle 사용자 계정(권한: administrator) 생성하기
- [Host PC] hostname을 csle1으로 변경하기
- [Host PC] NVIDIA 그래픽카드 드라이버 설치하기
- [Host PC] openjdk-8 설치하기
- [Host PC] KSB 툴박스 관련 프로그램 설치하기
- [Host PC] SSH port 변경 및 root 로그인 가능하도도록 SSHD config 수정하기
- [Host PC] SSH config 수정하기
- [Host PC] Docker 설치하기
- [Host PC] nvidia-docker 2.0 설치하기
- [Host PC] /etc/hosts 수정하기
- [Host PC] bashrc 설정 추가하기
- [Host PC] 크롬 설치하기
- [Host PC] KSB 툴박스 설치 및 docker image 다운받기
- [Host PC] KSB 툴박스 docker 이미지내 SSH 키를 host pc에 복사하기
- [Host PC] SSH 재시작하기
- [Host PC] ksb-csle 폴더 권한 변경하기
- [Host PC] startDockerCsle.sh, stopDockerCsle.sh 추가하기
## [Host PC] csle 사용자 계정(권한 : administrator) 생성하기
Host PC에 기존 Ubuntu 사용자와 설치환경을 분리하기 위해 아래의 명령으로 csle 계정을 추가 생성합니다.
```sh
sudo adduser csle
Adding user 'csle' ...
Adding new group 'csle' (1001) ...
Adding new user 'csle' (1001) with group 'csle' ...
Creating home directory '/home/csle' ...
Copying files from '/etc/skel' ...
새 UNIX 암호 입력:
새 UNIX 암호 재입력:
passwd: password updated successfully
Changing the user information for csle
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] Y
```
/etc/sudoers를 열어 csle 계정에 administrator 권한을 추가합니다.
"경고: 읽기 전용 파일을 고치고 있습니다" 경고는 무시하고 저장하고 나옵니다.
```sh
sudo vi /etc/sudoers
# User privilege specification
root ALL=(ALL:ALL) ALL
# 맨 아래줄에 내용을 추가합니다.
#includedir /etc/sudoers.d
csle ALL=(ALL) NOPASSWD: ALL
```
## [Host PC] hostname을 csle1으로 변경하기
docker 컨테이너가 호스트 pc의 네트워크를 동일하게 사용하는 host 모드로 동작하기 위해 docker 컨테이너와 호스트 pc의 호스트네임을 동일하게 합니다.
```sh
sudo vi /etc/hostname
csle1
```
PC를 재부팅하여 csle 계정으로 로그인합니다.
## [Host PC] NVIDIA 그래픽카드 드라이버 설치하기
```sh
sudo add-apt-repository ppa:graphics-drivers
sudo apt-get update
왼쪽 우분투 "시스템설정" 아이콘 클릭 --> "자세히 보기" 아이콘 클릭 -->
하단의 "업데이트 설치" 버튼 클릭
왼쪽 우분투 "시스템설정" 아이콘 클릭 --> "소프트웨어&업데이터" 아이콘 클릭 -->
상단 메뉴에서 "추가 드라이버" 메뉴 선택 -->
NVIDIA 드라이버 사용 선택(예:NVIDIA binary driver-version 396.54(독점,확인함)) -->
"바뀐 내용 적용" 후 컴퓨터 재부팅
```
```sh
csle@csle1:~$ nvidia-smi
Sat Oct 24 13:17:41 2018
+----------------------------------------------------------------------------+
| NVIDIA-SMI 396.54 Driver Version: 396.54 |
|------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|==============================+======================+======================|
| 0 TITAN X (Pascal) Off | 00000000:01:00.0 On | N/A |
| 25% 40C P8 17W / 250W | 1186MiB / 12190MiB | 0% Default |
+------------------------------+----------------------+----------------------+
+----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|============================================================================|
| 0 1021 G /usr/lib/jvm/java-8-oracle/bin/java 632MiB |
+----------------------------------------------------------------------------+
```
PC를 재부팅합니다.
## [Host PC] openjdk-8 설치하기
Host PC에 Ubuntu 16.04를 처음 설치한 경우 java openjdk 8을 설치합니다. 아래의 내용을 터미널에 복사하여 설정 가능합니다.
```sh
sudo apt-get update && \
sudo apt-get -y install openjdk-8-jre && \
sudo apt-get -y install openjdk-8-jdk
```
터미널을 다시 시작한 후, 아래의 명령으로 java 설치 여부를 확인합니다.
```sh
csle@csle1:~$ java -version
java version "1.8.0_212"
Java(TM) SE Runtime Environment (build 1.8.0_212-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
```
## [Host PC] KSB 툴박스 관련 프로그램 설치하기
Host PC에 아래의 명령으로 KSB 툴박스 관련 프로그램을 설치합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
sudo apt-get update && \
sudo apt-get install -y --no-install-recommends apt-utils curl bc jq && \
sudo apt-get install -y ssh locales wget git vim rsync locales \
filezilla python3-pip && \
sudo apt-get install -y net-tools && \
pip3 install kafka-python
```
## [Host PC] SSH port 변경 및 root 로그인 가능하도록 SSHD config 수정하기
아래의 명령을 수행하여 포트 정보를 2243로 수정하고, root 로그인을 허용합니다.
```sh
sudo sed -ri 's/^Port 22/Port 2243/g' /etc/ssh/sshd_config
sudo sed -ri \
's/^PermitRootLogin prohibit-password/PermitRootLogin yes/g' \
/etc/ssh/sshd_config
```
만약 사용자가 openSSH를 사용한다면, 위의 스크립트이 적용되지 않습니다. 따라서, 직접 port 번호와 PermitRootLogin를 수정합니다.
## [Host PC] SSH config 수정하기 (known_hosts에 호스트 저장 질문을 하지 않도록 설정)
아래의 명령을 수행하여 ssh_config의 기존 내용을 모두 삭제하고 설정을 추가합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
sudo truncate -s0 /etc/ssh/ssh_config
echo "Host localhost" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "Host 0.0.0.0" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "Host 127.0.0.1" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "Host csle*" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "UserKnownHostsFile=/dev/null" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "Host master" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "UserKnownHostsFile=/dev/null" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
sudo service ssh restart
```
## [Host PC] Docker 설치하기
Host PC에 docker-ce 프로그램을 설치하기 위해 아래 명령어를 순차적으로 입력합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
현재 2018년 10월 최신 버전은 18.06.1\~ce\~3-0\~ubuntu 입니다.
```sh
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo apt-key add - && \
sudo add-apt-repository \
"deb [arch=amd64]
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" && \
sudo apt-get update && \
apt-cache policy docker-ce && \
sudo apt-get install -y docker-ce=18.06.1~ce~3-0~ubuntu && \
sudo systemctl status docker
```
#### [참고사항] 기존 docker-engine 삭제 방법
```sh
sudo apt-get purge -y docker docker-engine docker.io
```
Docker 명령시 root 권한이 필요합니다. root가 아닌 사용자가 sudo 없이 사용하려면 해당 사용자를 docker 그룹에 추가합니다.
```sh
sudo usermod -aG docker csle
# 사용자가 로그인 중이라면 다시 로그인 후 권한이 적용됩니다.
# 단, 현재 터미널에서만 적용됩니다.
sudo su csle
PC 재부팅
```
PC 재부팅을 통해서 sudo 명령없이 docker 명령을 사용할 수 있습니다.
## [Host PC] nvidia-docker 2.0 설치하기
```sh
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
sudo apt-key add - && \
curl -s -L \
https://nvidia.github.io/nvidia-docker/\
ubuntu16.04/amd64/nvidia-docker.list | \
sudo tee /etc/apt/sources.list.d/nvidia-docker.list && \
sudo apt-get update && \
sudo apt-get install -y nvidia-docker2 && \
sudo pkill -SIGHUP dockerd
```
아래의 질의에 대해서 Y를 누르면 설치가 완료됩니다.
```sh
Configuration file '/etc/docker/daemon.json'
==> File on system created by you or by a script.
==> File also in package provided by package maintainer.
어떻게 하시겠습니까? 다음 중에 하나를 선택할 수 있습니다:
Y 또는 I : 패키지 관리자의 버전을 설치합니다
N 또는 O : 현재 설치된 버전을 유지합니다
D : 버전 간의 차이점을 표시합니다
Z : 프로세스를 백그라운드로 하고 상황을 알아봅니다
기본값으로 현재 버전을 그대로 유지합니다.
*** daemon.json (Y/I/N/O/D/Z) [기본값=N] ? Y
```
```sh
csle@csle1:~$ nvidia-docker version
NVIDIA Docker: 2.0.3
Client:
Version: 18.06.1-ce
API version: 1.38
Go version: go1.10.3
Git commit: e68fc7a
Built: Tue Aug 21 17:24:56 2018
OS/Arch: linux/amd64
Experimental: false
```
```sh
Server:
Engine:
Version: 18.06.1-ce
API version: 1.38 (minimum version 1.12)
Go version: go1.10.3
Git commit: e68fc7a
Built: Tue Aug 21 17:23:21 2018
OS/Arch: linux/amd64
Experimental: false
```
### [참고사항] 기존 nvidia-docker 1.0 버전을 삭제 방법
```sh
docker volume ls -q -f driver=nvidia-docker | \
xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f
sudo apt-get purge nvidia-docker
```
## [Host PC] /etc/hosts 수정하기
KSB 툴박스의 docker 컨테이너 주소에 쉽게 접근하기 위해 아래와 같이 /etc/hosts 내용을 수정합니다. (host pc의 IP는 192.168.0.5로 가정합니다. 자신의 PC IP에 맞게 설정합니다.)
```sh
127.0.0.1 localhost
# 아래 주석처리. Hdfs 연동시 문제가 생김.
#127.0.1.1 csle1
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
# 아래의 내용 추가
192.168.0.5 csle1 master
```
## [Host PC] bashrc 설정 추가하기
csle 계정의 bashrc 파일을 업데이트 합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
cat <<EOT >> ~/.bashrc
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=\$PATH:\$JAVA_HOME/bin
export KSB_HOME=/home/csle/ksb-csle
export PYTHONPATH=/home/csle/ksb-csle/pyML/:\$PYTHONPATH
export PYTHONPATH=./:/home/csle/ksb-csle/ksblib:\$PYTHONPATH
EOT
source ~/.bashrc
```
## [Host PC] 크롬 설치하기 (optional)
KSB 툴박스의 웹툴킷을 안정적으로 사용하기 위해서 크롬 브라우저를 설치합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
cd && \
wget \
https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo apt-get update && \
sudo apt-get install -y libxss1 libappindicator1 libindicator7 && \
sudo dpkg -i google-chrome-stable_current_amd64.deb
```
## [Host PC] KSB 프레임워크 설치 및 docker image 다운받기
<a href="http://csleoss.etri.re.kr:8088/kor/sub02_01.do" title="다운로드"> 다운로드</a> 페이지로부터 KSB 툴박스(docker image 별도) 파일을 다운로드합니다.
- ksb_toolbox_v1.tar.gz : KSB 툴박스 파일
<br>
csle 사용자 계정의 home에 ksb_toolbox_v1.tar.gz 압축을 해제합니다. 결과적으로 /home/csle/ksb-csle 폴더가 생성됩니다.
```sh
tar zxvf ksb_toolbox_v1.tar.gz -C /home/csle/
```
/home/csle/ksb-csle 폴더는 다음의 하위 폴더들로 구성됩니다.
- /bin : KSB 프레임워크 shell 스크립트 파일 저장 폴더
- /components : tensorflow train 예제 프로그램 저장 폴더
- /conf : KSB 프레임워크 환경설정 파일 저장 폴더
- /docker : KSB 툴박스 docker 컨테이너 실행 스크립트 저장 폴더
- /examples : CLI(Command Line Interface)를 통해 워크플로우 생성 및 submit 할 수 있는 프로젝트 폴더
- /jars : KSB 프레임워크 1.0 버전의 jar 파일 저장 폴더
- /ksblib : python 전처리 라이브러리 폴더
- /kubernetes : 쿠버네티스 환경설정 폴더
- /logs : log 저장 폴더
- /pyML : autoML python 프로젝트 폴더
- /tools: 예제 테스트를 위한 프로그램(jmeter, hadoop, kafka, maven, .ssh, webToolkit_db)
<br>
Host PC에서 다음 명령으로 KSB 툴박스 docker image를 docker hub로부터 pull 합니다.
```sh
docker pull ksbframework/ksb_toolbox_nvidia:1.0.1-cuda9.0-cudnn7
```
Host PC에서 다음 명령으로 KSB 툴박스 docker image를 확인합니다.
(참고사항: 2019.05.24일 docker image 버전은 1.0.1 버전이며, 추후 TAG 정보 및 SIZE 정보는 배포 버전에 따라 다를 수 있습니다)
```sh
csle@csle1:~/ksb-csle$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ksbframework/ksb_toolbox_nvidia 1.0.1-cuda9.0-cudnn7 e3661c94fd07 7 hours ago 9.39GB
```
## [Host PC] KSB 툴박스 docker 이미지내 SSH 키를 host pc에 복사하기
KSB 툴박스 docker 컨테이너의 인증키를 공유하기 위해 ksb-csle/tools 폴더에 있는 .ssh 폴더를 csle 홈에 카피합니다.
```sh
cp -r ~/ksb-csle/tools/.ssh/ /home/csle/
```
authorized_keys를 다른 계정이 읽고 쓸 수 없게 600 mode(소유자만 rw 가능)로 변경합니다.
```
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
```
## [Host PC] SSH 재시작하기
```sh
sudo service ssh restart
```
## [Host PC] ksb.conf 수정하기
KSB 툴박스 nvidia 이미지 버전은 tensorflow 1.6 gpu 버전과 cpu 버전이 설치되어있습니다. 따라서, 아래와 같이 ksb.conf 파일을 수정합니다.
```sh
tensorflow {
enable = "true"
# python_path = "/anaconda3/envs/tensorflow/bin/python"
python_path = "/anaconda3/envs/tensorflow16_gpu/bin/python"
python_code_project_path = "/analysis"
}
```
## [Host PC] ksb-csle 폴더 권한 변경하기
KSB 툴박스 docker 컨테이너에서 Host PC의 ksb-csle 폴더를 엑세스 할 수 있도록 폴더 권한을 변경합니다.
```sh
sudo chmod 777 -R /home/csle/ksb-csle/
```
## [Host PC] startDockerCsle.sh stopDockerCsle.sh 추가하기
아래의 스크립트를 복사하여 터미널에서 실행하면 startDockerCsle.sh 파일이 생성됩니다.
```sh
mkdir -p /home/csle/ksb-csle/docker/1.0-nvidia
cat <<EOT >> /home/csle/ksb-csle/docker/1.0-nvidia/startDockerCsle.sh
#!/bin/bash
sudo service postgresql stop
docker network rm csle_cluster csle_standalone
docker rm -f csle1
echo "start csle1 slave container..."
docker run --rm -itd \\
--runtime=nvidia \\
--net=host \\
-v /home/csle/ksb-csle:/home/csle/ksb-csle \\
-v /etc/localtime:/etc/localtime:ro \\
-v /etc/timezone:/etc/timezone \\
--user=csle \\
--name=csle1 \\
--hostname=csle1\\
ksbframework/ksb_toolbox_nvidia:1.0.1-cuda9.0-cudnn7 bash
docker exec -it csle1 bash
EOT
chmod +x /home/csle/ksb-csle/docker/1.0-nvidia/startDockerCsle.sh
cat <<EOT >> /home/csle/ksb-csle/docker/1.0-nvidia/stopDockerCsle.sh
#!/bin/bash
docker rm -f csle1
EOT
chmod +x /home/csle/ksb-csle/docker/1.0-nvidia/stopDockerCsle.sh
```
KSB 인공지능 프레임워크 실행하기 위해 <a href="https://csleoss.etri.re.kr/images/contents/manual_1.0/1.5.HowToRunFirst.html" title="KSB 인공지능 프레임워크 실행하기">KSB 인공지능 프레임워크 실행하기</a> 페이지로 이동하여 KSB 프레임워크를 구동합니다.
단, nvidia-docker 버전 KSB 프레임워크 구동시 기존 cpu버전 툴박스와의 차이점은 위에서 생성한 /home/csle/ksb-csle/docker/1.0-nvidia/startDockerCsle.sh을 실행하여 KSB 툴박스 docker 컨테이너를 실행하고 접속하는 것일 뿐 모두 동일합니다.
```sh
csle@csle1:~/ksb-csle/docker/1.0-nvidia$ ./startDockerCsle.sh
Error response from daemon: network csle_cluster not found
Error response from daemon: network csle_standalone not found
csle1
start csle1 slave container...
4918997cd2dac93fe0b52f3df3a45a46db6df1f3f052854061696695451d2f22
csle@csle1:/$
```
이상으로 nvidia-docker 버전 KSB 툴박스를 구동하기 위해 준비가 완료되었습니다.
<a href="https://csleoss.etri.re.kr/images/contents/manual_1.0/1.5.HowToRunFirst.html" title="KSB 인공지능 프레임워크 실행하기">KSB 인공지능 프레임워크 실행하기</a> 페이지로 이동하여 KSB 프레임워크를 구동하도록 하겠습니다.
---
html:
toc: true
offline: true
export_on_save:
html: true
---
# KSB 툴박스 설치하기
---
KSB 프레임워크를 쉽게 사용하기 위한 KSB 툴박스 1.0 버전 설치 방법을 설명합니다.
## 설치 요구사항
- Ubuntu 16.04가 설치된 메모리 16GB 이상 데스트탑이나 노트북이 요구됩니다.
- KSB 툴박스는 Hadoop, hbase, kafka, zookeeper, spark 등 빅데이터 처리 프레임워크과 연동합니다. 따라서 다양한 워크플로우 예제를 실행하기 위해서는 메모리 16GB 이상이 요구됩니다.
(메모리 8GB 사양 PC에서는 제한적으로 워크플로우 예제 실행이 가능합니다.)
## 설치 순서
Host PC에 KSB 툴박스를 설치하기 위해서 아래와 같은 절차로 설치합니다.
- [Host PC] csle 사용자 계정(권한: administrator) 생성하기
- [Host PC] hostname을 csle1으로 변경하기
- [Host PC] java-8-oracle 설치하기
- [Host PC] KSB 툴박스 관련 프로그램 설치하기
- [Host PC] SSH port 변경 및 root 로그인 가능하도도록 SSHD config 수정하기
- [Host PC] SSH config 수정하기
- [Host PC] Docker 설치하기
- [Host PC] /etc/hosts 수정하기
- [Host PC] bashrc 설정 추가하기
- [Host PC] 크롬 설치하기
- [Host PC] KSB 툴박스 설치 및 docker image 다운받기
- [Host PC] KSB 툴박스 docker 이미지내 SSH 키를 host pc에 복사하기
- [Host PC] SSH 재시작하기
- [Host PC] ksb-csle 폴더 권한 변경하기
## [Host PC] csle 사용자 계정(권한 : administrator) 생성하기
Host PC에 기존 Ubuntu 사용자와 설치환경을 분리하기 위해 아래의 명령으로 csle 계정을 추가 생성합니다.
```sh
sudo adduser csle
Adding user 'csle' ...
Adding new group 'csle' (1001) ...
Adding new user 'csle' (1001) with group 'csle' ...
Creating home directory '/home/csle' ...
Copying files from '/etc/skel' ...
새 UNIX 암호 입력:
새 UNIX 암호 재입력:
passwd: password updated successfully
Changing the user information for csle
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] Y
```
/etc/sudoers를 열어 csle 계정에 administrator 권한을 추가합니다.
"경고: 읽기 전용 파일을 고치고 있습니다" 경고는 무시하고 저장하고 나옵니다.
```sh
sudo vi /etc/sudoers
# User privilege specification
root ALL=(ALL:ALL) ALL
# 맨 아래줄에 내용을 추가합니다.
#includedir /etc/sudoers.d
csle ALL=(ALL) NOPASSWD: ALL
```
## [Host PC] hostname을 csle1으로 변경하기
docker 컨테이너가 호스트 pc의 네트워크를 동일하게 사용하는 host 모드로 동작하기 위해 docker 컨테이너와 호스트 pc의 호스트네임을 동일하게 합니다.
```sh
sudo vi /etc/hostname
csle1
```
PC를 재부팅하여 csle 계정으로 로그인합니다.
## [Host PC] java-8-oracle 설치하기
Host PC에 Ubuntu 16.04를 처음 설치한 경우 java 8을 설치합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
sudo apt-get update && \
sudo apt-get install -y python-software-properties && \
sudo add-apt-repository -y ppa:webupd8team/java && \
sudo apt-get update && \
echo "oracle-java8-installer shared/accepted-oracle-license-v1-1 select true" | sudo debconf-set-selections && \
sudo apt-get install -y oracle-java8-installer
```
터미널을 다시 시작한 후, 아래의 명령으로 java 설치 여부를 확인합니다.
```sh
csle@csle1:~$ java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
```
가끔 오라클에서 jdk 버전을 업데이트 하면 아래와 같은 에러가 발생하며 jdk가 설치되지 않는 경우가 있습니다.
```sh
접속 download.oracle.com (download.oracle.com)|23.35.220.157|:80... 접속됨.
HTTP request sent, awaiting response... 404 Not Found
2018-10-17 11:08:56 ERROR 404: Not Found.
download failed
Oracle JDK 8 is NOT installed.
dpkg: error processing package oracle-java8-installer (--configure):
설치한 post-installation 스크립트 하위 프로세스가 오류 1번을 리턴했습니다
처리하는데 오류가 발생했습니다:
oracle-java8-installer
E: Sub-process /usr/bin/dpkg returned an error code (1)
```
해결방법은 오라클 사이트에 방문하여 최신 버전(2018.10.21. 기준 : 8u191)을 jdk-8u191-linux-x64.tar.gz 파일을 다운받습니다.
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
그리고, 아래의 스크립트에서 다운받은 파일의 위치와 버전 부분만을 수정한 후, 터미널에 복사하면 직접 설치가능합니다.
```sh
sudo mkdir /usr/lib/jvm
cd /usr/lib/jvm
sudo tar -xvzf /home/csle/jdk-8u191-linux-x64.tar.gz # 수정 필요
sudo mv jdk1.8.0_191/ java-8-oracle/ # 수정 필요
sudo truncate -s0 /etc/environment
echo "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/jvm/java-8-oracle/bin:/usr/lib/jvm/java-8-oracle/db/bin:/usr/lib/jvm/java-8-oracle/jre/bin" | sudo tee -a /etc/environment >/dev/null
echo "J2SDKDIR=/usr/lib/jvm/java-8-oracle" | sudo tee -a /etc/environment >/dev/null
echo "J2REDIR=/usr/lib/jvm/java-8-oracle/jre*" | sudo tee -a /etc/environment >/dev/null
echo "JAVA_HOME=/usr/lib/jvm/java-8-oracle" | sudo tee -a /etc/environment >/dev/null
echo "DERBY_HOME=/usr/lib/jvm/java-8-oracle/db" | sudo tee -a /etc/environment >/dev/null
sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/java-8-oracle/bin/java" 0
sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/java-8-oracle/bin/javac" 0
sudo update-alternatives --set java /usr/lib/jvm/java-8-oracle/bin/java
sudo update-alternatives --set javac /usr/lib/jvm/java-8-oracle/bin/javac
update-alternatives --list java
update-alternatives --list javac
```
## [Host PC] KSB 툴박스 관련 프로그램 설치하기
Host PC에 아래의 명령으로 KSB 툴박스 관련 프로그램을 설치합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
sudo apt-get update && \
sudo apt-get install -y --no-install-recommends apt-utils curl bc jq && \
sudo apt-get install -y ssh locales wget git vim rsync locales filezilla python3-pip && \
sudo apt-get install -y net-tools && \
pip3 install kafka-python
```
## [Host PC] SSH port 변경 및 root 로그인 가능하도록 SSHD config 수정하기
아래의 명령을 수행하여 포트 정보를 2243로 수정하고, root 로그인을 허용합니다.
```sh
sudo sed -ri 's/^Port 22/Port 2243/g' /etc/ssh/sshd_config
sudo sed -ri 's/^PermitRootLogin prohibit-password/PermitRootLogin yes/g' /etc/ssh/sshd_config
```
## [Host PC] SSH config 수정하기 (known_hosts에 호스트 저장 질문을 하지 않도록 설정)
아래의 명령을 수행하여 ssh_config의 기존 내용을 모두 삭제하고 설정을 추가합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
sudo truncate -s0 /etc/ssh/ssh_config
echo "Host localhost" | sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" | sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "Host 0.0.0.0" | sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" | sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "Host 127.0.0.1" | sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" | sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "Host csle*" | sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" | sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "UserKnownHostsFile=/dev/null" | sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "Host master" | sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" | sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "UserKnownHostsFile=/dev/null" | sudo tee -a /etc/ssh/ssh_config >/dev/null
```
## [Host PC] Docker 설치하기
Host PC에 docker 프로그램을 설치하기 위해 아래 명령어를 순차적으로 입력합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
sudo curl -fsSL https://apt.dockerproject.org/gpg | sudo apt-key add - && \
sudo apt-key fingerprint 58118E89F3A912897C070ADBF76221572C52609D && \
sudo add-apt-repository -y "deb https://apt.dockerproject.org/repo/ ubuntu-xenial main" && \
sudo apt-get update && \
sudo apt-get -y install docker-engine && \
sudo systemctl enable docker
```
Docker 명령시 root 권한이 필요합니다. root가 아닌 사용자가 sudo 없이 사용하려면 해당 사용자를 docker 그룹에 추가합니다.
```sh
sudo usermod -aG docker csle
# 사용자가 로그인 중이라면 다시 로그인 후 권한이 적용됩니다. 단, 현재 터미널에서만 적용됩니다.
sudo su csle
PC 재부팅
```
PC 재부팅을 통해서 sudo 명령없이 docker 명령을 사용할 수 있습니다.
## [Host PC] /etc/hosts 수정하기
KSB 툴박스의 docker 컨테이너 주소에 쉽게 접근하기 위해 아래와 같이 /etc/hosts 내용을 수정합니다. (host pc의 IP는 192.168.0.5로 가정합니다. 자신의 PC IP에 맞게 설정합니다.)
```sh
127.0.0.1 localhost
# 아래 주석처리. Hdfs 연동시 문제가 생김.
#127.0.1.1 csle1
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
# 아래의 내용 추가
192.168.0.5 csle1 master
```
## [Host PC] bashrc 설정 추가하기
csle 계정의 bashrc 파일을 업데이트 합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
cat <<EOT >> ~/.bashrc
export JAVA_HOME=/usr/lib/jvm/java-8-oracle
export PATH=\$PATH:\$JAVA_HOME/bin
export KSB_HOME=/home/csle/ksb-csle
export PYTHONPATH=/home/csle/ksb-csle/pyML/:\$PYTHONPATH
export PYTHONPATH=./:/home/csle/ksb-csle/ksblib:\$PYTHONPATH
EOT
source ~/.bashrc
```
## [Host PC] 크롬 설치하기 (optional)
KSB 툴박스의 웹툴킷을 안정적으로 사용하기 위해서 크롬 브라우저를 설치합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb && \
sudo apt-get update && \
sudo apt-get install -y libxss1 libappindicator1 libindicator7 && \
sudo dpkg -i google-chrome-stable_current_amd64.deb
```
## [Host PC] KSB 프레임워크 설치 및 docker image 다운받기
<a href="http://csleoss.etri.re.kr:8088/kor/sub02_01.do" title="다운로드"> 다운로드</a> 페이지로부터 KSB 툴박스(docker image 별도) 파일을 다운로드합니다.
- ksb_toolbox_v1.tar.gz : KSB 툴박스 파일
<br>
csle 사용자 계정의 home에 ksb_toolbox_v1.tar.gz 압축을 해제합니다. 결과적으로 /home/csle/ksb-csle 폴더가 생성됩니다.
```sh
tar zxvf ksb_toolbox_v1.tar.gz -C /home/csle/
```
/home/csle/ksb-csle 폴더는 다음의 하위 폴더들로 구성됩니다.
- /bin : KSB 프레임워크 shell 스크립트 파일 저장 폴더
- /components : tensorflow train 예제 프로그램 저장 폴더
- /conf : KSB 프레임워크 환경설정 파일 저장 폴더
- /docker : KSB 툴박스 docker 컨테이너 실행 스크립트 저장 폴더
- /examples : CLI(Command Line Interface)를 통해 워크플로우 생성 및 submit 할 수 있는 프로젝트 폴더
- /jars : KSB 프레임워크 1.0 버전의 jar 파일 저장 폴더
- /ksblib : python 전처리 라이브러리 폴더
- /kubernetes : 쿠버네티스 환경설정 폴더
- /logs : log 저장 폴더
- /pyML : autoML python 프로젝트 폴더
- /tools: 예제 테스트를 위한 프로그램(jmeter, hadoop, kafka, maven, .ssh, webToolkit_db)
<br>
Host PC에서 다음 명령으로 KSB 툴박스 docker image를 docker hub로부터 pull 합니다.
```sh
docker pull ksbframework/ksb_toolbox:1.0.0
```
Host PC에서 다음 명령으로 KSB 툴박스 docker image를 확인합니다.
(참고사항: 현재 docker image 버전은 1.0.0 버전이며, 추후 TAG 정보 및 SIZE 정보는 배포 버전에 따라 다를 수 있습니다)
```sh
csle@csle1:~/ksb-csle$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ksbframework/ksb_toolbox 1.0.0 01f760746a56 7 hours ago 15.4GB
```
## [Host PC] KSB 툴박스 docker 이미지내 SSH 키를 host pc에 복사하기
KSB 툴박스 docker 컨테이너의 인증키를 공유하기 위해 ksb-csle/tools 폴더에 있는 .ssh 폴더를 csle 홈에 카피합니다.
```sh
cp -r ~/ksb-csle/tools/.ssh/ /home/csle/
```
## [Host PC] SSH 재시작하기
```sh
sudo service ssh restart
```
## [Host PC] ksb-csle 폴더 권한 변경하기
KSB 툴박스 docker 컨테이너에서 Host PC의 ksb-csle 폴더를 엑세스 할 수 있도록 폴더 권한을 변경합니다.
```sh
sudo chmod 777 -R /home/csle/ksb-csle/
```
이상으로 KSB 툴박스를 구동하기 위해 필요한 프로그램 설치 및 설정 변경을 완료하였습니다.
<a href="https://csleoss.etri.re.kr/images/contents/manual_1.0/1.5.HowToRunFirst.html" title="KSB 인공지능 프레임워크 실행하기">KSB 인공지능 프레임워크 실행하기</a> 페이지로 이동하여 KSB 프레임워크를 구동하도록 하겠습니다.
---
html:
toc: true
offline: true
export_on_save:
html: true
---
# KSB 툴박스 설치하기
---
KSB 프레임워크를 쉽게 사용하기 위한 KSB 툴박스 1.0 버전 설치 방법을 설명합니다.
## 설치 요구사항
- Ubuntu 16.04가 설치된 메모리 16GB 이상 데스트탑이나 노트북이 요구됩니다.
- KSB 툴박스는 Hadoop, hbase, kafka, zookeeper, spark 등 빅데이터 처리 프레임워크과 연동합니다. 따라서 다양한 워크플로우 예제를 실행하기 위해서는 16GB 이상의 메모리와 cpu 코어 8개이상의 PC 사양이 요구됩니다.
(메모리 8GB 및 cpu 코어 4개 사양 PC에서는 제한적으로 워크플로우 예제 실행이 가능합니다.)
## 설치 순서
Host PC에 KSB 툴박스를 설치하기 위해서 아래와 같은 절차로 설치합니다.
- [Host PC] csle 사용자 계정(권한: administrator) 생성하기
- [Host PC] hostname을 csle1으로 변경하기
- [Host PC] openjdk-8 설치하기
- [Host PC] KSB 툴박스 관련 프로그램 설치하기
- [Host PC] SSH port 변경 및 root 로그인 가능하도도록 SSHD config 수정하기
- [Host PC] SSH config 수정하기
- [Host PC] Docker 설치하기
- [Host PC] /etc/hosts 수정하기
- [Host PC] bashrc 설정 추가하기
- [Host PC] 크롬 설치하기
- [Host PC] KSB 툴박스 설치 및 docker image 다운받기
- [Host PC] KSB 툴박스 docker 이미지내 SSH 키를 host pc에 복사하기
- [Host PC] SSH 재시작하기
- [Host PC] ksb-csle 폴더 권한 변경하기
## [Host PC] csle 사용자 계정(권한 : administrator) 생성하기
Host PC에 기존 Ubuntu 사용자와 설치환경을 분리하기 위해 아래의 명령으로 csle 계정을 추가 생성합니다.
```sh
sudo adduser csle
Adding user 'csle' ...
Adding new group 'csle' (1001) ...
Adding new user 'csle' (1001) with group 'csle' ...
Creating home directory '/home/csle' ...
Copying files from '/etc/skel' ...
새 UNIX 암호 입력:
새 UNIX 암호 재입력:
passwd: password updated successfully
Changing the user information for csle
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] Y
```
/etc/sudoers를 열어 csle 계정에 administrator 권한을 추가합니다.
"경고: 읽기 전용 파일을 고치고 있습니다" 경고는 무시하고 저장하고 나옵니다.
```sh
sudo vi /etc/sudoers
# User privilege specification
root ALL=(ALL:ALL) ALL
# 맨 아래줄에 내용을 추가합니다.
#includedir /etc/sudoers.d
csle ALL=(ALL) NOPASSWD: ALL
```
## [Host PC] hostname을 csle1으로 변경하기
docker 컨테이너가 호스트 pc의 네트워크를 동일하게 사용하는 host 모드로 동작하기 위해 docker 컨테이너와 호스트 pc의 호스트네임을 동일하게 합니다.
```sh
sudo vi /etc/hostname
csle1
```
PC를 재부팅하여 csle 계정으로 로그인합니다.
## [Host PC] openjdk-8 설치하기
Host PC에 Ubuntu 16.04를 처음 설치한 경우 java openjdk 8을 설치합니다. 아래의 내용을 터미널에 복사하여 설정 가능합니다.
```sh
sudo apt-get update && \
sudo apt-get -y install openjdk-8-jre && \
sudo apt-get -y install openjdk-8-jdk
```
터미널을 다시 시작한 후, 아래의 명령으로 java 설치 여부를 확인합니다.
```sh
csle@csle1:~$ java -version
java version "1.8.0_212"
Java(TM) SE Runtime Environment (build 1.8.0_212-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
```
## [Host PC] KSB 툴박스 관련 프로그램 설치하기
Host PC에 아래의 명령으로 KSB 툴박스 관련 프로그램을 설치합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
sudo apt-get update && \
sudo apt-get install -y --no-install-recommends apt-utils curl bc jq && \
sudo apt-get install -y ssh locales wget git vim rsync locales \
filezilla python3-pip && \
sudo apt-get install -y net-tools && \
pip3 install kafka-python
```
## [Host PC] SSH port 변경 및 root 로그인 가능하도록 SSHD config 수정하기
아래의 명령을 수행하여 포트 정보를 2243로 수정하고, root 로그인을 허용합니다.
```sh
sudo sed -ri 's/^Port 22/Port 2243/g' /etc/ssh/sshd_config
sudo sed -ri \
's/^PermitRootLogin prohibit-password/PermitRootLogin yes/g' \
/etc/ssh/sshd_config
```
만약 사용자가 openSSH를 사용한다면, 위의 스크립트이 적용되지 않습니다. 따라서, 직접 port 번호와 PermitRootLogin를 수정합니다.
## [Host PC] SSH config 수정하기 (known_hosts에 호스트 저장 질문을 하지 않도록 설정)
아래의 명령을 수행하여 ssh_config의 기존 내용을 모두 삭제하고 설정을 추가합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
sudo truncate -s0 /etc/ssh/ssh_config
echo "Host localhost" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "Host 0.0.0.0" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "Host 127.0.0.1" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "Host csle*" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "UserKnownHostsFile=/dev/null" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "Host master" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "UserKnownHostsFile=/dev/null" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
sudo service ssh restart
```
## [Host PC] Docker 설치하기
Host PC에 docker-ce 프로그램을 설치하기 위해 아래 명령어를 순차적으로 입력합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo apt-key add - && \
sudo add-apt-repository \
"deb [arch=amd64]
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" && \
sudo apt-get update && \
apt-cache policy docker-ce && \
sudo apt-get install -y docker-ce=18.06.1~ce~3-0~ubuntu && \
sudo systemctl status docker
```
#### [참고사항] 기존 docker-engine 삭제
```sh
sudo apt-get purge -y docker docker-engine docker.io
```
Docker 명령시 root 권한이 필요합니다. root가 아닌 사용자가 sudo 없이 사용하려면 해당 사용자를 docker 그룹에 추가합니다.
```sh
sudo usermod -aG docker csle
# 사용자가 로그인 중이라면 다시 로그인 후 권한이 적용됩니다.
# 단, 현재 터미널에서만 적용됩니다.
sudo su csle
PC 재부팅
```
PC 재부팅을 통해서 sudo 명령없이 docker 명령을 사용할 수 있습니다.
## [Host PC] /etc/hosts 수정하기
KSB 툴박스의 docker 컨테이너 주소에 쉽게 접근하기 위해 아래와 같이 /etc/hosts 내용을 수정합니다. (host pc의 IP는 192.168.0.5로 가정합니다. 자신의 PC IP에 맞게 설정합니다.)
```sh
127.0.0.1 localhost
# 아래 주석처리. Hdfs 연동시 문제가 생김.
#127.0.1.1 csle1
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
# 아래의 내용 추가
192.168.0.5 csle1 master
```
## [Host PC] bashrc 설정 추가하기
csle 계정의 bashrc 파일을 업데이트 합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
cat <<EOT >> ~/.bashrc
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=\$PATH:\$JAVA_HOME/bin
export KSB_HOME=/home/csle/ksb-csle
export PYTHONPATH=/home/csle/ksb-csle/pyML/:\$PYTHONPATH
export PYTHONPATH=./:/home/csle/ksb-csle/ksblib:\$PYTHONPATH
EOT
source ~/.bashrc
```
## [Host PC] 크롬 설치하기 (optional)
KSB 툴박스의 웹툴킷을 안정적으로 사용하기 위해서 크롬 브라우저를 설치합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
cd && \
wget \
https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo apt-get update && \
sudo apt-get install -y libxss1 libappindicator1 libindicator7 && \
sudo dpkg -i google-chrome-stable_current_amd64.deb
```
## [Host PC] KSB 툴박스 설치 및 docker image 다운받기
<a href="http://csleoss.etri.re.kr:8088/kor/sub02_01.do" title="다운로드"> 다운로드</a> 페이지로부터 KSB 툴박스(docker image 별도) 파일을 다운로드합니다.
- ksb_toolbox_v1.tar.gz : KSB 툴박스 파일
<br>
csle 사용자 계정의 home에 ksb_toolbox_v1.tar.gz 압축을 해제합니다. 결과적으로 /home/csle/ksb-csle 폴더가 생성됩니다.
```sh
tar zxvf ksb_toolbox_v1.tar.gz -C /home/csle/
```
/home/csle/ksb-csle 폴더는 다음의 하위 폴더들로 구성됩니다.
- /bin : KSB 프레임워크 shell 스크립트 파일 저장 폴더
- /components : tensorflow train 예제 프로그램 저장 폴더
- /conf : KSB 프레임워크 환경설정 파일 저장 폴더
- /docker : KSB 툴박스 docker 컨테이너 실행 스크립트 저장 폴더
- /examples : CLI(Command Line Interface)를 통해 워크플로우 생성 및 submit 할 수 있는 프로젝트 폴더
- /jars : KSB 프레임워크 1.0 버전의 jar 파일 저장 폴더
- /ksblib : python 전처리 라이브러리 폴더
- /kubernetes : 쿠버네티스 환경설정 폴더
- /logs : log 저장 폴더
- /pyML : autoML python 프로젝트 폴더
- /tools: 예제 테스트를 위한 프로그램(jmeter, hadoop, kafka, maven, .ssh, webToolkit_db)
<br>
Host PC에서 다음 명령으로 KSB 툴박스 docker image를 docker hub로부터 pull 합니다.
```sh
docker pull ksbframework/ksb_toolbox:1.0.1-miniconda3
```
Host PC에서 다음 명령으로 KSB 툴박스 docker image를 확인합니다.
(참고사항: 2019.05.24일 docker image 버전은 1.0.1 버전이며, 추후 TAG 정보 및 SIZE 정보는 배포 버전에 따라 다를 수 있습니다)
```sh
csle@csle1:~/ksb-csle$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ksbframework/ksb_toolbox 1.0.1-miniconda3 1b49af6336c7 7 hours ago 7.54GB
```
## [Host PC] KSB 툴박스 docker 이미지내 SSH 키를 host pc에 복사하기
KSB 툴박스 docker 컨테이너의 인증키를 공유하기 위해 ksb-csle/tools 폴더에 있는 .ssh 폴더를 csle 홈에 카피합니다.
```sh
cp -r ~/ksb-csle/tools/.ssh/ /home/csle/
```
authorized_keys를 다른 계정이 읽고 쓸 수 없게 600 mode(소유자만 rw 가능)로 변경합니다.
```
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
```
## [Host PC] SSH 재시작하기
```sh
sudo service ssh restart
```
## [Host PC] ksb-csle 폴더 권한 변경하기
KSB 툴박스 docker 컨테이너에서 Host PC의 ksb-csle 폴더를 엑세스 할 수 있도록 폴더 권한을 변경합니다.
```sh
sudo chmod 777 -R /home/csle/ksb-csle/
```
이상으로 KSB 툴박스를 구동하기 위해 필요한 프로그램 설치 및 설정 변경을 완료하였습니다.
<a href="https://csleoss.etri.re.kr/images/contents/manual_1.0/1.5.HowToRunFirst.html" title="KSB 인공지능 프레임워크 실행하기">KSB 인공지능 프레임워크 실행하기</a> 페이지로 이동하여 KSB 프레임워크를 구동하도록 하겠습니다.
---
html:
toc: true
offline: true
export_on_save:
html: true
---
# KSB 인공지능 프레임워크 설치
-----------
제공된 KSB 툴박스를 사용하지 않고, 직접 Host PC에 KSB 인공지능 프레임워크를 설치하기 위해서 아래의 오픈소스 프레임워크들을 설치합니다. 사용자 csle 계정을 생성한 후 아래 프로그램들을 설치합니다.
## csle 사용자 계정(권한 : administrator) 생성하기
<a href="https://csleoss.etri.re.kr/images/contents/manual_1.0/1.2.HowToInstallKsbToolBox.html#host-pc-csle-%EC%82%AC%EC%9A%A9%EC%9E%90-%EA%B3%84%EC%A0%95%EA%B6%8C%ED%95%9C-administrator-%EC%83%9D%EC%84%B1%ED%95%98%EA%B8%B0" title="KSB 툴박스 설치">KSB 툴박스 설치</a>의 csle 사용자 계정 생성 부분을 참고합니다.
## java-8-oracle 설치하기
<a href="https://csleoss.etri.re.kr/images/contents/manual_1.0/1.2.HowToInstallKsbToolBox.html#host-pc-java-8-oracle-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0" title="KSB 툴박스 설치">KSB 툴박스 설치</a>의 java-8-oracle 설치 부분을 참고합니다.
## Apache Hadoop 2.7.3 설치하기
아래 링크를 참고하여 사용자의 PC 혹은 클러스터 환경에 맞게 설치합니다.
참고링크 : https://hadoop.apache.org/docs/r2.7.3/
다운로드 링크 : https://archive.apache.org/dist/hadoop/common/hadoop-2.7.3/
## spark-2.3.0-bin-hadoop2.7 설치하기
아래 링크를 참고하여 사용자의 PC 혹은 클러스터 환경에 맞게 설치합니다.
참고링크 : https://spark.apache.org/downloads.html
다운로드 링크 : https://spark.apache.org/downloads.html
## hbase 1.2.4(optional) 설치하기
아래 링크를 참고하여 사용자의 PC 혹은 클러스터 환경에 맞게 설치합니다.
참고링크 : https://hbase.apache.org/book.html
다운로드 링크 : https://archive.apache.org/dist/hbase/1.2.4/
## kafka 2.11-0.10.0.1(optional) 설치하기
아래 링크를 참고하여 사용자의 PC 혹은 클러스터 환경에 맞게 설치합니다.
참고링크 : https://kafka.apache.org/
다운로드 링크 : https://kafka.apache.org/downloads
## zookeeper 3.4.9(optional) 설치하기
아래 링크를 참고하여 사용자의 PC 혹은 클러스터 환경에 맞게 설치합니다.
참고링크 : https://zookeeper.apache.org/
다운로드 링크 : https://archive.apache.org/dist/zookeeper/zookeeper-3.4.9/
## KSB 프레임워크 설치하기
<a href="http://csleoss.etri.re.kr:8088/kor/sub02_01.do" title="다운로드"> 다운로드</a> 페이지로부터 KSB 툴박스 파일을 다운로드합니다.
- ksb_toolbox_v1.tar.gz : KSB 툴박스 파일
<br>
csle 사용자 계정의 home에 ksb_toolbox_v1.tar.gz 압축을 해제합니다. 결과적으로 /home/csle/ksb-csle 폴더가 생성됩니다.
```sh
csle@csle1:~$ tar zxvf ksb_toolbox_v1.tar.gz -C /home/csle/
```
/home/csle/ksb-csle 폴더는 다음의 하위 폴더들로 구성됩니다.
- /bin : KSB 프레임워크 shell 스크립트 파일 저장 폴더
- /components : tensorflow train 예제 프로그램 저장 폴더
- /conf : KSB 프레임워크 환경설정 파일 저장 폴더
- /docker : KSB 툴박스 docker 컨테이너 실행 스크립트 저장 폴더
- /examples : CLI(Command Line Interface)를 통해 워크플로우 생성 및 submit 할 수 있는 프로젝트 폴더
- /jars : KSB 프레임워크 1.0 버전의 jar 파일 저장 폴더
- /ksblib : python 전처리 라이브러리 폴더
- /kubernetes : 쿠버네티스 환경설정 폴더
- /logs : log 저장 폴더
- /pyML : autoML python 프로젝트 폴더
- /tools: 예제 테스트를 위한 프로그램(jmeter, hadoop, kafka, maven, .ssh)
<br>
## ksb-csle conf 파일 설정하기
/home/csle/ksb-csle/conf/ksb.conf 파일을 사용자 PC에 맞게 수정합니다.
```sh
csle {
user {
home = "/home/csle" # 사용자 home 디렉토리를 지정합니다.
}
home = "/home/csle/ksb-csle" # KSB home 디렉토리를 지정합니다.
submit.cli = "true"
scheduler.initialization = "false"
}
servers {
gateway {
baseUrl = "http://KSB_GATEWAY:SERVICEPORT"
}
kubernetes {
enable = "false"
baseUrl = "http://SERVICENAME.ksb.local:30100"
imgRepositoryUrl = "docker.io"
kubernetes_yaml_path = "/kubernetes"
masterIp = "csle1" # Kubernetes 마스터 도메인 이름 혹은 IP를 지정합니다.
masterPort = "2243" # Kubernetes SSH 포트 번호를 지정합니다.
nodesIp = "csle2, csle3" # Kubernetes 노드들의 도메인 이름 혹은 IP들을 지정합니다.
user = "csle" # Kubernetes 서버의 사용자 ID를 지정합니다.
externalKafka {
brokerHostName = "csle1" # 외부 Kafka broker서버 도메인 이름을 지정합니다.
brokerHostIp = "192.168.0.xxx" # 외부 Kafka broker서버 IP을 지정합니다.
}
}
tensorflow {
enable = "true"
python_path = "/anaconda3/envs/tensorflow/bin/python" # 사용자 PC의 tensorflow python 위치를 지정합니다.
python_code_project_path = "/analysis"
}
pyspark {
python_path = "/anaconda3/bin/python" # 사용자 PC의 python 위치를 지정합니다.
python_code_project_path = "/pyML"
}
spark {
home = "/spark" # 사용자 PC의 spark home 위치를 지정합니다.
bin = "/spark/bin/spark-submit"
master = "local[*]" # spark master 모드를 지정합니다.
deploy = "client" # spark deploy 모드를 지정합니다.
logging = "true"
autoIncreaseModelPath = "true"
}
yarn {
home = "/hadoop/bin" # 사용자 PC의 yarn 위치를 지정합니다.
}
postgres {
db = "csledb"
uri = "jdbc:postgresql://localhost:5432/csledb"
user = "csle"
password = "csle1234"
}
hadoop {
home = "/hadoop/" # 사용자 PC의 hadoop 위치를 지정합니다.
master = "csle1" # 사용자 PC의 hadoop master 이름을 지정합니다.
port = "9000" # 사용자 PC의 hadoop master port를 지정합니다.
hdfs {
activated = "true"
baseDir = "/user/"
modelPath = "/model"
datasetPath = "/dataset"
}
webhdfs {
port = "50070"
baseDir = "/webhdfs/v1"
}
}
hbase.zookeeper.quorum = "localhost"
kbe {
serverIp = "localhost"
serverPort = "9876"
serverType = "jena"
}
}
```
## bashrc 설정 추가하기
csle 계정의 bashrc 파일을 업데이트 합니다.
```sh
cat <<EOT >> ~/.bashrc
export JAVA_HOME=/usr/lib/jvm/java-8-oracle
export PATH=$PATH:$JAVA_HOME/bin
export KSB_HOME=/home/csle/ksb-csle
export PYTHONPATH=/home/csle/ksb-csle/pyML/:$PYTHONPATH
export PYTHONPATH=./:/home/csle/ksb-csle/ksblib:$PYTHONPATH
EOT
source ~/.bashrc
```
## KSB 웹툴킷을 사용하기 위한 사용자 계정 추가하기
KSB 웹툴킷에 저장된 다양한 예제를 사용하기 위해서는 웹툴킷 사용자(id: ksbuser@etri.re.kr)에 대한 Ubuntu 및 Hadoop hdfs 계정 추가가 필요합니다.
### Ubuntu 사용자 계정 추가하기
```sh
csle$myHostName: sudo adduser ksbuser_etri_re_kr
[sudo] password for csle:
'ksbuser_etri_re_kr' 사용자를 추가 중...
새 그룹 'ksbuser_etri_re_kr' (1011) 추가 ...
새 사용자 'ksbuser_etri_re_kr' (1011)() 그룹 'ksbuser_etri_re_kr' ()로 추가 ...
'/home/ksbuser_etri_re_kr' 홈 디렉터리를 생성하는 중...
'/etc/skel'에서 파일들을 복사하는 중...
새 UNIX 암호 입력: # ksbuser_etri_re_kr를 입력하세요
새 UNIX 암호 재입력: # ksbuser_etri_re_kr를 입력하세요
passwd: 암호를 성공적으로 업데이트했습니다
새로운 값을 넣거나, 기본값을 원하시면 엔터를 치세요
이름 []:
방 번호 []:
직장 전화번호 []:
집 전화번호 []:
기타 []:
정보가 올바릅니까? [Y/n] Y
```
### sudo 권한 부여하기
```sh
csle$myHostName: sudo usermod -aG sudo ksbuser_etri_re_kr
```
### 계정 추가 확인하기
```sh
csle$myHostName: su - ksbuser_etri_re_kr
ksbuser_etri_re_kr$myHostName: sudo ll
합계 32
drwxr-xr-x 2 ksbuser_etri_re_kr ksbuser_etri_re_kr 4096 6월 30 08:37 ./
drwxr-xr-x 14 root root 4096 6월 30 08:36 ../
-rw-r--r-- 1 ksbuser_etri_re_kr ksbuser_etri_re_kr 220 6월 30 08:36 .bash_logout
-rw-r--r-- 1 ksbuser_etri_re_kr ksbuser_etri_re_kr 3771 6월 30 08:36 .bashrc
-rw-r--r-- 1 ksbuser_etri_re_kr ksbuser_etri_re_kr 655 6월 30 08:36 .profile
-rw-r--r-- 1 ksbuser_etri_re_kr ksbuser_etri_re_kr 0 6월 30 08:37 .sudo_as_admin_successful
-rw-r--r-- 1 ksbuser_etri_re_kr ksbuser_etri_re_kr 8980 6월 30 08:36 examples.desktop
```
### Hadoop Hdfs 사용자 계정 추가하기
사용자 환경에 맞게 설치되어 있는 Hadoop Hdfs를 가동한 후, 아래 명령을 이용하여 hdfs에 ksbuser_etri_re_kr 사용자 폴더를 추가합니다.
```sh
csle$myHostName: su - csle
csle$myHostName: hdfs dfs -mkdir -p /user/ksbuser_etri_re_kr/dataset
csle$myHostName: hdfs dfs -mkdir -p /user/ksbuser_etri_re_kr/model
csle$myHostName: hdfs dfs -chown ksbuser_etri_re_kr:supergroup /user/ksbuser_etri_re_kr/
csle$myHostName: hdfs dfs -chown ksbuser_etri_re_kr:supergroup /user/ksbuser_etri_re_kr/dataset
csle$myHostName: hdfs dfs -chown ksbuser_etri_re_kr:supergroup /user/ksbuser_etri_re_kr/model
```
## KSB 웹툴킷 설치하기
<a href="http://csleoss.etri.re.kr:8088/images/contents/manual_1.0/1.4.HowToInstallKsbWebToolkit.html" title="KSB 웹툴킷 설치하기"> KSB 웹툴킷 설치하기</a> 페이지를 통해 KSB 웹툴킷을 설치합니다.
## KSB 지식베이스 엔진 설치하기
KSB 지식베이스엔진(KSB-Knowledge Engine)을 사용하기 위한 절차 및 예제를 소개합니다.
### Play framework Activator 설치하기
KSB 지식베이스 엔진은 Play framework 기반 엔진이며, 이를 실행하기 위해서는 [Play framework Activator][8580869d]를 사전에 설치해야 합니다.
[8580869d]:
https://downloads.typesafe.com/typesafe-activator/1.3.12/typesafe-activator-1.3.12.zip "Play framework Activator"
```sh
# Play framework Activator 다운로드
wget https://downloads.typesafe.com/typesafe-activator/1.3.12/typesafe-activator-1.3.12.zip
# 압축해제
unzip typesafe-activator-1.3.12.zip
# Activator bin 경로를 환경변수에 등록
export PATH="/home/csle/activator-dist-1.3.12/bin:$PATH"
```
### KSB 지식베이스 엔진 시작 및 종료 하기
KSB 지식베이스 엔진을 시작하려면, 해당폴더 (/home/csle/ksb-csle/bin)로 이동하여, startknowledge_service.sh 스크립트를 ip address와 port 번호와 함께 실행합니다.
```sh
# KSB 지식베이스 실행 스크립트가 있는 경로로 이동
cd /home/csle/ksb-csle/bin
# KSB 지식베이스 엔진 시작 (./startknowledge_service.sh ip_address port_number)
./startknowledge_service.sh 127.0.0.1 9876
```
KSB 지식베이스 엔진을 종료하려면, 해당폴더 (/home/csle/ksb-csle/bin)로 이동하여, stopKnowledge_service.sh 스크립트를 실행합니다.
```sh
# KSB 지식베이스 엔진 종료
./stopKnowledge_service.sh
```
### 온톨로지 파일 Upload 하기
KSB 지식베이스 엔진이 Start 되어 있는 상황에서, 사용자가 로컬 파일에 작성된 온톨로지 파일(.owl, .rdf, .rdfs)을 KSB 지식베이스 엔진에 Upload 하는 기능을 설명합니다. 본 예제에서는 KSB 지식베이스 엔진 내부 폴더에 제공하는 공통 온톨로지 파일을 이용합니다.
```sh
# 예제 수행 온톨로지 확인을 위해 해당 경로로 이동
cd /home/csle/ksb-knowledge/KBE/ontologies
```
![KSB 공통 온톨로지](./images/1.3_HowToInstallKsbFrameWork_02.png "KSB 공통 온톨로지")
```sh
# Curl 명령어 restful request 수행 (url: /loadOntologies, parameter: 온톨로지 경로)
curl -X POST http://127.0.0.1:9876/loadOntologies -H 'Cache-Control: no-cache' -H 'Content-Type: text/plain' -d ./ontologies
```
![KSB 지식베이스 엔진 온톨로지 upload 화면](./images/1.3_HowToInstallKsbFrameWork_03.png "KSB 지식베이스 엔진 온톨로지 upload 화면")
KSB 지식베이스 엔진에 Upload된 온톨로지는 KSB 지식베이스 엔진이 제공하는 쿼리 Restful API(``http://127.0.0.1:9876/query``)를 통해 확인할 수 있습니다. 이를 위해 Restful Client(본 예제에서는 Postman)를 실행하고, URL과 질의 쿼리 내용을 아래와 같이 입력하여 실행합니다.
```sh
# 본 쿼리는 SPAQRL 1.1의 형태의 질의이며, 이는 온톨로지 thing:Thing 클래스의 서브 클래스를 검색하기 위한 쿼리입니다.
PPREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX workflow: <http://csle.etri.re.kr/Workflow/>
PREFIX thing: <http://csle.etri.re.kr/Thing/>
select * where {
?s rdfs:subClassOf thing:Thing.
FILTER (!isBlank(?s))
}
```
![온톨로지 Upload 결과 확인 화면](./images/1.3_HowToInstallKsbFrameWork_04.png "온톨로지 Upload 결과 학인 화면")
## IoE 사물 등록
KSB 지식베이스 엔진은 IoE 정보를 지식화하여 정보의 연계, 추론을 통한 지식정보를 사용자에게 제공하는 기능이 있습니다. IoE 표준(oneM2M)의 사물 스펙을 지식화하는 기능을 제공합니다.
본 예제에서는 Json 포맷의 사물 스펙을 사용합니다.
```sh
# Json 포맷의 사물 스펙(예제로 사용한 IoE 사물의 id는 a1234이며, indoor temperature and humidity 센서입니다.)
{
"version": "1.0",
"id": "a1234",
"registrationTime": "20170102112233",
"properties": {
"name": "indoor_env_1",
"owner": "foo@gmail.com",
"description": "indoor temperature and humidity",
"gid": "global_unique_id_1",
"model": "modelA",
"coordinates": {
"latitude": 33.3,
"longitude": 122.2,
"altitude": 0
},
"location": "seoul korea",
"users": ["bar@gmail.com"],
"tag": ["my room", "temperature", "humidity"],
"madeBy": "companyA",
"hostedBy": "companyB"
},
"resources": [
{
"name": "sensors",
"description": "temperature and humidity in my room",
"attributes": [
{
"name": "temperature",
"dataType": "double",
"unit": "celsius",
"min": "-80",
"max": "80",
"description": "temperature in my room"
},
{
"name": "humidity",
"dataType": "double",
"unit": "percent",
"min": "0",
"max": "100",
"description": "humidity in my room"
}
],
"operations": [
{
"opType": "get",
"args": ["temperature", "humidity"],
"description": "get current temperature and humidity"
}
]
}
]
}
```
KSB 지식베이스 엔진이 제공하는 사물등록 Restful API (``http://127.0.0.1:9876/registThing``)를 통해 KSB 지식베이스 엔진에 사물 스펙정보를 등록 할 수 있습니다.
![사물등록 화면](./images/1.3_HowToInstallKsbFrameWork_05.png "사물등록 화면")
다음과 같은 쿼리 Restful API을 수행하여 결과를 확인합니다.
```sh
# 본 쿼리는 SPAQRL 1.1의 형태의 질의이며, 이는 온톨로지 thing:Thing 클래스의 인스턴스를 검색하기 위한 쿼리입니다.
PPREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX workflow: <http://csle.etri.re.kr/Workflow/>
PREFIX thing: <http://csle.etri.re.kr/Thing/>
select * where {
?s rdf:type thing:Thing.
}
```
![사물등록확인화면](./images/1.3_HowToInstallKsbFrameWork_06.png "사물등록확인화면")
## IoE 사물 센서데이터를 통해 지식추론하기
KSB 지식베이스 엔진은 IoE 디바이스의 센서데이터를 이용하여, 상황을 추론할 수 있는 기능을 제공합니다.
본 예제의 시나리오는 앞에서 등록된 온도센서(thing id : a1234)로부터 온도가 28도 이상이면 더운 상황(HotContext)을 추론하고,
추론된 정보를 통해 Hue(thing id : S_HUE_light_3)를 파란색으로 켜는 동작을 하는 간단한 시나리오 입니다.
이를 위해 Hue의 제어 명령을 등록합니다. (Restful API: ``http://127.0.0.1:9876/addDeviceControl``)
```sh
# Json 포맷의 사물제어 스펙(id S_HUE_light_3의 Hue)
[
{"id":"hue_turnon_Blue",
"thingId":"S_HUE_light_3",
"resourceId":"controller",
"operationId":"setState",
"controlContents":[
{"name":"on","value":"true"},
{"name":"bri","value":"254"},
{"name":"hue","value":"46920"},
{"name":"sat","value":"254"}
]
},
{"id":"hue_turnon_Red",
"thingId":"S_HUE_light_3",
"resourceId":"controller",
"operationId":"setState",
"controlContents":[
{"name":"on","value":"true"},
{"name":"bri","value":"254"},
{"name":"hue","value":"65535"},
{"name":"sat","value":"254"}
]
},
{"id":"hue_turnon_Green",
"thingId":"S_HUE_light_3",
"resourceId":"controller",
"operationId":"setState",
"controlContents":[
{"name":"on","value":"true"},
{"name":"bri","value":"254"},
{"name":"hue","value":"25500"},
{"name":"sat","value":"254"}
]
}
]
```
추론 규칙을 적용하기 위해, KSB-Knowledge/KBE/rules 폴더의 "KBE.rues" 파일을 열고 아래와 같이 추론 규칙을 추가합니다.
```sh
# 온도센서의 센싱값이 28이상이면 이벤트 Temp_HOT을 생성합니다.
[domain_temperature_hot:
(?e event:hasEventValue ?v),
(?v thing:hasType ?t),
(?t thing:attributeName ?name),
equal(?name, "temperature"),
(?v thing:hasValue ?value),
ge(?value, 28)
->
(?e event:hasEventStatus domain:Temp_HOT)
]
# 이벤트 Temp_HOT이면 더운 상황(HotContext)을 생성합니다.
[HotContext_context:
(?e event:hasEventStatus domain:Temp_HOT)
-> (?e rdf:type domain:HotContext)
]
# 더운 상황(HotContext)이면 Hue를 파란색으로 켭니다.
[HotContext_service:
(?e rdf:type domain:HotContext)
->
(?e service:derives domain:hue_turnon_Blue)
]
```
본 예제를 실행하기 위해 온도센서(thing id: a1234)의 값을 32.6으로 설정하고, Restful API(``http://127.0.0.1:9876/recommendDeviceControl``)를 실행합니다.
```sh
# 온도센서(thingId : a1234)의 센싱값이 32.6으로 설정합니다.
{
"thingId": "a1234",
"resourceId": "sensors",
"time": "20170330103347",
"values": [
{
"name": "temperature",
"value": "32.6"
}
]
}
```
Restful API를 실행한 결과는 다음과 같습니다.
```sh
# 상황(context)가 "HotContext"이고, 상황에 따른 서비스(service)가 "hue_turnon_Blue"이며 그것에 해당하는 사물 제어정보를 리턴합니다.
[
{
"thingId": "S_HUE_light_3",
"resourceId": "controller",
"context": [
"HotContext"
],
"service": "hue_turnon_Blue",
"controls": {
"sat": "254",
"hue": "46920",
"bri": "254",
"on": "true"
}
}
]
```
![사물추론 확인화면](./images/1.3_HowToInstallKsbFrameWork_07.png "사물추론 확인화면")
This diff is collapsed.
---
html:
toc: true
offline: true
export_on_save:
html: true
---
# KSB 웹툴킷 설치
---
UI 기반으로 KSB 인공지능 프레임워크를 사용할 수 있는 KSB 웹툴킷 설치 과정을 설명합니다.
## 설치 요구사항
- Docker 기반 KSB 툴박스 환경에서는, KSB 웹툴킷 실행을 위한 기능들이 사전에 설치 되어 있거나 설치 과정에 포함 되어 있으므로, 본 과정이 필요하지 않습니다.
- Ubuntu 16.04가 설치된 메모리 16GB 이상 데스트탑이나 노트북이 요구됩니다.
- KSB 웹툴킷은 KSB 인공지능 프레임워크를 기반으로 구동됩니다. 따라서 startKsbApiServing 을 실행하여 KSB 인공지능 프레임워크를 구동하고 있어야 합니다.
- KSB 웹툴킷은 저장소로 HDFS를 사용합니다. 따라서, 저장소로 사용할 PC에 Hadoop 및 관련 소프트웨어가 설치 되어 있어야 합니다. Hadoop을 설치한 후에는 ksb-csle/conf/ksb.conf 파일에서 hadoop.master 정보를 설치한 호스트명으로 설정해 주어야 합니다. 또한 hadoop.hdfs.activated 도 true로 설정해야 정상적으로 HDFS 를 저장소로 이용할 수 있습니다.(기본적으로 true로 설정 되어 있습니다.)
- DB에서 한글을 정상적으로 사용하기 위해, 호스트 운영체제의 언어를 한글로 설정 합니다. 변경 하는 방법은 다음 링크를 참고 합니다.
[Ubuntu 언어 변경](https://askubuntu.com/questions/509174/how-can-i-change-the-language-from-english-to-spanish)
- Postgresql 9.6.8 이상이 설치되어야 합니다.
- Pgadmin3 1.22.2 이상이 설치되어야 합니다.
- JDK 8 이 설치되어야 합니다. 설치 방법은 다음 링크를 참고 합니다. [JDK 8 설치](https://csleoss.etri.re.kr/images/contents/manual_1.0/1.2.HowToInstallKsbToolBox.html#host-pc-java-8-oracle-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0)
- Apache Tomcat 7.x가 설치되어야 합니다.
## KSB 인공지능 프레임워크 DB 설치하기
KSB 인공지능 프레임워크는 프레임워크 사용자 정보, 생성 및 구동된 워크플로우 정보, KSB 웹툴킷에서 이용하는 UI Component 관련 정보를 관리하기 위해 Postgresql DB를 사용 합니다.
Postgresql 설치 버전은 9.6.8 이상를 권장하며, 다음과 같이 설치한 후 재시작합니다.
```sh
$ sudo apt-get update
$ sudo apt-get install -y software-properties-common
$ sudo add-apt-repository "deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main"
$ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get install -y postgresql-9.6
$ sudo service postgresql restart
```
또한 Postgresql DB 접근 및 이용을 편리하게 하기 위해 Pgadmin을 설치하여 사용합니다. pgadmin3는 1.22.2 이상을 설치합니다. (Postgresql 9.6.8 이상을 설치해야 잘 동작합니다.) 툴박스 내에서 제공하는 DB restore 파일 등도 위 두 버전을 통해 백업 되었습니다.
```sh
$ sudo apt-get update
$ sudo apt-get install -y pgadmin3
```
## 외부에서 DB 접근 가능하도록 수정하기
설치된 Postgresql은 기본적으로는 localhost에서만 사용 가능합니다. 외부에서도 접근 가능하도록 하기 위해서는 다음 두 파일을 수정해야 합니다.
```sh
** postgresql remote access
$ sudo vi /etc/postgresql/9.6/main/pg_hba.conf/pg_hba.conf
host all all 0.0.0.0/0 md5
$ sudo vi /etc/postgresql/9.6/main/postgresql.conf
listen_addresses = '*'
$ sudo service postgresql restart
```
## KSB 인공지능 프레임워크 DB 정의
Postgresql 설치가 완료되면, DB에 접속하여 DB 사용자 계정과 권한을 생성하고, SDK 압축파일에 포함된 백업파일(csledb_v1.0.backup)을 이용하여 KSB 인공지능 프레임워크 DB 정보를 restore 합니다.
```sh
# create user csle
$ sudo -u postgres bash -c "psql -c \"CREATE USER csle password '사용자암호' superuser;\""
# alter csle as a superuser
$ sudo -u postgres bash -c "psql -c \"ALTER USER csle WITH CREATEROLE REPLICATION CREATEDB SUPERUSER;\""
# create database csledb
$ sudo -u postgres bash -c "psql -c \"CREATE DATABASE csledb WITH OWNER = csle ENCODING = 'UTF-8' CONNECTION LIMIT = -1;\""
$ PGPASSWORD=사용자암호 pg_restore -h localhost -U csle -C -d csledb /home/csle/ksb-csle/tools/webToolkit_db/csledb_v1.0.backup
```
postgresql 에 접속하여 정상적으로 복구 되었는지 확인 합니다.
```sh
$ sudo -su postgres
$ psql
postgres=# \c csledb;
csledb=# select * from "UIEngineComponent" where "MsgVersion" = '1.0'
EngineID | EngineName | EngineType | MsgComponentID | MsgVersion
--------------------------------------+-------------------------------+-----------------------------+--------------------------------------+------------
49dd0271-e7a9-b43e-f1c0-698d42372e2f | BatchEngine | BATCHENGINE | 2b2fa4ec-7cd3-3cc1-1e7c-b11ab3d3ac1b | 1.0
6536ab61-9f9f-1119-6cbf-a3c25e8cb350 | StreamToStreamEngine | STREAMTOSTREAMENGINE | 3819b564-a79e-394d-7bbe-ddc2380f5f68 | 1.0
6f3d98a1-2b69-c711-f8f1-e5336eee2957 | StreamToBatchEngine | STREAMTOBATCHENGINE | 0abe3dab-c535-edcb-141b-a0d9e7746a6d | 1.0
c1ea8c60-afd7-1c75-4686-af114173775e | OnDemandStreamEngine | ONDEMANDSTREAMENGINE | 1bfc7496-d2d3-2140-c137-af09b423a2fe | 1.0
1bfe0c14-7257-b56b-683c-7eb2c7f38fa4 | OnDemandServingEngine | ONDEMANDSERVINGENGINE | cfb9b524-7457-b910-0261-587c5bfe74de | 1.0
aa301492-6d85-2aae-cbf7-ee640d5a2c1d | ExternalEngine | EXTERNALENGINE | e960e289-54df-1790-6e4a-05a75b326cec | 1.0
69686c51-3a70-29bf-608c-7721ac37d98d | GenericEngine | GENERICENGINE | 1dfb7769-8a34-304e-d9d5-00b2cffbbca7 | 1.0
a52ccda4-c59a-01a2-af7d-025cb03fff10 | BatchToBatchStreamEngine | BATCHTOBATCHSTREAMENGINE | cd0758ae-b150-850a-9d73-b29152e820ce | 1.0
5da27056-c880-7917-5e6f-d7db44083e92 | OnDemandStreamServingEngine | ONDEMANDSTREAMSERVINGENGINE | 03ecfbd2-1a3d-2e6c-2448-06f3f2dcfe89 | 1.0
7b4e13dd-bb5d-289e-6022-9c651f2ca1c1 | StreamPipeEngine | STREAMTOSTREAMENGINE | 58b47983-3a49-386a-6403-b6a0ec5c4c67 | 1.0
790be3d3-4f2c-0318-021c-999b8ab59db3 | StreamJoinEngine | INOUTTWIGS2SENGINE | 50f1fd26-49e0-5d70-3ff0-0d14f0c6d19a | 1.0
2043f861-2298-4cd8-7633-97fc06f6f1ab | OnDemandPipeServingEngine | ONDEMANDCOMPOSITEENGINE | 4aff5c80-8b63-527a-7fe9-0e12e8c21735 | 1.0
8f8a4039-46c1-acc5-c425-4e2688b2eb84 | BatchDummyEngine | BATCHDUMMYENGINE | d625a81a-ad0f-0822-3752-c040c1d4ebf6 | 1.0
05761a24-af7e-eda6-428d-fba552ef1cf7 | OnDemandExternalServingEngine | EXTERNALENGINE | fe67950b-aadb-0094-186d-797ad573c84c | 1.0
(14개 행)
```
## KSB 웹툴킷 DB 정의
SDK 압축파일에 포함된 백업파일(uidb_v1.0.backup)을 이용하여 KSB 웹툴 DB 정보를 restore 합니다.
```sh
$ sudo -u postgres bash -c "psql -c \"CREATE DATABASE uidb WITH OWNER = csle ENCODING = 'UTF-8' CONNECTION LIMIT = -1;\""
$ PGPASSWORD=사용자암호 pg_restore -h localhost -U csle -C -d uidb /home/csle/ksb-csle/webToolkit_db/uidb_v1.0.backup
```
postgresql 에 접속하여 정상적으로 복구 되었는지 확인 합니다.
```sh
$ sudo -su postgres
$ psql
postgres=# \c uidb;
uidb=# SELECT count(*) FROM template where msg_version = '1.0';
count
-------
23
(1개 행)
```
## Apache Tomcat 다운로드
KSB 웹툴킷은 웹컨테이너로 Apache tomcat 7을 이용합니다. https://tomcat.apache.org/download-70.cgi 사이트에서 binary distribution을 다운로드 받아, 적당한 위치에 압축을 해제 합니다.
본 매뉴얼 에서는 '/home/csle/ui_of_csle/apache-tomcat-7.0.88/' 에
압축을 해제 한 것으로 가정합니다.
## Tomcat 설정 업데이트
### web.xml 파일 업데이트
/home/csle/ui_of_csle/apache-tomcat-7.0.88/conf/ 디렉토리에 있는 web.xml 파일을 열어 UTF-8 설정 및 Session timeout을 조정합니다.
```xml
<filter>
<filter-name>setCharacterEncodingFilter</filter-name>
<filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<async-supported>true</async-supported>
</filter>
.....
<filter-mapping>
<filter-name>setCharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
.....
<session-config>
<session-timeout>360</session-timeout> <!-- minutes -->
</session-config>
```
### server.xml 파일 업데이트
다음으로, server.xml 파일을 열어 UTF-8 설정을 조정 합니다.
```xml
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="2000000"
redirectPort="8443" disableUploadTimeout="true" URIEncoding="UTF-8"/>
.....
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/>
```
## 웹파일 설치 및 KSB 인공지능 프레임워크 DB 접속정보 설정
압축된 SDK에서 /home/csle/ksb-csle/tools/webToolkit_db/csle-web_20181025.war 파일을 /home/csle/ui_of_csle/apache-tomcat-7.0.88/webapps 디렉토리로 복사 합니다.
그리고, csle-web_20181025.war 파일의 이름을 ROOT.war로 변경 합니다.
### Tomcat 서버 구동
/home/csle/ui_of_csle/apache-tomcat-7.0.88/bin 디렉토리에 있는
``catalina.sh`` 파일을 통해 Tomcat을 구동하면 웹파일이 압축해제 되어
/home/csle/ui_of_csle/apache-tomcat-7.0.88/webapps/ROOT 폴더가 생성되고, 서버가 구동 됩니다.
```sh
$ cd /home/csle/ui_of_csle/apache-tomcat-7.0.88/bin
$ ./catalina.sh start -Dfile.encoding=UTF-8
(2018-06-30 12:22:37) <localhost-startStop-1> [DEBUG] SQL: SELECT * FROM system_configuration WHERE name = ?, name: [csle.gw.host] (SystemConfigurationDao.java:130)
(2018-06-30 12:22:37) <localhost-startStop-1> [DEBUG] SQL: SELECT * FROM system_configuration WHERE name = ?, name: [csle.gw.port] (SystemConfigurationDao.java:130)
6월 30, 2018 12:22:38 오후 org.apache.catalina.startup.HostConfig deployWAR
정보: Deployment of web application archive /home/kbe/ui_of_csle/apache-tomcat-7.0.81/webapps/ROOT.war has finished in 5,246 ms
6월 30, 2018 12:22:38 오후 org.apache.coyote.AbstractProtocol start
정보: Starting ProtocolHandler ["http-bio-8080"]
6월 30, 2018 12:22:38 오후 org.apache.coyote.AbstractProtocol start
정보: Starting ProtocolHandler ["ajp-bio-8009"]
6월 30, 2018 12:22:38 오후 org.apache.catalina.startup.Catalina start
정보: Server startup in 5339 ms
```
### Tomcat 로그 보기
Tomcat 이 잘 구동되고 있는지 확인하기 위해 Tomcat 로그 파일을 엽니다.
```sh
$ tail -f ../logs/catalina.out
```
## 구글 Chrome 브라우저 설치하기
KSB 웹툴킷은 기본적으로 HTML5 호환 브라우저에서 동작하도록 개발 되었으나, 일부 기능은 Chrome 브라우저에서만 이용 가능합니다. 따라서, Chrome 브라우저를 이용하기를 권장 합니다. 다음 절차를 통해 Chrome 브라우저 최신 버전을 설치 합니다.
```sh
# 운영체제와 CPU 아키텍처에 따라 별도의 링크를 통해 다운 받아야 할 수도 있습니다.
$ wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
$ sudo apt-get install -y libxss1 libgconf2-4 libappindicator1 libindicator7
$ sudo dpkg -i google-chrome-stable_current_amd64.deb
```
## KSB 인공지능 프레임워크 구동
KSB 인공지능 프레임워크 툴박스를 설치하거나 소스를 빌드한 후,
ksb-csle/bin 디렉토리에 있는 startKsbApiServing.sh 파일을 실행 합니다.
파일 실행 전에 ls와 같이 간단한 명령을 sudo를 통해 한 번 실행 합니다.
```sh
$ sudo ls
$ ./startKsbApiServing.sh
```
구동이 성공적으로 이루어지면, 다음과 같은 로그가 생성되며,
[akka://KsbApi-serving/user/IO-HTTP/listener-0] Bound to /0.0.0.0:19999
위 메시지를 통해 현재 호스트 PC의 19999 포트를 통해 구동 되는 것을 확인할 수 있습니다.
```sh
2018-10-22 16:51:12.113 [INFO] [ConfigUtils$] KSB config file path :/home/csle/ksb-csle/conf/ksb.conf (ConfigUtils.scala:29)
2018-10-22 16:51:13.355 [INFO] [KsbApiServing$] [Local mode] Update status of incompletely terminated [0] job(s) in previous operation (KsbApiServing.scala:60)
2018-10-22 16:51:13.644 [INFO] [ApiServingActor] KSB ApiServingActor has been started. (ApiServingActor.scala:820)
2018-10-22 16:51:13.644 [INFO] [ApiServingActor] KSB ApiServingActor has been started. (ApiServingActor.scala:820)
2018-10-22 16:51:13.644 [INFO] [ApiServingActor] KSB ApiServingActor has been started. (ApiServingActor.scala:820)
2018-10-22 16:51:13.644 [INFO] [ApiServingActor] KSB ApiServingActor has been started. (ApiServingActor.scala:820)
2018-10-22 16:51:13.644 [INFO] [ApiServingActor] KSB ApiServingActor has been started. (ApiServingActor.scala:820)
2018-10-22 16:51:13,905 INFO StdSchedulerFactory: Using default implementation for ThreadExecutor
2018-10-22 16:51:13,910 INFO SimpleThreadPool: Job execution threads will use class loader of thread: main
2018-10-22 16:51:13,923 INFO SchedulerSignalerImpl: Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
2018-10-22 16:51:13,923 INFO QuartzScheduler: Quartz Scheduler v.2.3.0 created.
2018-10-22 16:51:13,924 INFO RAMJobStore: RAMJobStore initialized.
2018-10-22 16:51:13,925 INFO QuartzScheduler: Scheduler meta-data: Quartz Scheduler (v2.3.0) 'DefaultQuartzScheduler' with instanceId 'NON_CLUSTERED'
Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
NOT STARTED.
Currently in standby mode.
Number of jobs executed: 0
Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads.
Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.
2018-10-22 16:51:13,925 INFO StdSchedulerFactory: Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties'
2018-10-22 16:51:13,925 INFO StdSchedulerFactory: Quartz scheduler version: 2.3.0
2018-10-22 16:51:13,925 INFO QuartzScheduler: Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started.
[INFO] [10/22/2018 16:51:13.979] [KsbApi-serving-akka.actor.default-dispatcher-2] [akka://KsbApi-serving/user/IO-HTTP/listener-0] Bound to /0.0.0.0:19999
[INFO] [10/22/2018 16:51:13.981] [KsbApi-serving-akka.actor.default-dispatcher-3] [akka://KsbApi-serving/deadLetters] Message [akka.io.Tcp$Bound] from Actor[akka://KsbApi-serving/user/IO-HTTP/listener-0#1547261392] to Actor[akka://KsbApi-serving/deadLetters] was not delivered. [1] dead letters encountered. This logging can be turned off or adjusted with configuration settings 'akka.log-dead-letters' and 'akka.log-dead-letters-during-shutdown'.
2018-10-23 08:22:18,351 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
```
## KSB 웹툴킷 설정 업데이트
KSB 웹툴킷과 KSB 인공지능 프레임워크는 다음 사용자 정보가 저장되어 있습니다.
&nbsp;&nbsp;&nbsp;&nbsp;User ID: ksbuser@etri.re.kr / User Password: ksbuser@etri.re.kr
Chrome 브라우저(또는 HTML5 표준 호환 브라우저)를 열고 위 사용자 정보를 입력하여 로그인합니다.
```sh
http://localhost:8080
```
![login](./images/1.4_01.png)
정상적으로 로그인에 성공하면, Management 메뉴를 클릭해서 KSB 인공지능 프레임워크가 구동되고 있는 환경 정보를 csle.gw.host 와 csle.gw.port 정보에 반영 합니다.
본 매뉴얼에서는 localhost 와 19999 포트가 되겠습니다.
![management](./images/1.4_02.png)
설정이 완료되면, Tomcat 서버를 재구동 하고, KSB 웹툴킷을 이용 합니다.
```sh
$ ./catalina.sh stop
$ ./catalina.sh start
```
## KSB 웹툴킷 회원 가입 기능 활성화를 위한 설정
KSB 웹툴킷은 이메일을 통해 사용자 가입을 처리하도록 되어 있습니다. 이를 위해 관리자의 메일 계정을 설정 하도록 되어 있으며, Gmail 계정을 통해 설정할 수 있습니다. 관리자는 uidb 의 system_configuration 테이블에 자신의 Gmail 계정을 설정할 수 있으며, 사용자가 회원 가입을 신청하면 관련 메일이 관리자의 Gmail 계정을 통해 발송 됩니다.
설정 방법은, KSB 웹툴킷에 관리자 계정(ksbuser@etri.re.kr)으로 로그인 하여 Management 메뉴의 System Configuration 탭에서 'javax.mail.session.prop.id' property에서 수정아이콘을 클릭하여 Gmail 계정(aaa@gmail.com 이면 aaa)을 'javax.mail.session.prop.password' 에 Gmail 암호를 입력하고 저장 아이콘을 클릭하여 수정한 사항을 저장 합니다.
이메일의 발송 시, 사용자에게 메일로 안내 되는 링크의 ip는 KSB 웹툴킷이 구동 중인 서버의 설정을 따릅니다. 만약 localhost로 구동 하였다면, KSB 웹툴킷이 구동 중인 서버에서만 가입 절차를 진행할 수 있으므로, 외부에서 접속 가능한 ip로 실행 하시기 바랍니다.
---
html:
toc: true
offline: true
export_on_save:
html: true
---
# KSB 인공지능 프레임워크 실행하기
---
KSB 인공지능 프레임워크를 실행하는 방법에 대해서 설명합니다.
아래와 같은 절차로 KSB 프레임워크를 구동합니다.
. [Host PC] KSB 툴박스 docker 컨테이너 실행하기
. [Docker 컨테이너] KSB 툴박스 docker 컨테이너 초기화
. [Docker 컨테이너] KSB 인공지능 프레임워크 API serving 구동
## [Host PC] KSB 툴박스 docker 컨테이너 실행하기
<a href="http://csleoss.etri.re.kr:8088/kor/sub02_01.do" title="다운로드"> 다운로드</a> 페이지에서 KSB 툴박스 (ksb_toolbox_v1_0.tar.gz 파일)를 다운받아 압축을 해제하여 생성된 ```/home/csle/ksb_csle/docker/1.0-host```로 이동합니다.
아래의 명령을 통해 KSB 툴박스 docker 컨테이너를 실행하고 접속합니다.
```sh
csle@csle1:~/ksb-csle/docker/1.0-host$ ./startDockerCsle.sh
Error response from daemon: network csle_standalone not found
csle1
start csle1 slave container...
4918997cd2dac93fe0b52f3df3a45a46db6df1f3f052854061696695451d2f22
csle@csle1:/$
```
. (참고사항) KSB 툴박스 docker 컨테이너를 실행할 경우, Host pc의 /home/csle/ksb-csle 폴더를 volume 마운트해서 사용합니다. 따라서 예제 파일이나 모델 파일 등 사용자 파일은 ksb-csle 폴더를 통해 docker 컨테이너에서 접근 할 수 있습니다.
## [Docker 컨테이너] KSB 툴박스 docker 컨테이너 초기화하기
KSB 툴박스 docker 컨테이너 접속한 후, 다양한 KSB 툴박스 예제들을 실행하기 위해서 아래 명령을 통해 docker 컨테이너를 초기화 합니다. Zookeeper/Hadoop/Kafka/Hbase/웹툴킷 등 초기화를 진행합니다. PC사양에 따라 다소 시간이 걸릴 수 있습니다. 아래와 같은 메세지가 나오면 초기화가 완료된 상태입니다. (host pc의 IP는 192.168.0.5로 가정합니다. 자신의 Host PC IP가 출력되면 정상입니다.)
```sh
csle@csle1: cd
csle@csle1:~$ ./startService.sh
* Restarting OpenBSD Secure Shell server sshd [ OK ]
* Restarting PostgreSQL 9.6 database server [ OK ]
ZooKeeper JMX enabled by default
Using config: /home/csle/zookeeper-3.4.9/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
Warning: Permanently added 'master,192.168.0.5' (ECDSA) to the list of
known hosts.
ZooKeeper JMX enabled by default
Using config: /home/csle/zookeeper-3.4.9/bin/../conf/zoo.cfg
Starting zookeeper ... already running as process 174.
Warning: Permanently added 'csle1,192.168.0.5' (ECDSA) to the list of
known hosts.
ZooKeeper JMX enabled by default
Using config: /home/csle/zookeeper-3.4.9/bin/../conf/zoo.cfg
Starting zookeeper ... already running as process 174.
Starting namenodes on [csle1]
csle1: Warning: Permanently added 'csle1,192.168.0.5' (ECDSA) to the
list of known hosts.
< 중간 생략 >
[info] Loading project definition from
/home/csle/ksb-knowledge/KBE/project
[info] Set current project to KBE
(in build file:/home/csle/ksb-knowledge/KBE/)
[warn] The start command is deprecated, and will be removed in a
future version of Play.
[warn] To run Play in production mode, run 'stage' instead, and then
execute the generated start script in target/universal/stage/bin.
[warn] To test your application using production mode, run 'testProd'
instead.
[info] Wrote /home/csle/ksb-knowledge/KBE/target/scala-2.11/
kbe_2.11-1.0-SNAPSHOT.pom
Warning: node.js detection failed, sbt will use the Rhino based
Trireme JavaScript engine instead to run JavaScript assets compilation,
which in some cases may be orders of magnitude slower than using
node.js.
(Starting server. Type Ctrl+D to exit logs, the server will remain in
background)
<!DOCTYPE html>
<html lang="en">
<head>
<title>Select inference rules</title>
<link rel="stylesheet" media="screen"
href="/assets/stylesheets/main.css">
<link rel="shortcut icon" type="image/png"
href="/assets/images/favicon.png">
<script src="/assets/javascripts/hello.js"
type="text/javascript"></script>
</head>
<body>
< 중간 생략 >
<!DOCTYPE html>
<html lang="en">
<head>
<title>Welcome to Play</title>
<link rel="stylesheet" media="screen"
href="/assets/stylesheets/main.css">
<link rel="shortcut icon" type="image/png"
href="/assets/images/favicon.png">
<script src="/assets/javascripts/hello.js"
type="text/javascript"></script>
</head>
<body>
<h1>addDeviceControl</h1>
</body>
</html>
csle@csle1:~$
```
jps명령을 이용하여 초기화 상태를 확인합니다.
```sh
csle@csle1:~$ jps
2336 HRegionServer
2161 HMaster
3681 Jps
1890 NodeManager
1219 DataNode
885 QuorumPeerMain
1413 SecondaryNameNode
1078 NameNode
3542 ProdServerStart
2475 Kafka
3228 Bootstrap
1597 ResourceManager
```
## [Docker 컨테이너] KSB Base Ontology 로드하기
KSB 툴박스에 포함된 RealtimeIngestToServingWithKbInTwoEngines 예제를 실행하기 위해 온톨로지를 로드합니다.
```sh
cd ~/ksb-csle/bin/
./loadKnowledge_BaseOntologies.sh localhost 9876
```
## [Docker 컨테이너] KSB 인공지능 프레임워크 구동하기
KSB 툴박스의 다양한 예제를 실행하기 위해 아래 명령으로 KSB 인공지능 프레임워크 API serving을 실행합니다.
```sh
csle@csle1:~/ksb-csle/bin$ ./startKsbApiServing.sh
```
KSB 인공지능 프레임워크 사용을 위한 모든 준비가 완료되었습니다.
이제 <a href="http://csleoss.etri.re.kr:8088/kor/sub05_03.do" title="사용자가이드"> 사용자 가이드</a>로 이동하셔서 워크플로우 예제들을 실행해 보시기 바랍니다.
## FAQ
#### 1. 호스트 PC에서 sudo 명령을 할때 sudo: could not resolve host 에러가 날때
. [Host PC] 호스트 PC의 hostname이 csle1으로 설정되었는지 확인합니다.
. sudo vi /etc/hosts 명령을 통해 아래의 줄이 추가되었는지 확인합니다.
<자신의 IP> csle1 master
#### 2. 웹툴킷 홈페이지(csle1:8080)에 접속이 안될때
. [Docker 컨테이너] tomcat이 제대로 구동되지 않았을 경우가 있습니다. 따라서 docker내에서 아래의 명령으로 tomcat을 재구동한 후 재접속합니다.
```sh
csle@csle1:/$ ~/ui_of_csle/apache-tomcat-7.0.81/bin/catalina.sh stop
csle@csle1:/$ ~/ui_of_csle/apache-tomcat-7.0.81/bin/catalina.sh start
```
#### 3. 크롬을 이용해서 웹툴킷에 잘 접속 되었으나, 아래와 같이 웹페이지가 업데이트 되지 않고 멈춰있을때
![](./images/1.5.HowToRunFirst_01.png)
Host PC에 기존의 웹툴킷 버전이 캐쉬에 남아있어서 문제가 되는 경우입니다.
먼저, 크롬 브라우저에서 F12를 클릭합니다. 그리고, 아래 그림과 같이 '새로고침' 아이콘에서 마우스 오른쪽 버튼을 클릭하면 '캐시 비우기 및 강력 새로고침'을 클릭합니다. 그리고 F12를 클릭해서 디버깅 모드를 빠져나옵니다.
![](./images/1.5.HowToRunFirst_02.png)
This diff is collapsed.
This diff is collapsed.
---
html:
toc: true
offline: true
export_on_save:
html: true
---
# KSB 웹툴킷 개요
---
**KSB 웹툴킷** 은 사용자가 프레임워크를 효과적으로 사용할 수 있도록 지원하는 웹기반의 저작 도구입니다. **KSB 웹툴킷** 은 워크플로우를 정의하고 실행하는 기능과 실행 과정을 모니터링하는 기능, 그리고 관련 데이터를 업로드하고 결과를 시각화하는 기능 등을 지원합니다. **KSB 웹툴킷** 은 회원가입을 통해 로그인을 하여 사용하며 사용자별로 워크플로우를 관리합니다.
## 웹을 통한 접속 및 로그인
먼저 <a href="./1.5.HowToRunFirst.html">KSB 인공지능 프레임워크 실행하기</a> 매뉴얼을 참고하여 KSB 프레임워크를 구동합니다.
Chrome 브라우저(또는 HTML5 표준 호환 브라우저)를 열고 <a href="http://localhost:8080/">http://localhost:8080</a> 에 접속합니다. 로그인 페이지를 볼 수 있으며, 다음과 같이 기본적으로 제공하는 사용자 정보(수퍼관리자)가 저장되어 있습니다.
- User ID : `ksbuser@etri.re.kr`
- User Password : `ksbuser@etri.re.kr`
사용자 ID 와 암호를 입력한 후 로그인 합니다. 위 아이디로 로그인할 경우 워크플로우 예제가 저장되어 있습니다.
![Figure](images/2.1_signin.png)
## 기능 및 메뉴 구성
KSB 웹툴킷에 로그인을 하면 대시보드 화면이 보이고, 화면 상단에 다음과 같은 메뉴가 있습니다.
### Dashboard
대시보드에서는 KSB 웹툴킷에 로그인 한 사용자가 작성하여 저장하거나 실행한 워크플로우 정보 및 현재 서비스 되고 있는 정보를 한 눈에 파악할 수 있습니다. (다른 사용자가 작성하여 저장하거나 실행한 워크플로우는 나타나지 않습니다.) *Workflow TOP 10* 에서는 수행된 워크플로우의 통계 정보(수행 횟수, 수행 결과, 수행 경과시간)를 보여줍니다. *Workflow* 에서는 사용자가 작성하여 저장한 워크플로우의 리스트를 보여줍니다. 삭제(<span style="color:red">&#9747;</span>) 버튼을 눌러 해당 워크플로우를 삭제할 수 있습니다. 또한 특정 기간에 작성된 워크플로우를 검색하여 볼 수 있습니다. *Services* 에서는 현재 서비스 되고 있는 서빙 엔진들(온디맨드방식 처리 엔진들)의 세부 정보를 보여줍니다.
![dashboard Figure](images/2.1_dashboard.png)
### Workflow Editor
워크플로우 편집기에서는 그래픽 기반의 워크플로우 편집 기능을 사용하여 워크플로우를 작성하고 실행할 수 있습니다. 또한 워크플로우를 저장하고 로딩할 수 있으며 별도의 Json 파일로 Import/Export 할 수 있습니다. 워크플로우 편집기는 별도의 창으로 생성되며, 여러 개의 창을 동시에 띄워서 워크플로우를 각각 편집하고 실행할 수 있습니다. 구체적인 사용 방법은 <a href="./2.2.WebToolkit_Workflow.html">워크플로우 편집기 소개</a> 를 참조합니다.
![workflow Figure](images/2.1_workflow.png)
### Repository
KSB 인공지능 프레임워크는 **하둡파일시스템(HDFS)** 을 기본적으로 사용합니다. 데이터 저장소 관리에서는 사용자가 HDFS에 파일을 업로드 하거나 다운로드 하기 위한 인터페이스를 제공합니다. 워크플로우에서 사용하는 데이터 파일, 모델 파일, 결과 파일 등을 관리할 수 있습니다. 사용자가 원하는 파일 내용을 확인하거나 신규 디렉토리를 생성하고 파일을 업로드할 수 있는 기능을 제공합니다. 구체적인 사용 방법은 <a href="./2.3.1.WebToolkit_Repository.html">데이터 저장소 관리</a> 를 참조합니다.
![repository Figure](images/2.1_repository.png)
### Monitoring
진행내역/상태 모니터링에서는 KSB 프레임워크에 제출된 워크플로우(워크플로우에 속한 엔진 포함)의 목록 및 상태를 확인할 수 있습니다. 또한 워크플로우 및 엔진의 Status에 따라 실행 중인 워크플로우 및 엔진을 종료(<span style="color:red">&#9724;</span>)하거나, 재실행(<span style="color:#6698FF">&#9654;</span>)할 수 있습니다. 또한 *Workflow Histroy* 탭에서 엔진이 실행 되어 생성된 결과파일을 확인하고 그래프로 시각화 하거나 로그 기록을 볼 수 있습니다. 구체적인 사용 방법은 <a href="./2.3.2.WebToolkit_Monitoring.html"> 모니터링 소개</a> 를 참조합니다.
![monitoring Figure](images/2.1_monitoring.png)
### Component (관리자 메뉴)
컴퍼넌트 관리는 관리자 권한을 가진 사용자만 접근할 수 있습니다. 컴퍼넌트 관리에서는 SW 개발자가 만든 신규 컴퍼넌트를 **KSB 웹툴킷** 에서 사용할 수 있도록 등록하거나, 기존의 컴퍼넌트 동작이 변경되어었을 경우 수정하는 기능을 제공합니다. 또한 웹툴킷 컴퍼넌트들의 버전을 관리할 수 있습니다. 자세한 설명은 <a href="./3.4.HowToUseComponent.html">KSB 웹툴킷에 컴퍼넌트 등록하기</a> 를 참조합니다.
![component Figure](images/2.1_component.png)
### Management (관리자 메뉴)
시스템 설정 관리는 관리자 권한을 가진 사용자만 접근할 수 있습니다. 시스템 설정 관리에서는 웹툴킷 관리자가 쉽게 웹툴킷 정보(게이트웨이 Ip, Port, 버전 정보 등)를 확인하고 수정할 수 있습니다. *User Configuration* 탭에서는 회원 목록을 확인하고 회원 가입 승인, 관리자 권한 부여, 회원 삭제 등을 수행할 수 있습니다.
![management Figure](images/2.1_management.png)
## 회원 가입
KSB 웹툴킷은 회원가입을 통해 로그인을 하여 사용하며 사용자별로 워크플로우를 관리합니다. 자신의 계정을 생성하려면 로그인 화면에서 "신규 회원가입" 버튼을 클릭하여 이메일 인증을 통해 회원가입을 수행 합니다.
![Figure](images/2.1_joinin.png)
회원 가입 절차를 위해서는 이메일 인증을 할 메일 계정이 요구되며, **Management** 메뉴의 *System Configuration* 탭에서 설정할 수 있습니다. `javax.mail.session.prop.id``javax.mail.session.prop.password` 를 통해 각각 메일 계정과 메일 암호를 설정하여 이용할 수 있습니다. 메일은 Gmail 등을 사용하면 됩니다.
또한, 회원 가입을 위해서는 이메일 인증절차를 수행하는 PC에서 KSB 웹툴킷이 운용중인 서버에 접근할 수 있어야 합니다.
## 회원 관리
KSB 웹툴킷은 회원을 **일반사용자/관리자/수퍼관리자** 로 권한을 나누어 관리합니다. 일반사용자 계정은 Component 메뉴와 Management 메뉴에 접근할 수 없습니다. 관리자 및 수퍼관리자 계정은 Component 메뉴와 Management 메뉴에 접근 가능하고 기능을 사용할 수 있습니다. 다만, 관리자 계정은 **Management** 메뉴의 *User Configuration* 탭에서 일반사용자의 회원 가입 승인, 관리자 권한 부여, 회원 삭제 등을 수행할 수 있습니다. 관리자의 권한을 일반사용자로 바꾸거나 관리자 회원을 삭제하는 것은 수퍼관리자 계정만 가능합니다.
---
html:
toc: true
offline: true
export_on_save:
html: true
---
# 워크플로우 편집기 소개
---
워크플로우 편집기는 사용자가 워크플로우를 쉽게 정의할 수 있도록 그래픽 기반의 워크플로우 편집 기능과 실행 기능을 제공합니다. 워크플로우 편집 화면은 다음 그림과 같이 7가지 영역으로 구성되어 있습니다.
![워크플로우 편집 화면 (Workflow editor)](./images/2.2_workflow.png)
## 메뉴바
워크플로우의 생성/로딩/저장/실행/불러오기/내보내기/마법사 기능을 선택할 수 있는 화면입니다. 구체적인 메뉴 설명은 아래와 같습니다.
### New Workflow
새로운 워크플로우를 생성합니다. 하나의 워크플로우를 생성할 때는 버전을 선택하여 생성하며, 생성된 워크플로우의 버전은 변경할 수 없습니다. 해당 워크플로우가 생성될 때 선택한 버전으로 항상 로딩 되고 실행됩니다.
![워크플로우 편집 화면 (New)](./images/2.2_WorkflowVersion.png)
### Load Workflow
DB에 저장된 워크플로우를 불러옵니다. 삭제(<span style="color:red">&#9747;</span>) 버튼을 눌러 해당 워크플로우를 삭제할 수 있습니다. 이전에 실행한 이력이 있는 워크플로우를 삭제 하는 경우, 해당 워크플로우의 실행 이력 및 로그파일도 모두 삭제 됩니다. 또한 표의 헤더 부분을 클릭하여 정렬할 수 있습니다.
![워크플로우 편집 화면 (Load)](./images/2.2_WorkflowLoad.png)
### Save Workflow
작성 중인 워크플로우를 DB에 저장합니다. 워크플로우를 처음 저장할 경우 워크플로우의 이름과 설명을 입력한 후 저장합니다. 기존에 저장한 워크플로우를 수정했을 때는 저장 버튼을 누른 후 *Update* 를 통해 워크플로우를 갱신하거나 *Save As* 를 통해 새로운 워크를로우로 저장할 수 있습니다.
저장한 워크플로우의 이름은 왼쪽 메뉴 상단에 나타납니다.
워크플로우 편집 창의 빈 공간에서 마우스 오른쪽 버튼을 눌렀을 때도 워크플로우 이름 및 설명 정보를 확인 및 수정할 수 있습니다.
![워크플로우 편집 화면 (Save)](./images/2.2_WorkflowSave.png)
### Run Workflow
작성한 워크플로우 Spec 을 KSB 프레임워크로 제출합니다. 워크플로우의 이름과 설명을 입력하지 않았을 경우 이를 입력해야 합니다. 또한 Batch 여부 (배치처리일 경우 Batch 를 체크함) 와 Verbose (디버깅을 위해 상세 로그 정보를 확인 할 경우 체크함. 로그 정보가 상세하게 기록 됨.) 를 선택한 후 제출합니다. KSB 프레임워크는 Json 형태의 워크플로우 Spec 을 해석하여 엔진을 동적으로 구성하여 실행합니다.
![워크플로우 편집 화면 (Run)](./images/2.2_WorkflowRun.png)
### Import from file
Export 된 Json 포맷의 워크플로우 파일을 불러옵니다. "파일선택" 버튼을 클릭하여 워크플로우 파일을 선택한 후 "Import" 버튼을 클릭하여 워크플로우를 불러옵니다.
![워크플로우 편집 화면 (Import)](./images/2.2_WorkflowImport.png)
### Export to file
작성한 워크플로우 Spec 을 Json 포맷의 파일로 내보냅니다. Json 파일에 작성한 워크플로우의 spec이 저장되므로 Import 기능을 통해 워크플로우를 불러올 수 있습니다. 다른 사용자에게 내가 작성한 워크플로우를 공유하고자 할 때 사용합니다.
### Wizard
사용자가 작성하고자 하는 워크플로우와 가장 적합한 워크플로우 템플릿을 찾아주는 기능입니다.
다음과 같이 질문에 답변을 함으로써 사용자의 목적에 가장 부합하는 워크플로우를 찾아서 불러옵니다.
현재는, 개발자가 사전에 지식베이스에 저장한 예제 워크플로우에 대해서만 검색 됩니다.
![Wizard](./images/2.2_wizard1.png)
![Wizard](./images/2.2_wizard2.png)
![Wizard](./images/2.2_wizard3.png)
## 엔진 선택 창
사용자가 다양한 서비스를 만들 수 있도록 여러가지 엔진 타입을 제공합니다. 사용자가 원하는 엔진 타입을 선택한 후 **워크플로우 편집 창** 으로 drag & drop 하면 엔진 선택이 쉽게 완료됩니다. 각 엔진 타입에 대한 자세한 내용은 <a href="./2.4.1.EngineTypeList.html">엔진 유형 목록</a> 을 참조 하시기 바랍니다.
![워크플로우 편집 화면 (Engine)](./images/2.2_container.png)
## 컴퍼넌트 선택 창
엔진을 구성하는데 필요한 컴퍼넌트를 5종으로 구분하여 관련 컴퍼넌트 리스트를 제공하는 화면입니다. 사용자는 원하는 컴퍼넌트를 선택하여 **엔진 컨테이너** 으로 drag & drop 하면 자동으로 엔진 컨테이너에 탑재되어 손쉽게 엔진을 구성할 수 있습니다. 5종의 컴퍼넌트는 아래와 같으며 구체적인 컴퍼넌트 리스트는 <a href="./2.4.2.ComponentList.html">컴퍼넌트 목록</a> 을 참조하시기 바랍니다.
- **Reader**: 데이터를 읽어오기 위한 입력 컴퍼넌트들을 보여줍니다.
- **Writer**: 데이터를 보내기 위한 출력 컴퍼넌트들을 보여줍니다.
- **Operator**: 데이터 처리를 위한 처리 컴퍼넌트들을 보여줍니다.
- **Runner**: 실행을 지원하기 위한 실행 컴퍼넌트들을 보여줍니다.
- **Controller**: 선택된 컴퍼넌트들을 제어하기 위한 제어 컴퍼넌트들을 보여줍니다.
각 엔진마다 사용할 수 있는 컴퍼넌트들이 매핑되어 있으며, 각 컴퍼넌트에 마우스를 오버하면 간단한 툴팁 설명을 볼 수 있습니다.
![워크플로우 편집 화면 (Component)](./images/2.2_component.png)
## 속성 창
탑재된 컴퍼넌트의 속성을 설정하는 화면을 제공합니다. 사용자가 **탑재된 컴퍼넌트** 를 클릭하면, 컴퍼넌트 속성 창에 해당 컴퍼넌트의 속성이 표시됩니다.
![워크플로우 편집 화면 (Property)](./images/2.2_property.png)
속성 창에서 별표(<span style="color:red">&#10033;</span>) 표시는 반드시 입력해야 하는 필드를 나타냅니다. 해당 필드의 속성을 입력하지 않으면 워크플로우가 실행되지 않습니다.
반복적으로 입력하는 필드일 경우, <span style="color:#777777">&#10010;</span> 버튼을 반복적으로 클릭하여 입력합니다.
하위에 여러 필드를 가지는 속성일 경우, `세부 설정 내용 ...` 으로 표시되며 클릭하면 별도의 팝업창이 나타나서 입력할 수 있습니다.
### Help 참조
속성 창에서는 별도의 Help를 제공하여 사용자가 이를 참조하여 속성 값을 입력할 수 있도록 지원합니다. Help 버튼(<span style="color:#777777">?</span>)을 클릭하면 팝업창이 나타납니다. 구체적인 속성 입력 방법은 <a href="./2.5.2.KMeansExample.html">워크플로우 예제 만들기</a>를 참조합니다.
![워크플로우 편집 화면 (Property)](./images/2.2_property_help.png)
### 파일 경로 선택
입력파일, 출력파일, 학습모델 등의 경로에 관한 속성 설정은 **하둡파일시스템(HDFS)** 을 사용할 것인지 **로컬파일시스템** 을 사용할 것이지에 따라 주의해서 입력해야 합니다. 파일 시스템에 대한 설정은 KSB 프레임워크 설정파일인 ksb.conf에 설정된 **hdfs.Activated** 값이 *true* 인지 *false* 인지에 따라 하둡파일시스템(HDFS)의 상대경로인지 로컬파일 시스템의 상대경로인지가 결정되며, **기본 값은 하둡파일시스템** 으로 설정이 되어 있습니다.
또한 상대경로를 사용할 경우 다음과 같이 **사용자 기본 파일경로** 가 상대경로 앞에 적용됩니다.
- 하둡파일시스템 기본경로: hdfs://{host}:{port}/user/{user_id}/
- Writer 일 경우: hdfs://{host}:{port}/user/{user_id}/applications/{workflow_instance_id}_{engine_id}/output/
- 로컬파일시스템 상의 기본경로: file://{KSB_HOME}/
하둡파일시스템으로 설정된 경우, 하둡파일시스템에 대한 상대경로로 설정이 되며, **Repository**`File` 버튼을 클릭 했을 때 보이는 파일시스템은 하둡파일시스템 입니다.
파일 경로 속성을 입력하는 방법은 두 가지를 제공합니다.
#### 1) 파일탐색기 버튼을 이용하는 방법
filePath, pyEntryPath 등과 같이 Path로 끝나는 필드 이름을 가지는 속성은 입력창 옆에 `File` 버튼이 있습니다. 이 버튼을 클릭하여 탐색기 창을 통해 하둡파일시스템(HDFS)의 파일 또는 경로를 선택하는 것이 가능합니다.
![워크플로우 편집 화면 (Property)](./images/2.2_property_file.png)
`File` 버튼을 통해서 선택한 경로는 **하둡파일시스템의 상대경로** 이며, KSB 프레임워크로 제출 되면, 시스템에서 자동으로 **사용자 기본 파일경로** 를 추가하여 처리합니다.
#### 2) 직접 입력하는 방법
- `File` 버튼 옆의 입력란에, 사용자가 파일시스템 정보(*hdfs://* 또는 *file://*)를 포함한 전체경로를 직접 설정한 경우, KSB 프레임워크는 해당 경로에 대해 기본 파일경로 추가 등의 처리를 하지 않으며, 입력한 파일시스템 상의 경로가 그대로 KSB 프레임워크 내부에서 사용됩니다.
- */home/csle/...* 와 같이 최상위 경로정보 *'/'* 로 시작하는 경우, 해당파일시스템의 최상위로 시작하는 경로로 인식합니다.
- *'dataset/...'* 와 같이 상대경로를 지정한 경우, 상기에 설명한 **사용자 기본 파일경로** 가 상대경로 앞에 적용됩니다. 예를 들면, *'dataset/...'* 을 입력한 경우, *'hdfs://{host}:{port}/user/{user_id}/dataset/...'* 로 변경되어 KSB 프레임워크 상에서 처리됩니다.
## 워크플로우 편집 창
사용자가 직관적으로 엔진이나 컴퍼넌트를 편집할 수 있도록 워크플로우 편집 화면을 제공합니다. 사용자는 편집하고자 하는 엔진을 선택하거나 위치를 조정할 수 있습니다. 또한 필요한 컴퍼넌트들을 탑재하거나 삭제할 수 있습니다.
또한 엔진을 선택하고 마우스 오른쪽 버튼을 클릭하면 다음과 같은 메뉴를 사용할 수 있습니다.
- Engine 순서 설정
- Engine 순서 수정
- Engine 순서 보기
- Engine 복제
- Engine 삭제
워크플로우 편집창의 빈 공간에서 마우스 오른쪽 버튼을 클릭하여 다음과 같은 메뉴를 사용할 수도 있습니다.
- Engine 순서 설정
- Engine 순서 수정
- Engine 순서 보기
두 개 이상의 엔진을 구성하였을 경우, **선 연결****선 삭제** 기능을 이용할 수 있습니다.
### 엔진 복제
선택한 엔진과 동일한 엔진을 하나 만듭니다.
### 엔진 삭제
선택한 엔진을 삭제합니다.
### 엔진 순서 설정
엔진들 간의 순서를 설정합니다. "Engine 순서 설정" 을 클릭하면 워크플로우 편집 창이 비활성화 됩니다. 이 때 엔진을 차례대로 클릭하여 순서를 지정하고, Apply 버튼을 누릅니다.
![워크플로우 편집 화면 (Ordering)](./images/2.2_EngineOrdering.png)
### 엔진 순서 수정
엔진들 간의 순서를 수정합니다. "Engine 순서 수정" 을 클릭하면 워크플로우 편집창이 비활성화 되고, 현재 엔진들의 순서가 표시됩니다. 엔진 위의 숫자를 drag 하여 순서를 수정하고 Apply 버튼을 누릅니다.
![워크플로우 편집 화면 (Ordering)](./images/2.2_EngineOrdering2.png)
### 엔진 순서 보기
엔진 순서를 확인합니다.
"Engine 순서 보기" 를 클릭하면 워크플로우 편집창이 비활성화 되고, 현재 엔진들의 순서가 표시됩니다. 확인이 끝났으면 마우스 오른쪽 버튼을 클릭하여 "Engine 순서 보기 닫기" 를 클릭합니다.
![워크플로우 편집 화면 (Ordering)](./images/2.2_EngineOrdering3.png)
### 선 연결
워크플로우 편집 화면에서 선은 데이터 패스를 의미하며, 두 엔진을 선으로 연결하는 것이 가능합니다. 앞 엔진의 Writer 부분의 반달 모양에서 마우스를 클릭한 후 뒤에 있는 엔진의 Reader 부분의 반달 모양으로 drag & drop 하여 선을 연결합니다. Writer 와 Reader 의 이름이 다를 경우 다음과 같은 안내문이 나오며, 그래도 연결하고자 할 경우 연결하면 됩니다.
![워크플로우 편집 화면 (Link)](./images/2.2_WorkflowLink.png)
Writer 와 Reader 의 이름이 같을 경우에는 다음과 같이 Writer 의 속성값을 Reader 의 속성값으로 덮어쓸지를 선택하는 안내창이 나옵니다. "확인"을 클릭할 경우 Writer 의 속성값을 Reader 의 속성값으로 덮어쓰고, "취소"를 클릭할 경우 덮어쓰지 않습니다. 동일한 속성을 가지지 않았을 경우 (Writer 와 Reader 가 동일한 Component Property 를 가지지 않을 경우) 덮어쓰지 않을 것을 권장합니다.
![워크플로우 편집 화면 (Link)](./images/2.2_WorkflowLink2.png)
### 선 삭제
두 엔진을 연결한 선을 삭제하고자 할 경우 선이 있는 곳에서 마우스 오른쪽 버튼을 클릭하여 "Link 삭제"를 선택합니다.
![워크플로우 편집 화면 (Link)](./images/2.2_WorkflowLink3.png)
## 엔진 상세보기 창
엔진의 이름을 클릭하면 편집창 하단에 엔진 상세보기 창이 나타나며 엔진이 가진 Reader, Operator, Writer 들을 보여줍니다. 하나의 엔진에서 Reader, Operator, Writer는 여러 개를 가질 수 있습니다 (엔진 타입에 따라 하나만 가지거나 없는 경우도 있을 수 있음). 반면 Controller, Runner 는 반드시 하나만 가질 수 있습니다. 엔진 상세보기 창에서 각 컴퍼넌트를 drag & drop 하여 순서를 변경할 수 있습니다.
## 워크플로우 선택 창
KSB 웹툴킷에서 워크플로우 Spec 을 작성하여 KSB 프레임워크로 제출된 워크플로우의 목록 (워크플로우에 속한 엔진 목록 포함) 을 보여줍니다.
워크플로우 또는 엔진 이름을 선택한 후 **워크플로우 편집창** 으로 Drag & Drop 하면, 해당 워크플로우 또는 엔진을 불러옵니다. 따라서 이미 작성한 워크플로우 또는 엔진을 재사용하여 새로운 워크플로우를 작성할 수 있습니다.
![워크플로우 재사용하기](./images/2.2_WorkflowInstances.png)
---
html:
toc: true
offline: true
export_on_save:
html: true
---
# 데이터 저장소 관리
---
KSB 인공지능 프레임워크는 **하둡파일시스템(HDFS)** 을 기본적으로 사용합니다. KSB 웹툴킷에서는 **Repository** 메뉴를 통해 HDFS에 파일을 업로드 하거나 다운로드 하기 위한 인터페이스를 제공합니다.
## 사용자 기본 파일경로
파일 시스템에 대한 설정은 ksb.conf (KSB 인공지능 프레임워크 설정파일) 에 설정된 **hdfs.Activated** 값에 따라 결정됩니다. **hdfs.Activated***true* 일 경우 HDFS의 상대경로로 설정합니다. **hdfs.Activated***false* 일 경우 로컬파일 시스템의 상대경로로 설정합니다. 기본 값은 HDFS의 상대경로로 설정이 되어 있습니다 (**hdfs.Activated***true*).
- 하둡파일시스템 기본경로: hdfs://{host}:{port}/user/{user_id}/선택한 경로
- Writer 일 경우: hdfs://{host}:{port}/user/{user_id}/applications/{workflow_instance_id}_{engine_id}/output/선택한 경로
- 로컬파일시스템 상의 기본경로: file://{KSB_HOME}/선택한 경로
KSB 웹툴킷의 Repository에서 사용하는 경로는 **사용자 기본 파일경로** 를 생략하여 보여줍니다. 따라서 *'dataset/...'* 을 입력한 경우, *'hdfs://{host}:{port}/user/{user_id}/dataset/...'* 로 변경되어 KSB 인공지능 프레임워크 상에서 처리됩니다.
## 데이터 업로드
KSB 인공지능 프레임워크는 HDFS에 업로드 할 데이터 타입을 크게 세 가지로 분류하도록 권장합니다.
- dataset : 입력 데이터 파일 및 사용자 파이썬 코드 파일
- model : 학습된 기계학습 모델의 파라미터가 저장된 파일
- applications : 엔진의 Writer 가 생성한 결과 파일
따라서 KSB 인공지능 프레임워크를 설치하면 HDFS에 기본적으로 "dataset" 폴더와 "model" 폴더가 생성되어 있습니다. "applications" 폴더는 엔진 실행 시 생성됩니다. 업로드할 파일의 타입에 따라 상위 디렉토리를 먼저 선택한 후 하위 디렉토리를 선택하고 해당 위치에 파일을 업로드 합니다. "Filename", "FileSize", "Last Modified" 을 클릭하면 해당 속성을 기준으로 오름차순 또는 내림차순으로 정렬할 수 있습니다.
![Repository](./images/2.3.1_repository.png)
상위 디렉토리를 선택하면, 하위 디렉토리 구조가 왼쪽 창에 나타납니다. 파일을 업로드 하고자 하는 위치로 마우스를 클릭하여 이동한 후, <span style="color:#6698FF">File Upload</span> 버튼을 클릭하여 파일을 업로드 합니다.
이 때 입력파일의 이름(Name)과 설명(Description)을 함께 입력할 수 있습니다 (입력을 생략해도 됨). 이 정보는 입력 파일의 메타정보로 DB에 저장됩니다.
또한 파일 단위로 업로드 하거나 폴더 단위로 업로드 할 수 있습니다. 모델의 경우 주로 폴더 단위로 업로드 합니다.
구조가 복잡한 파일 및 디렉토리는 ZIP 파일로 압축한 다음, 파일 입력에서 폴더(압축파일)을 선택하여 업로드 할 수도 있습니다.
![파일 등록](./images/2.3.1_FileUpload.png)
새로운 폴더를 생성하고자 할 경우 <span style="color:#6698FF">New Directory</span> 버튼을 클릭하여 폴더명, *메타정보 [(이름(Name), 설명(Description)]* 를 입력한 후 생성 버튼을 클릭합니다.
![폴더 생성](./images/2.3.1_NewDirectory.png)
*메타정보 [이름(Name), 설명(Description)]***워크플로우 편집기****속성창** 에서 파일 경로를 선택할 경우 이용됩니다. 즉 파일탐색기 버튼 (filePath, pyEntryPath 등과 같이 Path로 끝나는 필드 이름을 가지는 속성의 입력창 옆에 있는 `File` 버튼) 을 클릭했을 때 사용할 파일을 검색하기 위해 이용되며, 입력이 필수 사항은 아닙니다.
## 파일 삭제 및 다운로드
파일 또는 폴더를 클릭한 후 마우스 오른쪽 버튼을 클릭하면 다음과 같은 메뉴가 나타납니다. 메타정보는 dataset, model 의 하위 경로에 포함된 파일에 대해서만 설정 및 이용할 수 있습니다.
- 삭제
- 복사
- 잘라내기
- 붙여넣기 (복사 또는 잘라내기 한 경우에만 활성화 됨)
- 이름 변경
- 다운로드
- 메타정보
![Repository](./images/2.3.1_FileSelect.png)
폴더를 선택하고 다운로드 메뉴를 클릭할 경우, 폴더를 압축하여 다운로드 합니다.
메타정보 메뉴를 클릭할 경우, 이름, 설명 등의 메타정보를 입력할 수 있는 팝업창이 나타납니다.
![Repository](./images/2.3.1_meta.png)
## 결과 파일 확인
사용자가 작성한 워크플로우에 상대경로로 파일을 저장하는 **FileWriter** 를 사용한 엔진이 있을 경우, 워크플로우 실행이 종료된 후 Repository 메뉴에서 결과 파일을 확인할 수 있습니다. 결과 파일은 기본적으로 아래 위치에 저장이 됩니다.
- hdfs://{host}:{port}/user/{user_id}/applications/{workflow_instance_id}_{engine_id}/ouput/
![Repository](./images/2.3.1_Output.png)
워크플로우 생성 및 실행은 <a href="./2.5.2.KMeansExample.html">배치방식으로 데이터 처리하기 (KMeansExample)</a> 를 참조합니다.
### CSV 결과 파일 보기 (차트)
CSV 파일 형식일 경우, 파일이름 옆에 나타나는 차트 보기 버튼을 클릭하면 다음과 같은 팝업창이 나타납니다. 오른쪽 "File list" 창에서 파일명을 클릭한 후 구분자 등을 입력하고 "OK" 버튼을 클릭하면 데이터를 확인할 수 있습니다.
![Repository](./images/2.3.1_chart.png)
"Statistics" 버튼을 클릭하여 통계 정보를 볼 수 있습니다.
![Repository](./images/2.3.1_chart2.png)
"Charts" 버튼을 클릭하여 그래프를 그려볼 수 있습니다.
![Repository](./images/2.3.1_chart3.png)
### TEXT 결과 파일 보기
파일이름 옆에 나타나는 텍스트 보기 버튼을 클릭하면 파일의 내용을 보여주는 창이 팝업됩니다. 화면 우측에서 파일명을 선택하고 최대로 보고자 하는 사이즈 (Max Length) 를 바이트 단위로 입력합니다. 디폴트로 1000 바이트가 설정되어 있습니다.
![Repository](images/2.3.1_text.png)
### 파일 비교
두 개의 파일을 동시에 띄워서 비교할 때 사용합니다.
파일이름 옆에 나타나는 파일 비교 버튼을 클릭합니다. 화면 아래쪽에 선택된 파일명이 나타납니다. 잘못 선택한 경우 x 버튼을 클릭하여 삭제합니다.
![Repository](./images/2.3.1_Compare1.png)
두 번째 파일이 있는 곳으로 디렉토리를 옮긴 후, 파일이름 옆에 나타나는 파일 비교 버튼을 클릭합니다. 잘못 선택한 경우 x 버튼을 클릭하여 삭제합니다. 두 개의 파일이 모두 선택된 경우 "Compare" 버튼이 나타납니다.
![Repository](./images/2.3.1_Compare2.png)
"Compare" 버튼을 클릭하면 아래와 같은 팝업창이 나타나며, **파일 보기** 와 동일하게 사용합니다.
![Repository](./images/2.3.1_Compare3.png)
---
html:
toc: true
offline: true
export_on_save:
html: true
---
# 모니터링 소개
---
KSB 프레임워크에 제출된 워크플로우(워크플로우에 속한 엔진 포함)의 목록 및 상태를 확인하고 제어합니다.
각 엔진은 다음과 같은 상태를 가질 수 있습니다.
Engine Status | 설명
--|---
<span style="color:#555555">Accepted</span> | API 게이트웨이로 엔진이 제출(submit) 된 경우
<span style="color:#1F77B4">InProgress</span> | 엔진이 실행 중인 경우
<span style="color:#2ca02c">Completed</span> | 엔진이 에러없이 완료된 경우
<span style="color:#d62728">Failed</span> | 엔진 실행 중 에러가 발생하여 종료된 경우
<span style="color:#ff7f0e">Killed</span> | 사용자가 엔진 실행 중 종료한 경우
워크플로우는 워크플로우에 속한 엔진들의 상태에 따라 다음과 같은 두 가지 상태를 가질 수 있습니다.
- <span style="color:#1F77B4">Inprogress</span>
- 한 엔진이라도 Inprogress 또는 Accpted 의 상태를 가지는 경우
- <span style="color:#2ca02c">Finished</span>
- 모든 엔진이 Completed / Failed / Killed 중 하나의 상태를 가지는 경우
- 엔진 정보를 검색할 수 없는 경우
<br>
<a href="./2.2.WebToolkit_Workflow.html">워크플로우 편집기 소개</a> 를 참고하여 작성한 워크플로우를 실행한 뒤, KSB 웹툴킷 상단의 **Monitoring** 메뉴를 선택하여 "진행내역/상태모니터링" 화면으로 이동합니다.
## Workflow 탭
진행내역/상태 모니터링의 *workflow* 탭에서는 KSB 프레임워크에 제출된 워크플로우(워크플로우에 속한 엔진 포함)의 목록 및 상태를 확인할 수 있습니다. 또한 실행 중인 워크플로우를 종료(<span style="color:red">&#9724;</span>)하거나, 다시 실행(<span style="color:#6698FF">&#9654;</span>)할 수 있습니다.
![monitoring Figure](images/2.3.2_monitoring.png)
**<span style="font-size: 14pt;">&#10112; 워크플로우 필터링</span>**
워크플로우의 목록을 필터링 하여 볼 수 있습니다. 콤보박스를 클릭하여 필터링 하고자 하는 항목을 선택하고, 값을 입력한 후 돋보기 모양의 버튼을 누르면 필터링 된 워크플로우 목록을 보여줍니다.
**<span style="font-size: 14pt;">&#10113; 워크플로우 개수 조절</span>**
화면에 보여지는 워크플로우의 개수를 조절할 수 있습니다. 콤보박스를 클릭하여 한 화면에서 보고자 하는 워크플로우 개수를 선택합니다.
**<span style="font-size: 14pt;">&#10114; 펼쳐보기/줄여보기</span>**
"펼쳐보기" 를 선택하면 워크플로우에 속한 엔진들의 목록을 일괄적으로 펼쳐서 모두 보여줍니다. "줄여보기" 를 선택하면 워크플로우에 속한 엔진들의 목록을 일괄적으로 접고 워크플로우 목록만 보여줍니다.
각 워크플로우를 개별적으로 "펼쳐보기" 하려면 워크플로우 이름 앞의 (<span style="color:#777777">&#10010;</span>) 버튼을 클릭합니다. 각 워크플로우를 개별적으로 "줄여보기" 하려면 워크플로우 이름 앞의 (<span style="color:#777777">&#8259;</span>) 버튼을 클릭합니다.
**<span style="font-size: 14pt;">&#10115; 새로고침 </span>**
워크플로우 및 엔진의 현재 상태(Status) 를 업데이트 합니다. 상태 정보는 KSB 프레임워크에 요청하여 응답 받은 결과를 보여주는 것입니다. 기본적으로는 모니터링 페이지를 열 때 마다 새로운 정보를 수신하여 표시 합니다.
**<span style="font-size: 14pt;">&#10116; 자동 새로고침 </span>**
"Auto Reload" 를 체크할 경우 워크플로우 및 엔진의 상태(Status) 를 주기적으로 업데이트 합니다.
참고로, 업데이트 할 주기는 **Management** 메뉴의 **System Configuration** 탭에서 `monitoring.auto.reload.interval` 를 통해 설정합니다. 기본 값은 5000 (5초) 으로 설정되어 있습니다.
**<span style="font-size: 14pt;">&#10117; 개별 펼쳐보기/줄여보기 </span>**
워크플로우 이름 앞의 (<span style="color:#777777">&#10010;</span>) 버튼을 클릭하면 워크플로우에 속한 엔진의 상세 정보를 확인할 수 있습니다 ("펼쳐보기"). 워크플로우 이름 앞의 (<span style="color:#777777">&#8259;</span>) 버튼을 클릭하면 워크플로우에 속한 엔진의 목록을 숨깁니다 ("줄여보기").
**<span style="font-size: 14pt;">&#10118; 워크플로우 세부 Spec 보기 </span>**
KSB 웹툴킷에서 워크플로우 Spec 을 작성하여 KSB 프레임워크로 제출한 워크플로우일 경우에 "세부 Speck 보기" 버튼이 활성화 됩니다. (이클립스와 같이 개발자 환경 환경을 통해 워크플로우 Spec 을 작성하여 KSB 프레임워크로 제출하거나, 클라이언트 라이브러리를 이용한 경우 "세부 Speck 보기" 버튼이 보이지 않습니다.)
"세부 Speck 보기" 버튼을 클릭하면 **워크플로우 편집기** 화면을 열어서 작성한 워크플로우의 Spec 을 보여줍니다. 이 경우, 해당 워크플로우는 새로운 워크플로우로 열리며, 수정 및 재제출 시 다른 워크플로우로 인식 됩니다.
참고로, 이 기능은 추후 json 형태의 워크플로우 Spec 을 보여주는 것으로 변경될 예정입니다.
**<span style="font-size: 14pt;">&#10119; 워크플로우/엔진 실행/종료 </span>**
워크플로우 및 엔진의 Status에 따라 실행 중인 워크플로우 및 엔진을 종료(<span style="color:red">&#9724;</span>)하거나, 재실행(<span style="color:#6698FF">&#9654;</span>)할 수 있습니다.
**<span style="font-size: 14pt;">&#10120; 워크플로우 삭제</span>**
워크플로우를 목록에서 삭제합니다.
## Workflow History 탭
진행내역/상태 모니터링의 *Workflow Histroy* 탭에서는 최근에 수행한 워크플로우 이력을 엔진 단위로 보여줍니다. (각 엔진은 재실행 될 때 마다 새로운 history id를 부여 받으며, 각 실행이력은 본 Workflow History 탭에서 확인할 수 있습니다.)
![monitoring Figure](images/2.3.2_monitoring_history.png)
**<span style="font-size: 14pt;">&#10112; 필터링</span>**
엔진 목록을 필터링 하여 볼 수 있습니다. 콤보박스를 클릭하여 필터링 하고자 하는 항목을 선택하고, 값을 입력한 후 돋보기 모양의 버튼을 누르면 필터링 된 목록을 보여줍니다.
**<span style="font-size: 14pt;">&#10113; 목록 개수 조절</span>**
화면에 보여지는 목록의 개수를 조절할 수 있습니다. 콤보박스를 클릭하여 한 화면에서 보고자 하는 목록의 개수를 선택합니다.
**<span style="font-size: 14pt;">&#10114; 새로고침 </span>**
엔진의 상태(Status) 를 업데이트 합니다. 상태 정보는 KSB 프레임워크에 요청하여 응답 받은 결과를 보여주는 것입니다.
**<span style="font-size: 14pt;">&#10115; CSV 결과 파일 보기 (차트) </span>**
FileWriter 를 포함하고 있는 엔진일 경우에 "CSV 결과 파일 보기(차트)" 버튼이 활성화 됩니다. CSV 파일로 결과를 출력한 경우, 결과 파일의 내용을 확인하고 그래프로 시각화 할 수 있습니다.
"CSV 결과 파일 보기(차트)" 버튼을 클릭하면 차트보기 창이 팝업됩니다. 화면 우측에서 파일명을 선택하고 구분자, 헤더 포함 유무 등을 체크한 후 "OK" 버튼을 누릅니다.
![monitoring Figure](images/2.3.2_monitoring_chart.png)
화면 좌측에서 "Data" 는 파일의 내용을 표로 보여줍니다. "Statistics" 는 통계 정보를 보여줍니다. "Chart" 는 "Chart Style" 을 선택하여 그래프를 그려줍니다.
**<span style="font-size: 14pt;">&#10114; TEXT 결과 파일 보기 </span>**
FileWriter 를 포함하고 있는 엔진일 경우에 "TEXT 결과 파일 보기" 버튼이 활성화 됩니다. "TEXT 결과 파일 보기" 버튼을 클릭하면 파일의 내용을 보여주는 창이 팝업됩니다. 화면 우측에서 파일명을 선택하고 최대로 보고자 하는 길이 (Max Length) 를 입력합니다. 디폴트로 1000 바이트가 설정되어 있습니다.
![monitoring Figure](images/2.3.2_monitoring_text.png)
**<span style="font-size: 14pt;">&#10114; 로그 보기 </span>**
"Show log" 버튼(<span style="color:#6698FF">&#8505;</span>)을 클릭하면 로그 기록을 보여주는 창이 팝업됩니다. Line 수를 지정하여 보거나 전체 로그 보기가 가능합니다.
![monitoring Figure](images/2.3.2_monitoring_log.png)
### 결과 파일 확인
워크플로우 실행 결과 생성된 파일은 **Monitoring** 메뉴의 *Workflow Histroy* 탭의 "CSV 결과 파일 보기 (차트)" 버튼과 "TEXT 결과 파일 보기" 버튼을 이용하여 확인할 수 있습니다.
또한 **Repository** 메뉴의 데이터저장소 관리 화면에서 결과 파일이 있는 위치로 이동하여 파일 이름 옆에 나타나는 "CSV 결과 파일 보기 (차트)" 버튼과 "TEXT 결과 파일 보기" 버튼을 이용하여 확인할 수 있습니다.
![monitoring Figure](images/2.3.2_repository.png)
---
html:
toc: true
offline: true
export_on_save:
html: true
---
# 엔진유형 목록 (v19.03)
---
KSB 인공지능 프레임워크가 기본적으로 제공하는 엔진 유형으로서 크게 배치방식, 스트림방식, 실시간 스트림 방식, 온디맨드 방식으로 동작하는 엔진들과 기타 외부연동용 엔진, GenericType의 엔진 유형이 존재합니다.
## 배치방식 처리엔진
엔진 타입 | 설명 | 사용 예제
--|--|--
**Batch** | 배치성 처리에 사용되는 엔진컨테이너로서 배치저장소로부터 데이터를 읽어 일괄처리 후 배치저장소로 출력하기 위한 용도로 활용가능. <br>BatchReader, BatchWriter, BatchOperator, BatchRunner, BatchController로 구성. <br>대표적으로 딥러닝학습용 엔진컨테이너를 구성하고자 하는 경우 이 엔진을 활용 |<a href="./2.5.10.HourlyTensorflowTraining.html" > &#8226; 텐서플로우 모델 주기적으로 학습하기 </a>
**Batchcd Dummy** | Deprecated by Batch <br> 삭제예정 |
**BatchToBatchStream** | 배치성 데이터 처리에 사용되는 컨테이너로서 배치저장소로부터 많은 데이터를 읽어 미니배치 형태의 다양한 처리를 수행한 후 배치저장소에 적재하는데 사용. <br>BatchReader, BatchWriter, StreamOperator, StreamRunner, StreamController로 구성 |<a href="./2.5.2.KMeansExample.html" > &#8226; 배치방식으로 데이터 처리하기 </a> <br> <a href="./2.5.3.DeidentificationExample.html" > &#8226; 비식별 처리하기 </a>
배치처리 방식의 엔진들은 파일, DB 등의 배치저장소로부터 데이터를 한번 읽은 후 데이터를 가공하고, 배치저장소로 출력합니다. 따라서 엔진이 실행되면 데이터 처리가 끝난 후 자동으로 종료됩니다. 배치방식 처리 엔진들은 한번 실행하거나 주기적으로 실행할 수 있습니다 (엔진의 RUNTYPE 속성 지정).
배치방식 처리 엔진들이 두 개 이상 포함된 워크플로우의 경우, 워크플로우의 속성 값 중 Batch 를 true 로 선택할 경우, 맨 앞의 엔진부터 실행과 종료가 순차적으로 실행이 됩니다. 반대로 Batch 를 false 로 설정할 경우 동시에 엔진이 실행됩니다. 따라서 앞의 엔진의 처리 결과를 이용해 뒤에 엔진이 처리해야하는 순차적인 실행을 하고자하는 워크플로우는 반드시 Batch 를 true 로 설정하시고 실행하여야 합니다.
## 스트림방식 처리엔진
엔진 타입 | 설명 | 사용 예제
--|--|--
**StreamToBatch** | 스트림을 입력받아 처리한 후 배치저장소에 출력하기 위한 엔진컨테이너.<br>StreamReader, BatchWriter, StreamOperator, StreamRunner, StreamController로 구성 |<a href="./2.5.1.HttpToMongodbExample.html" > &#8226; 스트림 데이터 적재하기 </a> <br> <a href="./2.6.1.TrafficPreprocessing.html" > &#8226; 교통속도 스트림 데이터 전처리하기 </a>
**StreamToStream** | 스트림 데이터처리에 사용되는 엔진컨테이너. <br>StreamReader, StreamWriter, StreamOperator, StreamRunner, StreamController로 구성 |<a href="./2.5.12.TfStreamPredictionMnist.html" > &#8226; 스트림 방식으로 MNIST 모델 서빙하기 </a> <br> <a href="./2.5.7.RealtimeIngestToPredictInSingleEngine.html" > &#8226; 스트림방식으로 ML모델 예측결과 얻기 </a>
스트림방식 처리 엔진들은 카프카, HTTP 등을 이용해 스트림 데이터를 입력받은 후 일정한 주기 (Mini batch 주기)로 깨어나 미니배치 형태로 동작합니다. 스트림 데이터를 들어온 순서대로 일정한 개수만큼 잘라서 가공하고, 배치저장소에 출력하거나 또는 스트림 형태로 출력합니다. 스트림 처리 엔진은 계속해서 스트림 데이터를 받고 있으므로 사용자가 종료 명령을 내릴 경우 종료됩니다. 종료는 **KSB 웹툴킷** 의 모니터링 화면에서 할 수 있습니다.
현재 프레임워크 상에 구현되어 있는 대부분의 스트림 처리용 컴퍼넌트들은 Spark Streaming (<a href="https://spark.apache.org/docs/latest/streaming-programming-guide.html" >참고사이트 바로가기</a>) 기반으로 구현되었습니다.
스트림방식 처리 엔진들은 데이터를 처리하는 시간이 길 경우 (데이터 처리 오퍼레이터가 많을 경우) delay 가 발생할 수 있습니다. 실시간 처리가 필요할 경우 실시간 스트림방식 처리 엔진을 사용할 것을 권장합니다.
스트림방식 처리 엔진들이 두 개 이상 포함된 워크플로우의 경우, 워크플로우의 속성 값 중 Batch 를 반드시 false 로 설정하셔야 합니다. Batch 를 true 로 설정할 경우 앞의 엔진이 종료되기 전까지 뒤에 엔진이 실행되지 않습니다.
## 실시간 스트림방식 처리엔진
엔진 타입 | 설명 | 사용 예제
--|--|--
**StreamJoin** | 실시간 스트림처리를 제공하기 위한 엔진컨테이너로서 하나 이상의 Reader와 Writer 탑재 가능. <br>StreamController, StreamPipeReader, StreamPipeWriter, StreamPipeOperator, StreamRunner로 구성. <br>Spark structed-streaming 처리에 사용 |<a href="./2.6.5.TrafficTimeseriesProcessing.html" > &#8226; 실시간 시계열 교통속도 센서스트림 처리 하기 </a>
**StreamPipe** | Deprecated by StreamJoin <br> 삭제예정 |
실시간 스트림방식 처리 엔진은 카프카 등을 이용해 시간정보가 포함된 스트림 데이터를 계속해서 받고 있고 (입력 테이블은 새로 들어온 데이터를 append 함), trigger 시 입력 테이블에서 데이터를 가져와 쿼리를 수행하고 결과 테이블을 출력하는 방식의 실시간 처리를 합니다.
현재 프레임워크 상에 구현되어 있는 대부분의 실시간 스트림 컴퍼넌트들은 Spark의 Structred Streaming (<a href="https://spark.apache.org/docs/latest/structured-streaming-programming-guide.html" >참고사이트 바로가기</a>) 기반으로 구현되었습니다.
실시간 스트림방식 처리 엔진은 데이터에 포함된 시간 정보를 기반으로 처리합니다. 현재 시간은 받은 데이터의 시간 중 가장 늦은 시간이 됩니다. 이 시간을 기준으로 늦게 들어오는 데이터를 얼마동안 고려해서 처리할 것인지를 watermark 설정을 통해 할 수 있습니다 (watermark 는 Reader 의 속성으로 설정합니다). 따라서 실시간 스트림방식 처리 엔진에서는 시간 순으로 들어오지 않는 데이터도 처리 가능합니다.
실시간 스트림방식 처리 엔진에서 결과 테이블을 출력하는 방식은 3가지가 존재합니다 (Writer 의 mode 속성으로 설정합니다). "complete" 모드는 결과 테이블의 전체 row 들을 모두 출력합니다. "update" 모드는 결과 테이블에서 쿼리 수행 결과 변화가 있는 row들을 모두 출력합니다. "append" 모드는 변화가 있는 row들 중 앞으로 변화가 더 이상 일어나지 않을 row 들을 출력합니다. "update" 모드와 "append" 모드는 watermark 설정과 관련이 있으며, watermark 설정을 하지 않았을 경우 출력값이 동일합니다. 현재는 "append" 모드를 사용할 것을 권장합니다.
실시간 스트림방식 처리 엔진은 single 쿼리를 수행하므로 복잡한 가공을 하기는 어렵습니다. window 설정을 통한 총계처리 등을 통해 무작위로 들어오는 데이터를 시간순으로 처리하고, 잡음을 스무딩하고, missing 데이터를 채우는 용도로 사용하고, 복잡한 가공은 스트림 처리 엔진을 통해 미니배치 형태로 수행하는 것을 권장합니다.
실시간 스트림방식 처리 엔진은 계속해서 데이터를 받고 있으므로 사용자가 종료 명령을 내릴 경우 종료됩니다. 종료는 **KSB 웹툴킷** 의 모니터링 화면에서 할 수 있습니다. 따라서 실시간 스트림 방식 처리 엔진들은 한번 실행할 수 있습니다 (엔진의 RUNTYPE 속성 지정).
실시간 스트림방식 처리 엔진들이 두 개 이상 포함된 워크플로우의 경우, 워크플로우의 속성 값 중 Batch 를 반드시 false 로 설정하셔야 합니다. Batch 를 true 로 설정할 경우 앞의 엔진이 종료되기 전까지 뒤에 엔진이 실행되지 않습니다.
## 온디맨드방식 처리엔진
엔진 타입 | 설명 | 사용 예제
--|--|--
**OnDemandServing** | OnDemand 요청에 응답을 제공하기 위한 엔진컨테이너로서, OnDemandOperator, OnDemandRunner, OnDemandController로 구성 |<a href="./2.5.11.InceptionServingExample.html" > &#8226; 온디맨드 방식으로 Inception 모델 서빙하기 </a> <br><a href="./2.6.3.TrafficOnDemandServing.html" > &#8226; 온디맨드 방식으로 교통속도예측 모델 서빙하기 </a>
**OnDemandStream** | 삭제예정 |
**OnDemandPipeServing** | OnDemand 요청에 하나 이상의 오퍼레이터를 파이프라인 처리하여 응답을 제공하는 엔진으로서 OnDemandPipeReader, OnDemandPipeOperator, OnDemandRunner, OnDemandController로 구성. <br>주로 **융합서빙** 에 사용 |<a href="./2.5.13.ConvergedServingEndToEndExample.html" > &#8226; 융합 REST API 만들기 </a>
**OnDemandStreamServing** | OnDemand 요청에 서비스를 제공하기 위한 엔진컨테이너로서, OnDemandReader, OnDemandOperator, OnDemandRunner, OnDemandController로 구성 |<a href="./2.5.8.RealtimeIngestToServingInTwoEngines.html" > &#8226; 스트림 예측하여 REST 방식으로 서빙하기 </a>
**OnDemandExternalServing** | OnDemand 요청에 서비스를 제공하기 위한 엔진컨테이너로서, OnDemandExternalRunner로 구성. <br>주로 사용자가 작성한 Python 모듈을 API화 하기 위한 엔진 구성시 사용 |<a href="./2.5.13.ConvergedServingEndToEndExample.html" > &#8226; 융합 REST API 만들기 </a>
온디맨드방식 처리 엔진들은 텐서플로우 기반 딥러닝 모델, 사용자가 작성한 Python 모듈 등을 REST API 형태로 서비스 하는 용도로 사용합니다. 사용자 (클라이언트) 는 프레임워크 외부에서 쿼리를 요청하고, 결과를 응답받는 방식으로 사용합니다. Reader 를 통해 데이터를 받지 않는 경우 데이터를 쿼리에 포함하여 요청합니다.
텐서플로우 기반 딥러닝 모델은 TensorFlow Serving (<a href="https://www.tensorflow.org/serving/" >참고사이트 바로가기</a>) 을 통해 서비스 합니다. 따라서 사용자는 학습한 딥러닝 모델을 텐서플로우 서빙용으로 export 한 후 프레임워크에서 모델을 서빙합니다. 프레임워크와 연동하고 서빙을 하기 위해 파이썬 기반 텐서플로우 모델을 코딩하는 방법은 <a href="./2.7.2.KSB_TfPyCoding_Guide.html" >KSB 프레임워크와 연동을 위한 tensorflow 학습코드 작성하기</a> 를 참고합니다.
사용자가 작성한 Python 모듈은 프레임워크에서 제공하는 KSB Dockerize (<a href="./2.7.1.KSB_Dockerize.html" >참고자료 바로가기</a>) 를 이용하여 REST API로 만들고 서비스 합니다. KSB Dockerize 라이브러리는 사용자가 프로그래밍한 Python 함수를 Docker 이미지로 자동 변환할 뿐만 아니라 REST API 기능을 자동으로 추가하여, 사용자 Python 함수로 입력 데이터를 보내고 결과를 받을 수 있게 합니다.
또한 내부적으로 여러 개의 REST API 를 파이프라인하여 새로운 융합 REST API 를 만드는 것이 가능합니다. 사용자 (클라이언트) 는 프레임워크 외부에서 융합서빙 엔진으로 한번만 쿼리를 요청하면, 내부적으로 여러 개의 REST API 로 쿼리를 보내고 응답받은 결과를 총계처리 하여 사용자 (클라이언트) 에게 보내줍니다. 또는 REST API 로 쿼리를 보내고 응답받은 결과에 따라 다음 REST API 주소를 결정하여 (라우팅 기능) 쿼리를 보내고 응답받은 결과를 사용자 (클라이언트) 에게 보내줍니다.
온디맨드방식 처리 엔진은 계속해서 쿼리 요청을 대기하고 있으므로 사용자가 종료 명령을 내릴 경우 종료됩니다. 종료는 **KSB 웹툴킷** 의 모니터링 화면에서 할 수 있습니다. 따라서 온디맨드방식 처리 엔진들은 한번 실행할 수 있습니다 (엔진의 RUNTYPE 속성 지정).
온디맨드 방식 처리 엔진들이 두 개 이상 포함된 워크플로우의 경우, 워크플로우의 속성 값 중 Batch 를 반드시 false 로 설정하셔야 합니다. Batch 를 true 로 설정할 경우 앞의 엔진이 종료되기 전까지 뒤에 엔진이 실행되지 않습니다.
## 기타 엔진
엔진 타입 | 설명 | 사용 예제
--|--|--
**External** | 외부 실행플랫폼을 연동하기 위한 엔진컨테이너로서, BatchReader, BatchWriter, 하나 이상의 BatchOperator, BatchRunner, BatchController로 구성. <br>대표적으로 파이썬 기반 딥러닝학습용 엔진컨테이너의 경우 이 엔진을 활용 |<a href="./2.5.4.BatchMLTrainInSingleEngine.html" > &#8226; ML 모델 학습하기 </a> <br> <a href="./2.5.5.BatchAutoMLTrainInSingleEngine.html" > &#8226; AutoML 학습하기 </a>
**Generic** | 사용자가 정의할 수 있는 모든 요소를 이용 가능한 엔진컨테이너로서, 모든 종류의 Reader, Writer, Operator, Runner, Controller로 구성. <br>Generic 타입이므로 자유도가 높은 반면, 개발자가 오류를 범하지 않도록 응용을 만들때 신중히 구성해야 함.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment