본문 바로가기
데이터분석/ADP

PART02.2장 데이터 처리 기술 ( 분산 컴퓨팅 기술)

by Mr.꾸 2022. 6. 3.
반응형

PART02.2장 데이터  처리 기술 ( 분산 컴퓨팅 기술)


MapReduce


  • 개념 및 특징
    • 구글에서 개발한 분산 병렬 컴퓨팅을 이용하여 대용량 데이터 처리를 위한 소프트웨어
    • 분할 정복(Divide and conquer) 방식
    • Client 수행 작업 단위는 맵리듀스 잡
      1. MapReduce JOB : Map Task + Reduce Task
    • 일반적으로 Map Task 하나가 1개의 블록(64MB)
    • Map 과정에서 생성된 중간 결과물을 사용자가 지정한 개수에 해당하는 Reduce Task가 받아서 정렬 및 필터링 작업
  • 구글 MapReduce
    • 복자 한 기능(연산의 병렬화, 장애 복구 등)을 추상화해 핵심기능 구현에만 집중할 수 있도록 하기 위해 개발
    • 프로그래밍 모델
      1. Map + Reduce 단계
      2. Map의 input : key-value 쌍
      3. 사용자 정의의 Map()을 거치며 다수의 새로운 key, value 생성(로컬에 임시 저장)
      4. reduce에 전송(이 과정에 shuffling과 group by 정렬), key-value의 리스트
    • 실행 과정
      1. MapReduce 작성 및 실행
      2. 마스터는 입력 데이터 소스를 가지고 스케줄링
      3. 여러 개의 파일로 split(split들은 Map프로세스들의 할당 단위)
      4. split 수만큼 Map Task 워커 fork
      5. Output을 로컬에 저장(partitioner라는 Reduce번호 할당하는 클래스를 통해 어떤 Reduce에게 보내질지 정해짐)
        - 동일한 Key들은 같은 Reduce에 배정(일반적으로 key와 해시값을 reduce 개수로 modular)
      6. Map 단계가 끝나면 원격 Reduce 워커가 중간 값을 가져와, reduce 로직 실행
      7. reduce의 개수는 Map의 개수보다 적고, Map의 중간 데이터 사이즈에 따라 성능 좌우
    • MapReduce 모델 적용 적합성
      1. 적합의 경우
        - 분산 Grep이나 빈도수 계산의 작업
        - Map을 거치며 데이터 사이즈가 크게 줄어들어 Reduce의 오버헤드 감소
      2. 부적합의 경우
        - 정렬 같은 작업
        - 입력 데이터가 Map을 거치며 사이즈가 줄지 않아 Reduce의 오버헤드
    • 폴트 톨러런스
      1. Master에게 Task 진행상태 주기적 전송
      2. 복구 시 특정 Task가 죽은 경우 처리해야 할 데이터 정보만 다른 워커에 전달해 Task 재실행
      3. 비공유 아키텍처라 간단한 구조
  • Hadoop MapReduce
    • 아키텍처
      1. 네임 노드 : 마스터 역할
      2. 데이터 노드 : 데이터 입출력 처리
      3. 잡 트래커 : Job을 관리하는 마스터(클러스터에 1개)
      4. 태스크 트래커 : 작업을 수행하는 워커 데몬(각 노드에 1개의 태스크 트래커)
    • MapReduce실행 절차
      1. 스플릿 : 입력 파일을 분리하여, FileSplit당 맵 태스크 할당
      2. 맵 : Map() 적용하여 key-value 쌍 생성
      3. 컴파인 : 리듀스 단계로 보내기 전 중간 결과값들을 처리하여 데이터 크기 감소
      4. 파티션 : key를 기준으로 분할 저장, 각 파티션은 키를 기준을 정렬, 분할된 파일은 각각 다른 Reduce Task 처리
      5. 셔플 : 여러 매퍼의 결과 파일을 각 리듀서에 할당하고, 로컬 파일 시스템으로 복사
      6. 정렬 : Merge Sort방식으로 매퍼 결과 파일을 Key 기준으로 정렬
      7. 리듀스 : 리듀스 함수 적용
    • Output Format은 key, value를 탭으로(변경 가능)
    • 성능
      1. Map에서 Reduce로 넘어가는 과정에 Sort는 항상 발생
      2. sort로 인해 데이터가 커질수록 처리시간은 선형 증가
        - 클러스터 구성 서버의 숫자를 늘린다고 해결되는 문제가 아니라, 플랫폼 자체적으로 선형 확장성을 가지고 있어야 시간을 줄일 수 있다.
      3. sort는 성능과 확장성을 측정할 수 있는 좋은 실험

병렬 쿼리 시스템


  • 개요
    • MapReduce는 여전히 새로운 개념이기에 쉽지 않고, 직접 코딩하지 않고도 쉽고 빠르게 서비스를 적용할 수 있는 환경 필요성
    • 스크립트나 쿼리 인터페이스를 통해 처리를 할 수 있는 시스템 등장
  • 구글 Sawzall
    • MapReduce를 추상화한 최초의 스크립트 언어
  • 아파치 Pig
    • 야후 개발, 추상화된 병렬 처리 언어
    •  
    • 배경
      1. 실제 대부분의 업무는 Map+Reduce 한 번으로 끝나지 않는다
      2. 유사 알고리즘을 중복 개발하는 경우가 많고 공유가 잘 되지 않는다
    • MapReduce는 비공유 구조이기에 join연산을 하기 위해서는 많은 line의 코딩 필요
      -> 코드 길이 1/20 이하, 개발 시간 1/10 이하 감소, 직관적이여 이해 및 공유 쉬움
  • 아파치 하이브
    • 특징
      1. 페이스북 개발
      2. 하둡 플랫폼 위에 동작. SQL 기반 쿼리 언어와 JDBC 지원
      3. 병렬 처리 기능인 Hadoop-Streaming을 쿼리 내부에 삽입 가능
      4. 맵리듀스의 모든 기능 제공
    • 아키텍처
      1. MetaStore : Raw File들의 콘텐츠를 테이블의 칼럼처럼 구조화된 형태로 관리할 수 있게 해주는 스키마 저장소
      2. 일반적으로 Embedded Derby를 기존 DB로 사용
      3. Parser -> Planner -> Execution ->(SerDe)-> 하둡

SQL on 하둡


  • 개요
    • 실시간 처리라는 제약사항을 극복하기 위한.
    • 실시간 SQL 질의 분석 기술
  • 임팔라
    • 개념
      1. 클라우데라 개발
      2. 분석과 트랜젝션 모두 지원, SQL 질의 엔진
      3. C++ 언어 사용
    • 구성요소
      1. 클라이언트 : ODBC / JDBC 클라이언트, 임팔라 쉘 등
      2. 메타 스토어 : 하이브의 메타 스토어 같이 사용
      3. 임팔라 데몬(모든 노드에 구동) : SQL 질의를 받는 질의 실행계획기, 질의 코디네이터, 질의 실행 엔진
      4. 스테이트 스토어 : 임팔라 데몬 상태 체크
      5. 스토리지 : HBase, HDFS 지원
    • 동작 방식
      1. 사용자 질의는 데이터의 지역성을 고려해 노드 전체로 분산 수행
      2. 질의 요청을 받은 코디네이터 데몬은 분산되어 수행된 노드들의 부분 결과를 취합한 후 제공
      3. 라운드 로빈 방식으로 분산시켜, 전 노드들이 코디네이터 역할을 고르게 수행할 수 있도록
    • SQL 구문
      1. 기본적으로 하이브 SQL를 이용하지만 모든 하이브 SQL을 지원하는 것은 아님
        - 데이터 변경 구문 없고, 삭제는 없으나 drop 되면 삭제됨
    • 데이터 모델
      1. 저장 포맷에 따라 성능 차이
        - 로우 단위 : 하나의 칼럼을 읽든 전체 칼럼을 읽든 동일한 I/O
        - 칼럼 단위 : 읽고자 하는 칼럼만큼 I/O 발생하기에 처리 성능 개선 가능
                         로우 단위보다 처리시간이 적임
728x90

댓글