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 종이 제공되고 있으며, 자세한 내용은 <ahref="./2.4.1.EngineTypeList.html">엔진 유형 목록</a>을 참조하시기 바랍니다.
### 컴퍼넌트
엔진컨테이너를 구성하는 구성체로서, 5가지의 컴퍼넌트의 유형이 존재하며 각각 다음과 같은 역할을 수행합니다.
-**Reader** 데이터 발생지로부터 데이터를 읽어오기 위한 컴퍼넌트 유형
-**Writer** 데이터 저장소로 데이터를 출력하기 위한 컴퍼넌트의 유형
-**Operator** 데이터를 처리하기 위한 컴퍼넌트의 유형
-**Runner** 실행 런타임을 실행하기 위한 컴퍼넌트 유형
-**Controller** 엔진컨테이너 내의 처리절차를 구성하고 실행을 주관하는 컴퍼넌트의 유형
현재 프레임워크 상에는 데이터처리/학습/서빙 관련 총 73종의 컴퍼넌트가 탑재되어 있으며, 자세한 내용은 <ahref="./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 웹툴킷** 은 워크플로우를 정의할 수 있는 편집기, 워크플로우를 실행하고 제어하기 위한 모니터링, 데이터의 업로드 및 시각화 등을 웹 방식의 그래픽 환경에서 수행할 수 있도록 제공되는 클라이언트 모듈입니다. 자세한 내용은 <ahref="./2.1.IntroductionWebToolkit.html">KSB 웹툴킷 소개</a> 를 참조하시기 바랍니다.
#### KSB Client SDK
**KSB Client SDK** 는 스칼라(자바) 기반의 클라이언트 개발도구로서, 개발자가 **KSB 프레임워크** 상에서 실행하고자 하는 워크플로우를 개발할 수 있는 환경과 작성한 워크플로우를 실행할 수 있는 API 를 함께 제공합니다 (자세한 설명은 <ahref="./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 인공지능 프레임워크** 는 <ahref="https://csleoss.etri.re.kr">KSB 인공지능 프레임워크 웹페이지</a> 를 통해 **툴박스 버전**과 **클러스터 버전**, 두 가지의 배포버전에 대한 설치방법을 제공하고 있습니다.
### KSB 툴박스
**KSB 툴박스** 는 **KSB 웹툴킷** 과 stand-alone 버전의 **KSB 런타임(실행환경)** 을 지원하는 툴박스 형태의 **KSB 프레임워크** 로서, 사용자의 로컬환경에서 KSB 프레임워크 실행환경을 쉽고 빠르게 구성하여 사용하기 위한 환경을 제공합니다.
### KSB 클러스터
**KSB 클러스터** 는 실제 클러스터 환경에서 운영하기 위한 배포 형태로서 **KSB 웹툴킷** 과 분산병렬 버전의 **KSB 런타임** 을 지원하는 **KSB 프레임워크** 로 구성되어 있습니다. 설치와 사용에 관한 자세한 사항은 <ahref="./3.1.HowToConfigureDevelopEnvironment.html">KSB 인공지능 프레임워크 설치</a> 매뉴얼을 참조하시기 바랍니다.
KSB 인공지능 프레임워크 실행하기 위해 <ahref="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 컨테이너를 실행하고 접속하는 것일 뿐 모두 동일합니다.
KSB 인공지능 프레임워크 실행하기 위해 <ahref="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 컨테이너를 실행하고 접속하는 것일 뿐 모두 동일합니다.
제공된 KSB 툴박스를 사용하지 않고, 직접 Host PC에 KSB 인공지능 프레임워크를 설치하기 위해서 아래의 오픈소스 프레임워크들을 설치합니다. 사용자 csle 계정을 생성한 후 아래 프로그램들을 설치합니다.
## csle 사용자 계정(권한 : administrator) 생성하기
<ahref="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 설치하기
<ahref="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 프레임워크 설치하기
<ahref="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 위치를 지정합니다.
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 클래스의 서브 클래스를 검색하기 위한 쿼리입니다.
## [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] Hadoop 2.7.3 설치하기
아래 링크를 참고하여 사용자의 PC 혹은 클러스터 환경에 맞게 설치합니다.
참고링크 : https://hadoop.apache.org/docs/r2.7.3/
다운로드 링크 : https://archive.apache.org/dist/hadoop/common/hadoop-2.7.3/
**[KSB 툴박스를 이용한 설치 방법]**
KSB 툴박스를 동작시킨 상태에서 docker 컨테이너로부터 hadoop 설정 파일을 복사하여 설치할 수도 있습니다.
먼저 도커에 접속하는 방법을 참고하여 접속합니다. (<ahref="http://csleoss.etri.re.kr:8088/images/contents/manual_1.0/Filezilla.html"> Filezilla를 이용하여 KSB 툴박스 docker 컨테이너에 접속하기 </a>)
도커에 있는 hadoop-2.7.3 폴더를 Host PC의 /home/csle 폴더에 복사합니다.
또한, /home/csle/data 폴더의 hdfs 관련 정보저장 폴더를 /home/csle 폴더에 복사합니다.
그리고, ssh 포트 정보를 'hadoop-env.sh'파일에 추가합니다.
```sh
vi /home/csle/hadoop-2.7.3/etc/hadoop/hadoop-env.sh
export HADOOP_SSH_OPTS="-p 2243"
```
마지막으로 심볼릭링크을 설정합니다.
```sh
ln-s /home/csle/hadoop-2.7.3 /home/csle/hadoop
```
## [Host PC] spark-2.3.0-bin-hadoop2.7 설치하기
아래 링크를 참고하여 사용자의 PC 혹은 클러스터 환경에 맞게 설치합니다.
참고링크 : https://spark.apache.org/downloads.html
다운로드 링크 : https://spark.apache.org/downloads.html
**[KSB 툴박스를 이용한 설치 방법]**
KSB 툴박스를 동작시킨 상태에서 docker 컨테이너로부터 spark 설정 파일을 복사하여 설치할 수도 있습니다.
먼저 도커에 접속하는 방법을 참고하여 접속합니다. (<ahref="http://csleoss.etri.re.kr:8088/images/contents/manual_1.0/Filezilla.html"> Filezilla를 이용하여 KSB 툴박스 docker 컨테이너에 접속하기 </a>)
도커에 있는 spark-2.3.0-bin-hadoop2.7 폴더를 /home/csle 폴더에 복사합니다.
다운로드 링크 : https://archive.apache.org/dist/hbase/1.2.4/
**[KSB 툴박스를 이용한 설치 방법]**
KSB 툴박스를 동작시킨 상태에서 docker 컨테이너로부터 hbase 설정 파일을 복사하여 설치할 수도 있습니다.
먼저 도커에 접속하는 방법을 참고하여 접속합니다. (<ahref="http://csleoss.etri.re.kr:8088/images/contents/manual_1.0/Filezilla.html"> Filezilla를 이용하여 KSB 툴박스 docker 컨테이너에 접속하기 </a>)
도커에 있는 hbase-1.2.4 폴더를 /home/csle 폴더에 폴더에 복사합니다.
그리고, ssh 포트 정보를 'hbase-env.sh'파일에 추가합니다.
```sh
vi /home/csle/hbase-1.2.4/conf/hbase-env.sh
export HBASE_SSH_OPTS="-p 2243"
```
그리고 심볼릭링크을 설정합니다.
```sh
ln-s /home/csle/hbase-1.2.4 /home/csle/hbase
```
## [Host PC] kafka 2.11-0.10.0.1(optional) 설치하기
아래 링크를 참고하여 사용자의 PC 혹은 클러스터 환경에 맞게 설치합니다.
참고링크 : https://kafka.apache.org/
다운로드 링크 : https://kafka.apache.org/downloads
**[KSB 툴박스를 이용한 설치 방법]**
KSB 툴박스를 동작시킨 상태에서 docker 컨테이너로부터 kafka 설정 파일을 복사하여 설치할 수도 있습니다.
먼저 도커에 접속하는 방법을 참고하여 접속합니다. (<ahref="http://csleoss.etri.re.kr:8088/images/contents/manual_1.0/Filezilla.html"> Filezilla를 이용하여 KSB 툴박스 docker 컨테이너에 접속하기 </a>)
도커에 있는 kafka_2.11-0.10.0.1 폴더를 /home/csle 폴더에 복사합니다.
다운로드 링크 : https://archive.apache.org/dist/zookeeper/zookeeper-3.4.9/
**[KSB 툴박스를 이용한 설치 방법]**
KSB 툴박스를 동작시킨 상태에서 docker 컨테이너로부터 zookeeper 설정 파일을 복사하여 설치할 수도 있습니다.
먼저 도커에 접속하는 방법을 참고하여 접속합니다. (<ahref="http://csleoss.etri.re.kr:8088/images/contents/manual_1.0/Filezilla.html"> Filezilla를 이용하여 KSB 툴박스 docker 컨테이너에 접속하기 </a>)
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: \
![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과 질의 쿼리 내용을 아래와 같이 입력하여 실행합니다.
<li>Docker 기반 KSB 툴박스 환경에서는, KSB 웹툴킷 실행을 위한 기능들이 사전에 설치 되어 있거나 설치 과정에 포함 되어 있으므로, 본 과정이 필요하지 않습니다.</li>
<li>Ubuntu 16.04가 설치된 메모리 16GB 이상 데스트탑이나 노트북이 요구됩니다.</li>
<li>KSB 웹툴킷은 KSB 인공지능 프레임워크를 기반으로 구동됩니다. 따라서 소스를 빌드하고 <ahref="http://startKsbApiServing.sh">startKsbApiServing.sh</a> 를 실행하여 KSB 인공지능 프레임워크를 구동하고 있어야 합니다.</li>
<li>KSB 웹툴킷은 저장소로 HDFS를 사용합니다. 따라서, 저장소로 사용할 PC에 Hadoop 및 관련 소프트웨어가 설치 되어 있어야 합니다. Hadoop을 설치한 후에는 ksb-csle/conf/ksb.conf 파일에서 hadoop.master 정보를 설치한 호스트명으로 설정해 주어야 합니다. 또한 hadoop.hdfs.activated 도 true로 설정해야 정상적으로 HDFS 를 저장소로 이용할 수 있습니다.(기본적으로 true로 설정 되어 있습니다.)</li>
<li>DB에서 한글을 정상적으로 사용하기 위해, 호스트 운영체제의 언어를 한글로 설정 합니다. 변경 하는 방법은 다음 링크를 참고 합니다.<br>
<ahref="https://askubuntu.com/questions/509174/how-can-i-change-the-language-from-english-to-spanish">Ubuntu 언어 변경</a></li>
<li>Postgresql 9.6.8 이상이 설치되어야 합니다.</li>
<li>Pgadmin3 1.22.2 이상이 설치되어야 합니다.</li>
</ul>
<h2class="mume-header"id="ksb-%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5-%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC-db-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0">KSB 인공지능 프레임워크 DB 설치하기</h2>
<p>KSB 인공지능 프레임워크는 프레임워크 사용자 정보, 생성 및 구동된 워크플로우 정보, KSB 웹툴킷에서 이용하는 UI Component 관련 정보를 관리하기 위해 Postgresql DB를 사용 합니다.<br>
Postgresql 설치 버전은 9.6.8 이상를 권장하며, 다음과 같이 설치한 후 재시작합니다.</p>
</pre><h2class="mume-header"id="ksb-%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5-%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC-db-%EC%A0%95%EC%9D%98">KSB 인공지능 프레임워크 DB 정의</h2>
<p>Postgresql 설치가 완료되면, DB에 접속하여 DB 사용자 계정과 권한을 생성하고, SDK 압축파일에 포함된 백업파일(csledb_v1.0.backup)을 이용하여 KSB 인공지능 프레임워크 DB 정보를 restore 합니다.</p>
</pre><h2class="mume-header"id="ksb-%EC%9B%B9%ED%88%B4%ED%82%B7-%ED%9A%8C%EC%9B%90-%EA%B0%80%EC%9E%85-%EA%B8%B0%EB%8A%A5-%ED%99%9C%EC%84%B1%ED%99%94%EB%A5%BC-%EC%9C%84%ED%95%9C-%EC%84%A4%EC%A0%95">KSB 웹툴킷 회원 가입 기능 활성화를 위한 설정</h2>
<p>KSB 웹툴킷은 이메일을 통해 사용자 가입을 처리하도록 되어 있습니다. 이를 위해 관리자의 메일 계정을 설정 하도록 되어 있으며, Gmail 계정을 통해 설정할 수 있습니다. 관리자는 uidb 의 system_configuration 테이블에 자신의 Gmail 계정을 설정할 수 있으며, 사용자가 회원 가입을 신청하면 관련 메일이 관리자의 Gmail 계정을 통해 발송 됩니다.<br>
설정 방법은, KSB 웹툴킷에 관리자 계정(<ahref="mailto:ksbuser@etri.re.kr">ksbuser@etri.re.kr</a>)으로 로그인 하여 Management 메뉴의 System Configuration 탭에서 '<ahref="http://javax.mail.session.prop.id">javax.mail.session.prop.id</a>' property에서 수정아이콘을 클릭하여 Gmail 계정(<ahref="mailto:aaa@gmail.com">aaa@gmail.com</a> 이면 aaa)을 'javax.mail.session.prop.password' 에 Gmail 암호를 입력하고 저장 아이콘을 클릭하여 수정한 사항을 저장 합니다.</p>
<p>이메일의 발송 시, 사용자에게 메일로 안내되는 링크의 ip는 KSB 웹툴킷이 구동중인 서버의 설정을 따릅니다. 만약 localhost로 구동 하였다면, KSB 웹툴킷이 구동중인 서버에서만 가입 절차를 진행할 수 있으므로, 외부에서 접속 가능한 ip로 실행 하시기 바랍니다.</p>
<p>KSB 웹툴킷은 웹컨테이너로 Apache tomcat 7을 이용합니다. <ahref="https://tomcat.apache.org/download-70.cgi">https://tomcat.apache.org/download-70.cgi</a> 사이트에서 binary distribution을 다운로드 받아, 적당한 위치에 압축을 해제 합니다.</p>
<p>본 매뉴얼 에서는 '/home/csle/ui_of_csle/apache-tomcat-7.0.88/' 에<br>
압축을 해제 한 것으로 가정합니다.</p>
<h2class="mume-header"id="tomcat-%EC%84%A4%EC%A0%95-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8">Tomcat 설정 업데이트</h2>
<h3class="mume-header"id="webxml-%ED%8C%8C%EC%9D%BC-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8">web.xml 파일 업데이트</h3>
<p>/home/csle/ui_of_csle/apache-tomcat-7.0.88/conf/ 디렉토리에 있는 web.xml 파일을 열어 UTF-8 설정 및 Session timeout을 조정합니다.</p>
</pre><h2class="mume-header"id="%EC%9B%B9%ED%8C%8C%EC%9D%BC-%EC%84%A4%EC%B9%98-%EB%B0%8F-ksb-%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5-%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC-db-%EC%A0%91%EC%86%8D%EC%A0%95%EB%B3%B4-%EC%84%A4%EC%A0%95">웹파일 설치 및 KSB 인공지능 프레임워크 DB 접속정보 설정</h2>
<p>압축된 SDK에서 /home/csle/ksb-csle/tools/webToolkit_db/csle-web_20181025.war 파일을 /home/csle/ui_of_csle/apache-tomcat-7.0.88/webapps 디렉토리로 복사 합니다.</p>
<p>그리고, csle-web_20181025.war 파일의 이름을 ROOT.war로 변경 합니다.</p>
<h3class="mume-header"id="tomcat-%EC%84%9C%EB%B2%84-%EA%B5%AC%EB%8F%99">Tomcat 서버 구동</h3>
<spanclass="token punctuation">(</span>2018-06-30 12:22:37<spanclass="token punctuation">)</span><spanclass="token operator"><</span>localhost-startStop-1<spanclass="token operator">></span><spanclass="token punctuation">[</span>DEBUG<spanclass="token punctuation">]</span> SQL: SELECT * FROM system_configuration WHERE name <spanclass="token operator">=</span> ?, name: <spanclass="token punctuation">[</span>csle.gw.host<spanclass="token punctuation">]</span><spanclass="token punctuation">(</span>SystemConfigurationDao.java:130<spanclass="token punctuation">)</span>
<spanclass="token punctuation">(</span>2018-06-30 12:22:37<spanclass="token punctuation">)</span><spanclass="token operator"><</span>localhost-startStop-1<spanclass="token operator">></span><spanclass="token punctuation">[</span>DEBUG<spanclass="token punctuation">]</span> SQL: SELECT * FROM system_configuration WHERE name <spanclass="token operator">=</span> ?, name: <spanclass="token punctuation">[</span>csle.gw.port<spanclass="token punctuation">]</span><spanclass="token punctuation">(</span>SystemConfigurationDao.java:130<spanclass="token punctuation">)</span>
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 <spanclass="token keyword">in</span> 5,246 ms
6월 30, 2018 12:22:38 오후 org.apache.coyote.AbstractProtocol start
Currently <spanclass="token keyword">in</span> standby mode.
Number of <spanclass="token function">jobs</span> executed: 0
Using thread pool <spanclass="token string">'org.quartz.simpl.SimpleThreadPool'</span> - with 10 threads.
Using job-store <spanclass="token string">'org.quartz.simpl.RAMJobStore'</span> - <spanclass="token function">which</span> does not support persistence. and is not clustered.
2018-10-22 16:51:13,925 INFO StdSchedulerFactory: Quartz scheduler <spanclass="token string">'DefaultQuartzScheduler'</span> initialized from default resource <spanclass="token function">file</span><spanclass="token keyword">in</span> Quartz package: <spanclass="token string">'quartz.properties'</span>
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_<spanclass="token variable">$_NON_CLUSTERED</span> started.
<spanclass="token punctuation">[</span>INFO<spanclass="token punctuation">]</span><spanclass="token punctuation">[</span>10/22/2018 16:51:13.981<spanclass="token punctuation">]</span><spanclass="token punctuation">[</span>KsbApi-serving-akka.actor.default-dispatcher-3<spanclass="token punctuation">]</span><spanclass="token punctuation">[</span>akka://KsbApi-serving/deadLetters<spanclass="token punctuation">]</span> Message <spanclass="token punctuation">[</span>akka.io.Tcp<spanclass="token variable">$Bound</span><spanclass="token punctuation">]</span> from Actor<spanclass="token punctuation">[</span>akka://KsbApi-serving/user/IO-HTTP/listener-0<spanclass="token comment">#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'.</span>
2018-10-23 08:22:18,351 WARN NativeCodeLoader: Unable to load native-hadoop library <spanclass="token keyword">for</span> your platform<spanclass="token punctuation">..</span>. using builtin-java classes where applicable
</pre><h2class="mume-header"id="ksb-%EC%9B%B9%ED%88%B4%ED%82%B7-%EC%84%A4%EC%A0%95-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8">KSB 웹툴킷 설정 업데이트</h2>
<p>KSB 웹툴킷과 KSB 인공지능 프레임워크는 다음 사용자 정보가 저장되어 있습니다.</p>
<p> User ID: <ahref="mailto:ksbuser@etri.re.kr">ksbuser@etri.re.kr</a> / User Password: <ahref="mailto:ksbuser@etri.re.kr">ksbuser@etri.re.kr</a></p>
<p>Chrome 브라우저(또는 HTML5 표준 호환 브라우저)를 열고 위 사용자 정보를 입력하여 로그인합니다.</p>
<li><ahref="#ksb-%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5-%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC-db-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0">KSB 인공지능 프레임워크 DB 설치하기</a></li>
<li><ahref="#ksb-%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5-%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC-db-%EC%A0%95%EC%9D%98">KSB 인공지능 프레임워크 DB 정의</a></li>
<li><ahref="#ksb-%EC%9B%B9%ED%88%B4%ED%82%B7-db-%EC%A0%95%EC%9D%98">KSB 웹툴킷 DB 정의</a></li>
<li><ahref="#ksb-%EC%9B%B9%ED%88%B4%ED%82%B7-%ED%9A%8C%EC%9B%90-%EA%B0%80%EC%9E%85-%EA%B8%B0%EB%8A%A5-%ED%99%9C%EC%84%B1%ED%99%94%EB%A5%BC-%EC%9C%84%ED%95%9C-%EC%84%A4%EC%A0%95">KSB 웹툴킷 회원 가입 기능 활성화를 위한 설정</a></li>
<li><ahref="#tomcat-%EC%84%A4%EC%A0%95-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8">Tomcat 설정 업데이트</a>
<ul>
<li><ahref="#webxml-%ED%8C%8C%EC%9D%BC-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8">web.xml 파일 업데이트</a></li>
<li><ahref="#serverxml-%ED%8C%8C%EC%9D%BC-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8">server.xml 파일 업데이트</a></li>
</ul>
</li>
<li><ahref="#%EC%9B%B9%ED%8C%8C%EC%9D%BC-%EC%84%A4%EC%B9%98-%EB%B0%8F-ksb-%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5-%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC-db-%EC%A0%91%EC%86%8D%EC%A0%95%EB%B3%B4-%EC%84%A4%EC%A0%95">웹파일 설치 및 KSB 인공지능 프레임워크 DB 접속정보 설정</a>
<ul>
<li><ahref="#tomcat-%EC%84%9C%EB%B2%84-%EA%B5%AC%EB%8F%99">Tomcat 서버 구동</a></li>
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 이상를 권장하며, 다음과 같이 설치한 후 재시작합니다.
또한 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 합니다.
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 인공지능 프레임워크는 다음 사용자 정보가 저장되어 있습니다.
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로 실행 하시기 바랍니다.
UI 기반으로 KSB 인공지능 프레임워크를 사용할 수 있는 KSB 웹툴킷 설치 과정을 설명합니다.
## 설치 요구사항
- Docker 기반 KSB 툴박스 환경에서는, KSB 웹툴킷 실행을 위한 기능들이 사전에 설치 되어 있거나 설치 과정에 포함 되어 있으므로, 본 과정이 필요하지 않습니다.
- Ubuntu 16.04가 설치된 메모리 16GB 이상 데스트탑이나 노트북이 요구됩니다.
- KSB 웹툴킷은 KSB 인공지능 프레임워크를 기반으로 구동됩니다. 따라서 소스를 빌드하고 startKsbApiServing.sh 를 실행하여 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 이상이 설치되어야 합니다.
## KSB 인공지능 프레임워크 DB 설치하기
KSB 인공지능 프레임워크는 프레임워크 사용자 정보, 생성 및 구동된 워크플로우 정보, KSB 웹툴킷에서 이용하는 UI Component 관련 정보를 관리하기 위해 Postgresql DB를 사용 합니다.
Postgresql 설치 버전은 9.6.8 이상를 권장하며, 다음과 같이 설치한 후 재시작합니다.
uidb=# SELECT count(*) FROM template where msg_version = '1.0';
count
-------
23
(1개 행)
```
## 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로 실행 하시기 바랍니다.
## 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을 조정합니다.
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 인공지능 프레임워크는 다음 사용자 정보가 저장되어 있습니다.
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 정보에 반영 합니다.
. (참고사항) 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을 실행합니다.
3대 서버에 마스터 1개, 노드1, 노도2의 쿠버네티스 클러스터를 구성하기 위한 설치 방법을 설명합니다.
각 서버의 호스트 이름 및 IP 는 아래와 같이 가정합니다.
csle1 : 192.168.0.5 (master)
csle2 : 192.168.0.6 (node1)
csle3 : 192.168.0.7 (node2)
## 모든 서버에 공통으로 설치하기
### [모든 서버 공통] java 8 설치하기
<ahref="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 설치 부분을 참고합니다.
### [모든 서버 공통] 기타 우분투 프로그램 설치하기
```sh
sudo apt-get update &&\
sudo apt-get install-y--no-install-recommends apt-utils curl bc jq &&\
[WARNING FileExisting-crictl]: crictl not found in system path
[certificates] Generated ca certificate and key.
[certificates] Generated apiserver certificate and key.
[certificates] apiserver serving cert is signed for DNS names [csle1 kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs [10.96.0.1 129.254.xxx.xxx]
[certificates] Generated apiserver-kubelet-client certificate and key.
[certificates] Generated sa key and public key.
[certificates] Generated front-proxy-ca certificate and key.
[certificates] Generated front-proxy-client certificate and key.
[certificates] Valid certificates and keys now exist in "/etc/kubernetes/pki"
[kubeconfig] Wrote KubeConfig file to disk: "admin.conf"
[kubeconfig] Wrote KubeConfig file to disk: "kubelet.conf"
[kubeconfig] Wrote KubeConfig file to disk: "controller-manager.conf"
[kubeconfig] Wrote KubeConfig file to disk: "scheduler.conf"
[controlplane] Wrote Static Pod manifest for component kube-apiserver to "/etc/kubernetes/manifests/kube-apiserver.yaml"
[controlplane] Wrote Static Pod manifest for component kube-controller-manager to "/etc/kubernetes/manifests/kube-controller-manager.yaml"
[controlplane] Wrote Static Pod manifest for component kube-scheduler to "/etc/kubernetes/manifests/kube-scheduler.yaml"
[etcd] Wrote Static Pod manifest for a local etcd instance to "/etc/kubernetes/manifests/etcd.yaml"
[init] Waiting for the kubelet to boot up the control plane as Static Pods from directory "/etc/kubernetes/manifests".
[init] This might take a minute or longer if the control plane images have to be pulled.
[apiclient] All control plane components are healthy after 46.007752 seconds
[uploadconfig] Storing the configuration used in ConfigMap "kubeadm-config" in the "kube-system" Namespace
[markmaster] Will mark node csle1 as master by adding a label and a taint
[markmaster] Master csle1 tainted and labelled with key/value: node-role.kubernetes.io/master=""
[bootstraptoken] Using token: a96953.b5d1418a5099b5de
[bootstraptoken] Configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials
[bootstraptoken] Configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token
[bootstraptoken] Configured RBAC rules to allow certificate rotation for all node client certificates in the cluster
[bootstraptoken] Creating the "cluster-info" ConfigMap in the "kube-public" namespace
[addons] Applied essential addon: kube-dns
[addons] Applied essential addon: kube-proxy
Your Kubernetes master has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
3대 서버에 마스터 1개, 노드1, 노도2의 쿠버네티스 클러스터를 구성하기 위한 설치 방법을 설명합니다.
각 서버의 호스트 이름 및 IP 는 아래와 같이 가정합니다. 사용자의 클러스터 환경에 맞게 IP를 수정하시기 바랍니다.
csle1 : 192.168.0.5 (master)
csle2 : 192.168.0.6 (node1)
csle3 : 192.168.0.7 (node2)
## 모든 서버에 공통으로 설치하기
### [모든 서버 공통] java 8 설치하기
<ahref="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 설치 부분을 참고합니다.