--- 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에 적재 #### Reader HTTP 서버로부터 전달되어 오는 데이터를 입력 받기 위해 **HttpServerReader** 를 드래그 앤 드롭한 후 아래표와 같은 속성을 지정합니다. field |value | 설명 --|---|-- ip | 0.0.0.0 | HTTP 서버의 주소를 입력합니다. port | 53001 | HTTP 서버의 포트번호를 입력합니다. #### Writer **MongodbWriter** 를 드래그앤 드롭한 후 아래표와 같은 속성을 지정합니다. field |value | 설명 --|---|-- serverAddress | localhost:27017 | MongoDB 서버 주소 및 포트 dbName | examples | DB 명 collectionName | data_from_http | 생성할 테이블 명 cleaningDataInconsistency | true | 기존 테이블 삭제 및 재생성 여부 #### Controller **SparkSessionOrStreamController** 를 드래그앤 드롭한 후 아래 표와 같은 속성을 지정합니다. field |value | 설명 --|---|-- setOperationPeriod | 3 | 스트리밍 처리 주기 (초 단위) #### Runner **SimpleSparkRunner** 를 드래그앤 드롭합니다. 디폴트 속성값을 사용합니다. #### Operator 본 예제에서는 스트림 입력을 그대로 MongoDB에 적재하므로 Operator를 사용하지 않습니다. 만약 스트림 입력 데이터를 가공해야 할 경우, 필요한 Operator를 드래그앤 드롭하여 속성값을 지정한 후 사용할 수 있습니다.
![워크플로우 완성 화면](./images/2.5.1_workflow.png) ksbuser@etri.re.kr 계정으로 접속하면 예제 워크플로우가 만들어져있습니다. **HttpToMongodbExample** 을 불러오기하여 사용할 수 있습니다. ![워크플로우 불러오기](./images/2.5.1_workflowLoad.png) ## 워크플로우 실행 및 모니터링하기 ### 워크플로우 실행하기 위에서 작성한 워크플로우를 실행하기 위해서는 워크플로우 편집기 상단의 실행 버튼()을 클릭합니다. 본 예제는 스트림 데이터를 처리하므로 **Batch** 체크 박스를 해제하고 워크플로우를 실행합니다. ![워크플로우 실행화면](./images/2.5.1_workflowStart.png) ### 워크플로우 모니터링 하기 #### 워크플로우 상태 확인 KSB 웹툴킷 상단의 **Monitoring** 메뉴를 클릭하여 진행내역/상태모니터링 화면으로 이동합니다. **Workflow** 탭에서 작성한 워크플로우가 실행 중 (Inprogress)인 것을 확인할 수 있습니다. 이 화면에서 실행 중인 워크플로우를 종료()하거나, 다시 실행()할 수 있습니다. ![워크플로우 동작 상태 확인](./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** 탭에서 실행 중인 워크플로우를 종료()합니다.