one of a kind scene

4-2 데이터 처리 기술_분산 컴퓨팅 기술 part2_병렬 쿼리 시스템 본문

ADP/이론

4-2 데이터 처리 기술_분산 컴퓨팅 기술 part2_병렬 쿼리 시스템

specialscene 2019. 12. 22. 23:08

분산 컴퓨팅 기술 part2_병렬 쿼리 시스템(Sawzall, Pig, Hive)

병렬 쿼리 시스템 : 사용자가 MapReduce를 쉽게 사용할 수 있도록 새로운 쿼리 언어로 추상화된 시스템 → Sawzall, pig, Hive 등이 있으며, 실시간 데이터 처리 기술인 SQL on Hadoop과는 다르다

 

1. 병렬 쿼리 시스템의 개요

     • 구글이나 하둡의 MapReduce는 개발자들에게 구현하려는 알고리즘에만 포커싱 할 수 있도록 간단한 프로그래밍 모델을 제공

     • But, MapReduce 코딩도 어려워하는 경우가 발생

     • 따라서, 직접 코딩하지 않고도 쉽고 빠르게 서비스 혹은 알고리즘을 구현하고 적용할 수 있는 환경에 대한 필요성이 대두

     • 사용자에게 친숙한 쿼리 인터페이스를 통해 병렬 처리를 할 수 있는 시스템들이 개발됨

     • 대표적인 예로 구글의 Sawzall, 야후의 Pig, 아파치의 Hive 등이 있음

     • 사용자가 MapReduce를 쉽게 사용할 수 있도록 새로운 쿼리 언어로 추상화된 시스템

 

2. 구글 Sawzall

     • 구글 Sawzall은 MapReduce를 추상화한 최초의 스크립트 형태 병렬 쿼리 언어

     • MapReduce에 대한 이해가 없는 사용자들도 더욱 쉽게 병렬 프로그래밍을 할 수 있게 되었음.

     • Pig나 Hive도 개발배경과 기본적인 개념은 Sawzall과 유사

 

3. 아파치 Pig   

     ① 정의 및 특징

          • 아파치 Pig는 야후에서 개발하였으며, 데이터 처리를 위한 고차원 언어(추상화된 병렬 처리 언어)

          • 네이티브 MapReduce와 비교한 성능이 90% 수준까지 올라옴

 

     ② 개발 배경

          • MapReduce는 큰 틀에서 Map과 Reduce 두 단계로만 이루어진 단순한 병렬 모델이지만, 실제 대부분의 업무는 한번의 MapReduce 작업으로 끝나지 않는 경우가 많음

          • 개발자들이 알고리즘 개발 후 공유가 잘 되지 않아 유사한 알고리즘을 중복 개발하는 경우가 많았음

          • 이로인해 의미적으로는 SQL과 비슷하지만 새로운 언어인 Pig를 정의하게 됨

          • MapReduce는 무공유(Shared Nothing) 구조이기 때문에 일반 RDB로는 쉽게 해결할 수 있는 Join연산을 매우 복잡하게 처리하므로 위 문제를 해결하기 위해 개발자는 약 400라인에 가까운 코드를 프로그래밍 해야함. 하지만, Pig를 이용하면 단 10라인의 코드로 간단히 해결 가능

 

4. 아파치 Hive

     ① 정의 및 특징

          • Hive는 페이스북에서 개발한 데이터 웨어하우징 인프라이며, 하파치 내의 하둡 서브 프로젝트로 등록돼 개발됨

          • Pig와 마친가지로 하둡 플랫폼 위에서 동작, 사용자가 쉽게 사용할 수 있도록 SQL 기반의 쿼리 언어와 JDBC를 지원

          • 아파치 Hive는 맵리듀스의 모든 기능을 지원

 

     ② 개발 배경

          • 페이스북 초기에는 사용 DBMS 기반의 데이터 웨어하우스 시스템 운영

          • 시간이 지나면서 운영데이터는 수백 TB 규모로 늘어나 관리 및 운영비용 절감 필요

          • 상용 DBMS → 하둡 으로 교체하는 과정에서 필요한 기능들을 구현하면서 지금의 Hive라는 시스템이 만들어짐

 

     ③ 하이브 아키텍처

          • 하이브의 구성요소 중에서 MetaStore는 Raw File들의 콘텐츠를 일종의 테이블 내 칼럼처럼 구조화된(Structured) 형태로 관리할 수 있게 해주는 스키마 저장소

          • 별도의 DBS를 설정하지 않으면 Embedded Derby를 기본 데이터베이스로 사용

          • 앞단에 커맨드 라인 인터페이스(CLI)가 있는데, 사용자는 CLI를 통해 Join이나 Group By 같은 SQl 쿼리를 사용

          • 그러면, 파서(Parser)에서 쿼리를 받아 구문을 분석 → MetaStore에서 테이블과 파티션 정보를 참조해 Execution Plan을 만듦

          • Execution Engine은 하둡의 JobTracker와 네임노드와 통신을 담당하는 창구 역할을 하면서 MapReduce 작업을 실행하고 파일을 관리함

          • 아래 그림에서 SerDe라는 것은 Serializer와 Deserializer의 줄임말이며, 테이블의 로우나 칼럼의 구분자 등 저장 포맷을 정의해주는 컴포넌트. 하둡의 InputFormat과 OutputFormat에 해당한다고 볼 수 있음.

<하이브 아키텍처>

      하이브의 언어 모델

DDL
(Data Definition Language)

DML
(Data Manipulation Language)
Query

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

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




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