1장 하둡 기초
Part 1. 하둡과의 만남
우리에게 필요한 것은 커다란 한 대의 컴퓨터가 아니라 매우 많은 컴퓨터로 이뤄진 새로운 시스템이다. - 그레이스 호퍼(Grace Hopper)
분산 시스템의 등장으로 우리에게 필요한 것은 좋은 한 대의 컴퓨터가 아니라 평균적인 매우 많은 컴퓨터 저비용 고효율을 따라간 어떻게 보면 당연한 이치
1.1 데이터!
제타바이트=1000 엑사바이트=100만 페타바이트=10억 테라바이트
데이터가 많다.
1.2 데이터 저장소와 분석
예전에는 읽는 속도에 비해 저장되는 데이터가 작아서 문제가 되지 않았지만 지금은 워낙 큰 데이터를 저장하기 때문에 읽기도 느리지만 쓰는건 더 느리다. 하지만 일을 나눠서 병렬로 처리하면 큰 데이터도 빠르게 처리할 수 있다.
하지만 나눠서 저장하는 것은 문제 없지만 각 저장소에 저장된 데이터를 읽어들여서 하나로 종합할 때 정합성이 문제가 된다.
하둡은 맵리듀스로 디스크에서 데이터를 읽고 쓰는 문제를 키-값 쌍의 계산으로 변환한 추상화된 프로그래밍 모델을 제공한다. 여기서 핵심은 계산이 맵과 리듀스로 분리 되어 있고, 그 둘 사이를 혼합해 주는 인터페이스가 있다는 점이다.
1.3 전체 데이터에 질의하기
맵리듀스, 한 번의 쿼리로 전체나 상당한 규모의 데이터셋을 처리하는 것
1.4 일괄 처리를 넘어서
맵리듀스 강점은 기본적으로 일괄 처리 시스템이라는 것이다. 이는 질의를 실행한 후 수 초 이내에 결과를 받는 것은 불가능하여 대화형 분석에는 적합하지 않다는 것이다.
하둡은 이제 하둡 에코 시스템을 포함한 용어로 쓰인다. 하둡 에코시스템은 분산 컴퓨팅과 대규모 데이터 처리를 위한 기반 시설이다.
- HBase
- HDFS를 기본 저장소로 하는 키-값 저장소다.
- 온라인 접근을 지원하는 첫 번째 구성요소
- 개별 행에 대한 온라인 읽기/쓰기
- 산적한 데이터를 읽고 쓰는 일괄 처리 지원
- YARN(Yet Another Resource Negotiator)
- 클러스터 자원 관리 시스템
- 맵리듀스 뿐만 아니라 어떤 분산 프로그램도 하둡 클러스터에 저장된 데이터를 처리할 수 있게 해준다.
하둡 기반 다양한 처리 패턴
-
대화형 SQL
-
맵리듀스 대신 장기 실행 전용 데몬(임팔라) 엔진 사용
-
컨테이너를 재사용하는 (테즈 기반의 하이브) 분산 쿼리 엔진 사용
대용량 데이터셋에 대한 확장성이 있으면서 하둡 기반의 SQL 쿼리를 실행할 때 빠른 응답 속도를 갖는다.
-
-
반복 처리
- 머신러닝과 같은 다수의 알고리즘은 근본적으로 반복 연산
- 메모리에 임시 작업 데이터셋을 보존하여 디스크에서 읽는 수고를 줄임
- 맵리듀스는 안되지만 스파크를 사용하면 데이터셋을 탐색하는 방식의 작업을 허용한다.
- 머신러닝과 같은 다수의 알고리즘은 근본적으로 반복 연산
-
스트림 처리
- 스톰 (Storm)
- 스파크 스트리밍(Spark Streaming)
- 삼자(Samza)
실시간 실행되고 경계가 없는 스트림 데이터를 분산 계산하여 그 결과를 하둡 저장소나 외부 시스템에 보낼 수 있다.
-
검색
- 솔라(Solr)
- 문서를 색인하여 HDFS에 저장하고 HDFS에 저장된 색인을 기반으로 검색 쿼리를 제공한다.
- 솔라(Solr)
1.5 다른 시스템과의 비교
1.5.1 관계형 데이터베이스 관리 시스템
여러 개의 디스크를 가진 데이터베이스를 이용해 대규모 분석을 할 수 없는 이유는
- 디스크 드라이브의 하드웨어적 문제
- 탐색은 데이터를 읽거나 쓸 때 디스크의 헤더를 디스크 특정 위치로 이동시키는 조작
- 전송 속도는 디스크의 대역폭과 관련
위의 이유로
맵리듀스
-
대규모 일괄 처리에 적합
-
한번 쓰고 여러번 읽는 애플리케이션에 적합
RDBMS
-
작은 양의 데이터를 빠른 시간에 추출, 변경 위해 데이터셋 색인 (특정 쿼리와 데이터 변경에 적합)
-
지속적으로 변경되는 데이터셋에 적합
하둡 Vs RDBMS
- 데이터 종류
- 정형 데이터
- 반정형 데이터
- 비정형 데이터
하둡은 처리 시점에 데이터를 해석(schema-on-read) 하도록 설계되어 있기 때문에 미리 스키마에 대한 정의 없이 저장이 용이하다.
-
데이터 처리 속도
하둡은 데이터 크기에 반비례, 클러스터 크기에 비례. 하지만 일반적으로 관계형 데이터베이스 SQL 쿼리는 그렇지 못하다.
1.5.2 그리드 컴퓨팅
네트워크 클러스터는 SAN으로 공유 파일시스템의 대용량 데이터에 접근 할 때 네트워크 대역폭 때문에 병목 현상이 생기고 계산 노드가 놀게 되는 문제가 발생한다. 이에 반해 하둡은 가능하면 계산 노드에 데이터를 함께 배치한다. (데이터 지역성 Data locality)
MPI (Message Passing Interface)는 개발자에게 큰 제어권을 주지만, 저수준 C 루틴과 소켓과 같은 구성요소를 통해 데이터 흐름의 메커니즘을 명확하게 다룰 것을 요구한다. 하지만 하둡은 최상위 수준에서 맵리듀스의 키-값과 같은 데이터 모델의 관점에서만 생각하면 된다.
맵리듀스는 태스크 간의 상호 의존성이 없는 비공유 아키텍처
1.5.3 자발적 컴퓨팅
SETI(Search for Extra-Terrestrial Intelligence)는 전파망원경의 데이터를 분석하여 외계의 지적 생명체에 대한 신호를 얻기 위해 자원봉사자들의 컴퓨터가 쉬고 있을 때 CPU의 연산력을 사용한다.
맵리듀스는 높은 네트워크 대역폭의 단일 데이터 센터에 신뢰성 높은 전용 하드웨어에서 수 분 또는 수 시간 내에 잡을 실행 할 수 있도록 설계 되었다.
이와 달리 SETI는 연결 속도가 가변적이고 데이터 지역성이 없는 신뢰할 수 없는 머신에서 오랜 시간이 걸리는 계산을 실행한다.(작업의 신뢰성을 위해 각 작업 단위는 다른 세대의 컴퓨터에 보내지고, 적어도 두 개의 결과가 같아야 그 결과를 인정 받는다.)
1.6 아파치 하둡의 간략한 역사
Apache Lucene - 더그 커팅
- 2002년 Apache Nutch
- 2003년 GFS(Google File System)
- 2004년 NDFS(Nutch Distributed FileSystem)
- 2004년 맵리듀스