반응형
PART02.2장 데이터 처리 기술 ( 분산 컴퓨팅 기술)
MapReduce
- 개념 및 특징
- 구글에서 개발한 분산 병렬 컴퓨팅을 이용하여 대용량 데이터 처리를 위한 소프트웨어
- 분할 정복(Divide and conquer) 방식
- Client 수행 작업 단위는 맵리듀스 잡
- MapReduce JOB : Map Task + Reduce Task
- 일반적으로 Map Task 하나가 1개의 블록(64MB)
- Map 과정에서 생성된 중간 결과물을 사용자가 지정한 개수에 해당하는 Reduce Task가 받아서 정렬 및 필터링 작업
- 구글 MapReduce
- 복자 한 기능(연산의 병렬화, 장애 복구 등)을 추상화해 핵심기능 구현에만 집중할 수 있도록 하기 위해 개발
- 프로그래밍 모델
- Map + Reduce 단계
- Map의 input : key-value 쌍
- 사용자 정의의 Map()을 거치며 다수의 새로운 key, value 생성(로컬에 임시 저장)
- reduce에 전송(이 과정에 shuffling과 group by 정렬), key-value의 리스트
- 실행 과정
- MapReduce 작성 및 실행
- 마스터는 입력 데이터 소스를 가지고 스케줄링
- 여러 개의 파일로 split(split들은 Map프로세스들의 할당 단위)
- split 수만큼 Map Task 워커 fork
- Output을 로컬에 저장(partitioner라는 Reduce번호 할당하는 클래스를 통해 어떤 Reduce에게 보내질지 정해짐)
- 동일한 Key들은 같은 Reduce에 배정(일반적으로 key와 해시값을 reduce 개수로 modular) - Map 단계가 끝나면 원격 Reduce 워커가 중간 값을 가져와, reduce 로직 실행
- reduce의 개수는 Map의 개수보다 적고, Map의 중간 데이터 사이즈에 따라 성능 좌우
- MapReduce 모델 적용 적합성
- 적합의 경우
- 분산 Grep이나 빈도수 계산의 작업
- Map을 거치며 데이터 사이즈가 크게 줄어들어 Reduce의 오버헤드 감소 - 부적합의 경우
- 정렬 같은 작업
- 입력 데이터가 Map을 거치며 사이즈가 줄지 않아 Reduce의 오버헤드
- 적합의 경우
- 폴트 톨러런스
- Master에게 Task 진행상태 주기적 전송
- 복구 시 특정 Task가 죽은 경우 처리해야 할 데이터 정보만 다른 워커에 전달해 Task 재실행
- 비공유 아키텍처라 간단한 구조
- Hadoop MapReduce
- 아키텍처
- 네임 노드 : 마스터 역할
- 데이터 노드 : 데이터 입출력 처리
- 잡 트래커 : Job을 관리하는 마스터(클러스터에 1개)
- 태스크 트래커 : 작업을 수행하는 워커 데몬(각 노드에 1개의 태스크 트래커)
- MapReduce실행 절차
- 스플릿 : 입력 파일을 분리하여, FileSplit당 맵 태스크 할당
- 맵 : Map() 적용하여 key-value 쌍 생성
- 컴파인 : 리듀스 단계로 보내기 전 중간 결과값들을 처리하여 데이터 크기 감소
- 파티션 : key를 기준으로 분할 저장, 각 파티션은 키를 기준을 정렬, 분할된 파일은 각각 다른 Reduce Task 처리
- 셔플 : 여러 매퍼의 결과 파일을 각 리듀서에 할당하고, 로컬 파일 시스템으로 복사
- 정렬 : Merge Sort방식으로 매퍼 결과 파일을 Key 기준으로 정렬
- 리듀스 : 리듀스 함수 적용
- Output Format은 key, value를 탭으로(변경 가능)
- 성능
- Map에서 Reduce로 넘어가는 과정에 Sort는 항상 발생
- sort로 인해 데이터가 커질수록 처리시간은 선형 증가
- 클러스터 구성 서버의 숫자를 늘린다고 해결되는 문제가 아니라, 플랫폼 자체적으로 선형 확장성을 가지고 있어야 시간을 줄일 수 있다. - sort는 성능과 확장성을 측정할 수 있는 좋은 실험
- 아키텍처
병렬 쿼리 시스템
- 개요
- MapReduce는 여전히 새로운 개념이기에 쉽지 않고, 직접 코딩하지 않고도 쉽고 빠르게 서비스를 적용할 수 있는 환경 필요성
- 스크립트나 쿼리 인터페이스를 통해 처리를 할 수 있는 시스템 등장
- 구글 Sawzall
- MapReduce를 추상화한 최초의 스크립트 언어
- 아파치 Pig
- 야후 개발, 추상화된 병렬 처리 언어
- 배경
- 실제 대부분의 업무는 Map+Reduce 한 번으로 끝나지 않는다
- 유사 알고리즘을 중복 개발하는 경우가 많고 공유가 잘 되지 않는다
- MapReduce는 비공유 구조이기에 join연산을 하기 위해서는 많은 line의 코딩 필요
-> 코드 길이 1/20 이하, 개발 시간 1/10 이하 감소, 직관적이여 이해 및 공유 쉬움
- 아파치 하이브
- 특징
- 페이스북 개발
- 하둡 플랫폼 위에 동작. SQL 기반 쿼리 언어와 JDBC 지원
- 병렬 처리 기능인 Hadoop-Streaming을 쿼리 내부에 삽입 가능
- 맵리듀스의 모든 기능 제공
- 아키텍처
- MetaStore : Raw File들의 콘텐츠를 테이블의 칼럼처럼 구조화된 형태로 관리할 수 있게 해주는 스키마 저장소
- 일반적으로 Embedded Derby를 기존 DB로 사용
- Parser -> Planner -> Execution ->(SerDe)-> 하둡
- 특징
SQL on 하둡
- 개요
- 실시간 처리라는 제약사항을 극복하기 위한.
- 실시간 SQL 질의 분석 기술
- 임팔라
- 개념
- 클라우데라 개발
- 분석과 트랜젝션 모두 지원, SQL 질의 엔진
- C++ 언어 사용
- 구성요소
- 클라이언트 : ODBC / JDBC 클라이언트, 임팔라 쉘 등
- 메타 스토어 : 하이브의 메타 스토어 같이 사용
- 임팔라 데몬(모든 노드에 구동) : SQL 질의를 받는 질의 실행계획기, 질의 코디네이터, 질의 실행 엔진
- 스테이트 스토어 : 임팔라 데몬 상태 체크
- 스토리지 : HBase, HDFS 지원
- 동작 방식
- 사용자 질의는 데이터의 지역성을 고려해 노드 전체로 분산 수행
- 질의 요청을 받은 코디네이터 데몬은 분산되어 수행된 노드들의 부분 결과를 취합한 후 제공
- 라운드 로빈 방식으로 분산시켜, 전 노드들이 코디네이터 역할을 고르게 수행할 수 있도록
- SQL 구문
- 기본적으로 하이브 SQL를 이용하지만 모든 하이브 SQL을 지원하는 것은 아님
- 데이터 변경 구문 없고, 삭제는 없으나 drop 되면 삭제됨
- 기본적으로 하이브 SQL를 이용하지만 모든 하이브 SQL을 지원하는 것은 아님
- 데이터 모델
- 저장 포맷에 따라 성능 차이
- 로우 단위 : 하나의 칼럼을 읽든 전체 칼럼을 읽든 동일한 I/O
- 칼럼 단위 : 읽고자 하는 칼럼만큼 I/O 발생하기에 처리 성능 개선 가능
로우 단위보다 처리시간이 적임
- 저장 포맷에 따라 성능 차이
- 개념
728x90
'데이터분석 > ADP' 카테고리의 다른 글
PART03.1장 데이터 분석 기획의 이해(분석기획 방향성 도출) (0) | 2022.06.03 |
---|---|
PART02.2장 데이터 처리 기술( 클라우드 인프라 기술) (0) | 2022.06.03 |
PART02-2장. 데이터 처리기술 ( 분산 데이터 저장 기술) (0) | 2022.06.03 |
PART02-1장. 데이터 처리 프로세스 (0) | 2022.06.03 |
관련 용어 설명 (0) | 2022.06.03 |
댓글