Newer
Older
---
html:
toc: true
offline: true
export_on_save:
html: true
---
# 스트림 데이터 적재하기 (HttpToMongodbExample)
---
HTTP restful 인터페이스를 통해서 스트림으로 입력되는 데이터를 MongoDB에 저장하는 예제를 설명합니다.
## 입력 데이터 준비하기
본 예제에서는 스트림 데이터를 생성해야 합니다. 이를 위해 **KSB 클라이언트 SDK** 를 다운로드 하십시오. 프로젝트에 포함된 테스트 스크립트를 이용하여 시뮬레이션 할 수 있습니다.
- 테스트 스크립트에서 사용하는 ubuntu utility를 설치합니다.
```sh
$ sudo apt-get install curl
```
- 테스트 스트립트가 위치한 디렉터리로 이동합니다.
```sh
$ cd ~/ksb-csle/examples
```
- HTTP 스트림 데이터를 생성합니다.
- HTTP_IP: KSB 인공지능 프레임워크 IP 주소
- HTTP_PORT: 워크플로우 작성시, 입력한 HTTP 서버 포트번호
```sh
$ ./send-data-via-http.sh ${HTTP_IP}:${HTTP_PORT}
```
워크플로우 편집화면을 이용하여 아래의 과정을 통해 워크플로우를 생성합니다.
- 워크플로우 속성
속성 | 값 | 비고
--|---|--
name | HttpToMongodbExample | 워크플로우 이름
description | 스트림 데이터를 MongoDB에 적재하는 예제 | 워크플로우를 설명하는 글
isBatch | false | 스트림 처리를 하는 워크플로우 이므로, false 로 지정
verbose | false | 디버깅을 위해 로그정보를 보고자할 경우, true 로 지정
본 예제에서는 스트림 데이터를 입력받아 처리한 뒤 MongoDB에 적재하므로 **StreamToBatch** 엔진을 드래그앤 드롭합니다.
- 엔진 속성
순번 | 엔진 Type | NickName | RunType | 설명
--|---|---|---|--
1 | StreamToBatch | ProcessingEngine | 즉시실행 | 스트림 데이터를 MongoDB에 적재
HTTP 서버로부터 전달되어 오는 데이터를 입력 받기 위해 **HttpServerReader** 를 드래그 앤 드롭한 후 아래표와 같은 속성을 지정합니다.
field |value | 설명
--|---|--
ip | 0.0.0.0 | HTTP 서버의 주소를 입력합니다.
port | 53001 | HTTP 서버의 포트번호를 입력합니다.
**MongodbWriter** 를 드래그앤 드롭한 후 아래표와 같은 속성을 지정합니다.
field |value | 설명
--|---|--
serverAddress | localhost:27017 | MongoDB 서버 주소 및 포트
dbName | examples | DB 명
collectionName | data_from_http | 생성할 테이블 명
cleaningDataInconsistency | true | 기존 테이블 삭제 및 재생성 여부
**SparkSessionOrStreamController** 를 드래그앤 드롭한 후 아래 표와 같은 속성을 지정합니다.
field |value | 설명
--|---|--
setOperationPeriod | 3 | 스트리밍 처리 주기 (초 단위)
**SimpleSparkRunner** 를 드래그앤 드롭합니다. 디폴트 속성값을 사용합니다.
본 예제에서는 스트림 입력을 그대로 MongoDB에 적재하므로 Operator를 사용하지 않습니다. 만약 스트림 입력 데이터를 가공해야 할 경우, 필요한 Operator를 드래그앤 드롭하여 속성값을 지정한 후 사용할 수 있습니다.
<br>
![워크플로우 완성 화면](./images/2.5.1_workflow.png)
ksbuser@etri.re.kr 계정으로 접속하면 예제 워크플로우가 만들어져있습니다. **HttpToMongodbExample** 을 불러오기하여 사용할 수 있습니다.
![워크플로우 불러오기](./images/2.5.1_workflowLoad.png)
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
### 워크플로우 실행하기
위에서 작성한 워크플로우를 실행하기 위해서는 워크플로우 편집기 상단의 실행 버튼(<span style="color:#000000">▶</span>)을 클릭합니다. 본 예제는 스트림 데이터를 처리하므로 **Batch** 체크 박스를 해제하고 워크플로우를 실행합니다.
![워크플로우 실행화면](./images/2.5.1_workflowStart.png)
### 워크플로우 모니터링 하기
#### 워크플로우 상태 확인
KSB 웹툴킷 상단의 **Monitoring** 메뉴를 클릭하여 진행내역/상태모니터링 화면으로 이동합니다. **Workflow** 탭에서 작성한 워크플로우가 실행 중 (<span style="color:#6698FF">Inprogress</span>)인 것을 확인할 수 있습니다. 이 화면에서 실행 중인 워크플로우를 종료(<span style="color:red">◼</span>)하거나, 다시 실행(<span style="color:#6698FF">▶</span>)할 수 있습니다.
![워크플로우 동작 상태 확인](./images/2.5.1_workflowMonitoring.png)
#### 워크플로우 로그 보기
**WorkFlow History** 탭을 선택하면, KSB 인공지능 프레임워크에서 워크플로우가 동작하며 발생시킨 로그 정보를 확인 할 수 있습니다.
![워크플로우 히스토리](./images/2.5.1_workflowHistory.png)
![워크플로우 동작 로그](./images/2.5.1_workflowLog.png)
## 데이터 적재 결과 확인하기
**입력 데이터 준비하기** 에서 설명한 방법대로
./send-data-via-http.sh를 이용하여 http로 데이터를 전송합니다.
```sh
csle@csle1:~/ksb-csle/examples$ ./send-data-via-http.sh localhost:53001
send data to: localhost:53001
OK! I got it.
```
MongoDB 클라이언트 프로그램을 이용하여, 위에서 발생한 스트림 데이터가 MongoDB에 적재되었는지 확인합니다.
- 먼저 새로운 터미널을 열어 docker 컨테이너에 추가로 접속합니다.
- 그리고, MongoDB 클라이언트 프로그램이 설치된 디렉터리로 이동합니다.
```sh
docker exec -it csle1 bash
csle@csle1:/$ cd /home/csle/mongodb/bin
```
- MongoDB에 접속합니다.
```sh
$ mongo
```
![MongoDB](./images/2.5.1_mongoDB.png)
- 데이터베이스를 확인한 후 선택합니다.
```sh
> show dbs
> use examples
```
![MongoDB](./images/2.5.1_mongoDB3.png)
- 테이블 생성을 확인합니다.
```sh
> show collections
```
![MongoDB](./images/2.5.1_mongoDB4.png)
- 적재된 데이터를 확인합니다.
```sh
> db.data_from_http.find()
```
![MongoDB](./images/2.5.1_mongoDB5.png)
## 워크플로우 종료하기
본 예제는 지속적으로 스트림데이터가 입력되므로 사용자가 워크플로우를 종료해야 합니다.
KSB 웹툴킷 상단의 **Monitoring** 메뉴를 클릭하여 진행내역/상태모니터링 화면으로 이동합니다. **Workflow** 탭에서 실행 중인 워크플로우를 종료(<span style="color:red">◼</span>)합니다.