빅데이터 이해 중간시험 풀이    (46점 만점)               2017.4.20

 

1. 다음을 빈 칸을 기술하라. (2 x 10 = 20)

(1) ( 스트리밍 데이터(streaming data) )는 동적으로 끊임없이 생성되어 실시간에 준하는 분석이 요구되는 데이터이다.

(2) 맵리듀스(MapReduce) 알고리즘은 (Map),( 셔플(Shuffle) ), 리듀스(Reduce) 3단계로 구성된다.

(3) 하둡 구성의 핵심적인 2 요소는 맵리듀스, ( HDFS(Hadoop Distributed File System) ) 이다.

(4) 하둡 에코 시스템에서 ( 주키퍼(Zookeeper) )는 클러스터의 각 노드들 사이의 서비스들을 관리하고 조정한다. ( 스파크(Spark) )는 분산 컴퓨팅 클러스터 상에서 범용 데이터 분석을 수행하는 프레임워크로 스칼라, 파이썬 자바로 응용들을 작성한다.

(5) 엘라스틱서치의 데이터 구조는 인덱스, 타입, 다큐먼트  단위로 구성된다. 일반적으로 같은 인덱스의 서로 다른 타입들은 서로 다른 ( 매핑 구조 )로 구성된다. ( 멀티테넌시(multi-tenancy) )를 지원하여 여러 인덱스들을 동시에 검색할 수 있다.

(6) 엘라스틱서치에서 색인된 다큐먼트가 실제 저장되고, 검색 시에 구분되는 최소 단위는 ( 샤드(shard) ) 이고, 충돌 관리를 위해 ( 낙관적인 동시성 제어 )를 수행한다.

(7) 다큐먼트의 부분 갱신 시 ( upsert ) 필드를 사용하여 해당 다큐먼트가 존재하지 않으면 몸체에서 정의된 다큐먼트를 생성한다.

 

2.   데이터의 주요 특성에서 다음을 기술하라. (10)

(1)  3가지 주요 특성 3V의 문제를 설명하라.

   3가지 주요 특성으로 규모(volume), 다양성(variety), 속도(velocity) 특성이 있다. 규모(volume)는 테라(Tera) 급 이상의 대규모 데이터 저장의 문제이고, 다양성(variety)은 오디오, 비디오 등과 같은 비구조화된 다양한 데이터를 표현하는 특성이다. 속도(velocity)는 빠른 속도로 생성되는 데이터를 수집하고 처리하는 문제이다.

(2) 3V 문제를 대처하는 Google의 해결 방안을 설명하라.

   상호 연결된 다 수의 저가격 일반 범용 컴퓨터를 클러스터로 연결하고 GFS(google File System)을 사용하여 파일들을 여러 조각으로 분할하여 클러스터의 노드에 배분하였다. 데이터의 저장과 조회를 위해 빅테이블(Bigtable) 이라는 데이터베이스를 개발하였다. GFS에 저장된 데이터 처리를 위해서는 맵리듀스(MapReduce)라는 병렬처리 패러다임을 적용하였다.

 

3. 엘라스틱서치에서 다음을 설명하라. (10)

 (1) 엘라스틱서치의 주요 특징

 분산화되고 확장가능한 실시간 검색 및 분석엔진으로 전문검색과 구조화된 데이터의 실시간 분석이 가능하다. 아파치 루씬(Lucene)을 사용하여 개발하였으며 JSON 문서 기반 저장 및 검색을 하고, HTTP 프로토콜의 RESful API를 지원한다.

(2) ELK 스택 주요 기능

 엘라스틱서치(Elasticsearch, E)는 데이터를 저장하고 검색하며, 로그스태시(Logstash, L)는 데이터를 수집하고 변환하여 전송하며, 키바나(Kibana, K)는 데이트를 시각화하고 리포팅 분석을 한다.

 

4. 아래 예(id=1 인 직원 예)와 같이 직원들의 상세 정보를 색인하여 호스트 192.168.0.10에 저장되어 있다고 가정할 때 다음을 기술하라. (2 x 5 = 10)

 

(1) employee 타입이 모든 다큐먼트 조회 요청

    GET /megacorp/employee/_search

(2) id 3번의 직원의 조회 요청 (완전한 curl 요청으로 기술)

    curl –XGET '192.168.0.10:9200/megacorp/employee/3?pretty'

(3) id 5번의 이름 관련 필드들 일부만을 조회하는 요청

    GET /megacorp/employee/5?_source=first_name,last_name

(4) 성이 Kim 인 직원 검색 요청

     GET /megacorp/employee/_search?q=last_name:Kim
또는
     GET /megacorp/employee/_search
     {
       "query": {
           "match": {

               "last_name": "Kim"

           }
        }
     }

(5) id 7번의 직원 다큐먼트를 부분 갱신하는 요청 (, 몸체(body)는 생략)

     POST /megacorp/employee/7/_update