Apache Hadoop 기초 - Chapter 1 : 하둡의 특징
(하둡 완벽가이드 4판을 공부용으로 정리한 내용입니다.)
100TB짜리 데이터가 있다고 두 가지 방법으로 디스크에 보관을 한다고 가정을 하자.
- 디스크 하나에 100TB 의 데이터가가 모두 있다.
- 100개의 디스크에 1TB씩의 데이터가 나눠져 있다.
100TB의 데이터를 읽을 때 걸리는 시간은 1번의 경우가 2번의 경우보다 100배 더 오래걸릴 것이다. 즉 이것이 데이터 분산시스템의 기본 원리가 된다. 그러나 이 처럼 여러 개의 디스크를 병렬로 사용하여서 이점을 얻으려면 몇 가지 문제를 고려해야 한다.
문제 1: 하드웨어 장애 많은 수의 하드웨어(e.g. 디스크) 를 사용 할수록 장애가 발생할 확률도 하드웨어의 개수만큼 배로 늘어난다. 장애가 일어났을 경우를 대비하여서 여러가지 대비책을 준비해야한다. 일반적인 방법으로는 데이터를 여러 곳에 복제 해 놓는 방법이 있다. 데이터의 복제본을 여러 저장소에 둔다면 하나의 시스템에서 장애가 발생하더라도 복제본을 가지고 있는 시스템에서 바로 이용할수 있게 한다. 이러한 방식을 RAID(Redundant Array of Inexpensive/Independent Disk)라고 한다. 하둡의 파일시스템인 HDFS 는 조금 다른 방식을 사용한다.
문제 2: 분산되어있는 데이터의 결합 문제 각 저장소에 분할되어있는 데이터를 사용하려고 할 때 결합을 해야 사용할 수 있다. 즉 하나의 디스크에서 읽은 데이터를 다른 디스크에서 읽어들인 데이터과 결합을 해야 사용을 할 수 있을지도 모른다는 것이다. 여러 분산 시스템이 데이터의 병합 기능을 제공하지만 정합성(Consistency), 즉 같아야 하는 데이터들이 모순없이 일치해야한다는 것을 지키는 것은 쉽지 않다. 맵 리듀스는 key-value 쌍의 계산으로 변환한 추상화된 프로그래밍 모델을 제공한다. 핵심은 이러하다. “계산이 맵과 리듀스(Map and Reduce)로 분리되어 있고, 그 둘 사이를 혼합 해주는 인터페이스가 있다”. 맵리듀스도 HDFS처럼 안정성을 내장하고 있다.
하둡은 안정적이고 확장성이 높은 저장 및 분석 플랫폼을 제공한다. 기본적으로는 오픈소스이고 범용 하드웨어에서 잘 실행된다.
맵리듀스
맵리듀스의 접근법은 Brute-force 방식처럼 보인다. 맵리듀스의 역할이 한 번의 쿼리로 큰 규모의 데이터셋을 처리하는 것이기 때문이다. 보통 Brute-force 라고하면 효율적이지 못한 원시적인 형태의 알고리즘을 표현할 때 많이 쓰지만 이러한 특징이 맵리듀스의 장점이다. 맵리듀스는 일괄 질의 처리기이다. 전체 데이터셋을 대상으로 비정형(ad hoc) 쿼리를 수행하고 합리적인 시간 내에 그 결과를 보여주는 기능을 가지고 있다.
하둡 에코시스템
맵리듀스의 장점은 일괄 처리 시스템이다. 하지만 대화형 분석에는 적합하지 않은데 하나의 질의를 실행 한후 바로 결과를 받는 것이 불가능 하기 때문이다. 질의 하나 하고 기다렸다가 결과나오면 다시 질의하고 하려면 계속 들여다 보고 있어야하는데 그것이 힘들기 때문이다. 즉 많은 양의 쿼리를 한 번에 주입해서 오프라인으로 돌리는 용도로 적합하다. 하둡은 처음애는 일괄 처리를 위해 만들어졌지만 계속 발전하였다. Hadoop 이라는 단어는 HDFS와 맵리듀스만이 아닌 수많은 에코시스템 프로젝트를 지칭하는 말로 사용되기도 한다. 여러가지 프레임워크들이 생겨나서 Hadoop과 하나의 생태계를 이루었는데 그것을 Hadoop ecosystem이라고 한다. Ecosystem의 대부분은 아파치 소프트웨어 재단에서 관리하고 있다. 온라인 접근을 지원하는 첫 번째 구성요소인 Hbase는 HDFS를 기본 저장소로 하는 key-value 저장소이다. Hbase는 개별 행에 대한 올라인 읽기/쓰기와 쌓인 데이터를 읽고 쓰는 일괄 처리를 모두 지원한다. YARN(Yet Another Resource Negotiator) 은 하둡2의 클러스터 자원 관리 시스템으로, 맵리듀스뿐만 아니라 다른 분산 프로그램도 하둡 클러스터에 저장된 데이터를 처리할 수 있게 해준다.
맵리듀스의 장점은 일괄 처리 시스템이다. 하지만 대화형 분석에는 적합하지 않은데 하나의 질의를 실행 한후 바로 결과를 받는 것이 불가능 하기 때문이다. 질의 하나 하고 기다렸다가 결과나오면 다시 질의하고 하려면 계속 들여다 보고 있어야하는데 그것이 힘들기 때문이다. 즉 많은 양의 쿼리를 한 번에 주입해서 오프라인으로 돌리는 용도로 적합하다. 하둡은 처음애는 일괄 처리를 위해 만들어졌지만 계속 발전하였다. Hadoop 이라는 단어는 HDFS와 맵리듀스만이 아닌 수많은 에코시스템 프로젝트를 지칭하는 말로 사용되기도 한다. 여러가지 프레임워크들이 생겨나서 Hadoop과 하나의 생태계를 이루었는데 그것을 Hadoop ecosystem이라고 한다. Ecosystem의 대부분은 아파치 소프트웨어 재단에서 관리하고 있다. 온라인 접근을 지원하는 첫 번째 구성요소인 Hbase는 HDFS를 기본 저장소로 하는 key-value 저장소이다. Hbase는 개별 행에 대한 올라인 읽기/쓰기와 쌓인 데이터를 읽고 쓰는 일괄 처리를 모두 지원한다. YARN(Yet Another Resource Negotiator) 은 하둡2의 클러스터 자원 관리 시스템으로, 맵리듀스뿐만 아니라 다른 분산 프로그램도 하둡 클러스터에 저장된 데이터를 처리할 수 있게 해준다.
다른 시스템
- 관계형 데이터베이스 관리 시스템 주로 말하는 RDBMS(Relative DataBase Management System) 이다. 맨 처음, 100TB의 데이터를 100개의 디스크에 나눠담아서 성능향상을 기대할 수 가 있다고 했다. 하지만 실제로는 여러 개의 디스크를 가진 데이터베이스를 이용하여 대규모 분석을 수행하는 것은 어렵다. 하둡이 필요한 이유이다. 디스크 드라이브 발전의 특성은 “탐색시간단축의 발전이 전송속도상승의 발전보다 더디다” 이다. 탐색은 데이터를 읽거나 쓸 때 디스크의 헤더를 디스크의 특정 위치로 이동시키는 조작이다. 이런 과정이 탐색시간의 지연과 관계된다. 전송속도는 디스크의 대역폭과 관련있다. 데이터에 접근하는 패턴이 탐색 위주로 이루어진다면 데이터셋의 큰 부분을 읽거나 쓰는 작업은 전송 속도에 좌우되는 스트리밍 조작보다 더 오래걸린다. 반면에 데이터베이스에 있는 일부 레코드를 변경하는 작업은 전통적인 B-트리가 더 적합하다. 데이터베이스의 상당 부분을 변경할 때 B-트리는 데이터베이스를 재구성하기 위해 sort/merge 를 사용해야 하므로 맵리듀스보다 효율저이지 못하다. 관계형 데이터베이스는 비교적 적은 데이터를 여러 번 읽고 쓰면서 지속적으로 변경되는 어플리케이션에 적합하고, 맵리듀스는 비교적 많은 양의 데이터를 한 번만 쓰고 여러 번 읽는데 적합하다. 최근에는 점점 RDBMS와 하둡의 경계가 모호해 지고 교집합이 커지고 있다고 한다. 하둡과 RDBMS 는 데이터셋 내부에서 처리되는 구조의 양에서 차이점이 있다.
정형 데이터(structured data)는 XML 문서나 미리 정의된 특정스키마를 가진 데이터베이스 테이블과 같이 형식이 정의된 항목으로 구조화 되어있다. RDBMS의 영역이다. 반정형 데이터(semi-structured data)는 전형 데이터에 비해 스키마가 유연하거나 심지어 생략될 수 있다. 따라서 데이터구조에 대한 최소한의 규칙만 있으면 된다. 예를 들어 그리드 형태의 셀 구조로 된 스프레드시트. 비정형 데이터(unstructured data)는 어떠한 내부 구조도 없다. 예를들어 일반 텍스트나 이미지 데이터.
하둡은 데이터의 처리시점에서 데이터를 해석하도록 설계되어 있기 때문에 비정형 데이터나 반정형 데이터도 잘 처리할 수 있다. 읽기 시점 스키마(schema-on-read)라 불리는 이러한 특성은 유연성을 제공하고 데이터를 불러오는 비용이 많이 드는 단계도 피할 수 있다. 하둡은 단순히 파일만 복사하면 된다. 관계형 데이터는 무결성을 유지하고 중복을제거 하기위해 주시적으로 정규화를 한다.
하둡은 가능하면 계산 노드에 데이터를 함께 배치한다. 따라서 데이터접근이 빠르다. 이것을 데이터의 지역성(data locality)이라고 하둡 데이터 처리의 핵심이다.