페이지

2017년 12월 18일 월요일

2. 병렬 쿼리 시스템

구글이나 하둡의 MapReduce는 개발자들에게 구현하려는 알고리즘에만 포커싱할 수 있도록 간단한 프로그래밍 모델을 제공하였다. 비록 간단한 프로그래밍 모델이지만 일부 사용자들에게는 새로운 개념이기 때문에 여전히 휩지 않다. 또한 직접 코딩하지 않고도 쉽고 빠르게 서비스나 알고리즘을 구현하고 적용해 볼 수 있는 환경에 대한 필요성이 대두되었다. 이러한 요구사항을 반영해서 스크립트나 사용자에게 ㅣㅊㄴ숙한 궈리 인터페이스를 통해 병렬 처리할 수 있는 시스템들이 개발됐다. 구글의 Sawzall, 야휴의 Pig등은 이러한 MapReduce 시스템을 사용자가 쉽게 사용할 수 있도록 새로운 ㅝ리 언어로 추상화한 시스템이다.

가. 구글 Sawzall
MapReduce를 추상화한 스크립트 형태의 병렬 프로그래밍 언어다. Sawzall은 사용자가 이해하기 쉬운 인터페이스를 제공하여 MapReduce 개발 생산성을 높였다. 이로써 MapReduce 에 대한 이해가 없는 사용자들도 더욱 쉽게 병렬 프로그래밍을 할 수 있게 되었다.

나. 아파치 Pig
Hadoop MapReduce 위에서 동작하는 추상화된 병렬 처리 언어이며 현재 아파치 하둡의 서브 프로젝트다.
-개발 동기
MapReduce는 Map 과 Reduce 두 단계로 이루어진 단순한 병렬 모델이다. 실제 대부분의 업무는 한 번의 MapReduce 작업으로 끝나는 것이 아니다. Map의 Output이 또 다른 Map의 Input으로들어가야 하고,  Reduce의 Output이 다른 Map의 Input으로 들어가야 하는 Chaining이 되어야 하고, MapReduce 자체적으로는 지원하기가 어려웠다.

그리고 MapReduce 작업 자체가 단순한 모델이라서 개발자들이 유사한 알고리즘들을 중복 개발하는 경우가 많다. 하지만 코드의 특성상 의미 파악이 어려울 수 있어서 공유는 잘 되지 않는 실정이었다. 이러한 요구 사항을 해결하기 위해 의미적으로는 sql과 비슷하지만 새로운 언어인 pig를 정의하게 되었다.

 다. 아파치 하이브
페이스북에서 개발한 데이터 웨어하우징 인프라다. Pig와 마찬가지로 하둡 플랫폼위에서 동작하며, 사용자가 쉽게 사용할 수 있도록 SQL기반의 쿼리 언어와 JDBC를 지원한다. 또한 하둡에게 가장 많이 사용되는ㄴ 병렬처리 기능인 Hadoop-Streaming을 쿼리 내부에 삽입해 사용할 수 있다. 사용자에게 사용 편의성과 성능을 동시에 지원하려 노력한 시도로 보인다.

-개발 배경
페이스북은 사용 DBMS 기반의 데이터 웨어하우스 시스템을 운영하고 있었다. 운영 초기에 데이터는 10GB 정도였지만 시간이 지나면서 수백TB 규모로 늘어났고, 라이선스 등 관리 및 운영비용의 절감의 필요성이 대두되었다. 이에따라 사용 DBMS에서 하둡으로 교체를 결정했으며 교체 과정에서 필요한 기능들, 사용자를 위한 커맨드 라인 인터페이스(CLI), 코딩 없이 애드훅(Ad-hoc)질의를 할 수 있는 기능, 스키마 정보들의 관리 기능들을 하나씩 구현하면서 지금의 하이브라는 시스템이 만들어졌다.

-하이브 아키텍처
하이브의 구성요소 중에서 MetaStore는 Raw File들의 콘텐츠를 일종의 테이블의 컬럼처럼 구조화된(Structured)형태로 관리할 수 있게 해주는 스크마 저장소다. 별도의 DBMS를 설정하지 않으면 Embedded Derby를 기본 데이터베이스로 사용한다. 앞 단에는 커맨드 라인 인터페이스(CLI)가 있는데 사용자는 이 CLI를 통해 Join이나 Group by 같은 SQL쿼리를 한다. 그러면 파서(Parser)에서 쿼리를 받아 구문 분석을 하고, MetaStore에서 테이블과 파티션 정보를 참조해 Execution Plan을 만들어 낸다. 만들어진 이 Plan을 Execution Engine에 보낸다. Execution Engine은 하둡의 JobTracker와 네임노드와 통신을 담당하는 창구역할을 하면서 MapReduce작업을 실행하고 파일을 관리한다. 아래 긞 오른쪽 하단의 SerDe라는 것은 Serializer와 Deserializer의 줄임말이며, 테이블의 로우나 컬럼의 구분자 등 저장 포맷을 정의해주는 컴포넌트다. 하둡의 InputFormat과 OutputFormat에 해당한다고 볼 수 있다.

하이브에서는아래와 같은 언어 모델을 제공한다.

-DDL(Data Definition Language)
테이블 생성(Create Table), 삭제(Drop Table), 변경(Rename Table) 명령
테이블 스키마 변경(Alter Table, Add Column)
테이블 조회(Show Table),스키마 조회(Describe Table)

-DML(Data Manipulation Language)
로컬에서 DFS로 데이터업로드(LOAD DATA)
쿼리 결과를 테이블이나 로컬 파일시스템, DFS에 저장

-Query
Select, Group by, Sort by, Joins, Union, Sub Queries, Sampling, Transform


댓글 없음: