10장. 일괄 처리
포스트
취소
Preview Image

10장. 일괄 처리

0. 일괄 처리

  • 일괄 처리는 대규모 데이터를 처리하는 중요한 방식으로, 서비스(온라인), 일괄 처리(오프라인), 스트림 처리(준실시간)와 구분한다.
  • 일괄 처리 시스템은 대용량 입력 데이터를 받아 처리하고 결과 데이터를 생산하며, 작업 시간이 길어 사용자의 즉각적인 대기 없이 반복적인 일정으로 수행된다.
  • 주요 성능 지표는 처리량이다.
  • 일괄 처리는 신뢰할 수 있고 확장 가능하며 유지보수하기 쉬운 애플리케이션 구축에 중요한 구성요소 이다.

1. 유닉스 도구로 일괄 처리하기

1.1. 단순 로그 분석

  • cat, awk, sort, uniq, head 등의 명령으로 파이프로 연결하여 로그에서 특정 정보를 추출하고, 정렬 및 집계하는 작업을 수행할 수 있다.
  • 대용량 파일을 효율적으로 처리하며 분석 방법을 쉽게 수정할 수 있는 유연성을 제공한다.
  • 정렬 기반 접근법과 인 메모리 집계(해시 테이블)는 데이터 규모에 따라 효율이 다르다.
  • 유닉스의 sort는 메모리보다 큰 데이터셋도 디스크를 활용하여 처리하고 병렬 정렬을 지원한다.

1.2. 유닉스 철학

  • 유닉스 철학
    • 각 프로그램은 한 가지 일만 잘 수행하도록 작성한다.
    • 프로그램 출력은 다른 프로그램의 입력으로 사용될 수 있다고 생각한다.
    • 소프트웨어를 빠르게 개발하고 개선한다.
    • 반복 작업을 줄이기 위해 도구를 활용해라.
  • 이러한 원칙은 오늘날의 애자일 및 DevOps 문화와 흡사하다.
  • 유닉스 도구는 파일 및 파이프를 통한 동일 인터페이스를 사용하여 쉽게 결합되어 웹이 URL과 HTTP를 통해 서로 다른 사이트를 연결하는 것과 유사하다.
  • 표준 입출력(stdin, stdout) 사용은 로직과 연결을 분리하여 프로그램의 유연성을 높힌다.
  • 유닉스 도구는 입력의 불변성, 중간 출력 확인 기능, 재시작 가능성 등으로 투명성과 실험에 용이하다.

2. 맵리듀스와 분산 파일 시스템

  • 맵리듀스는 유닉스 도구와 유사하지만 수천 대 장비에 분산 실행이 가능하다는 차이가 있다.
  • 맵리듀스 작업은 분산 파일 시스템(HDFS, GlusterFS, QFS 등)을 입출력으로 사용한다.
  • HDFS는 비공유 원칙을 기반으로 하며 데이터 복제를 통해 결함에 대비하고 뛰어난 확장성으로 대규모 데이터 처리가 가능하다.

2.1. 맵리듀스 작업 실행하기

  • 맵리듀스 작업은 입력 레코드를 처리하는 매퍼(Mapper)와 결과를 집계하는 리듀서(Reducer) 함수로 구성된다.
  • 매퍼는 모든 입력 레코드마다 호출되어 키와 값을 추출한다.
  • 리듀서는 같은 키를 가진 값의 집합을 받아 처리하고 출력 레코드를 생산한다.
  • 맵리듀스 프레임워크는 매퍼 출력을 같은 키의 기준으로 모으고 정렬하여 리듀서에 전달한다. (셔플)
  • 맵리듀스는 병렬 처리를 지원하며, 데이터 지역성 원리를 적용하여 처리 효율을 높힌다. 작업 할당 시 코드도 함께 복사된다.

2.2. 리듀스 사이드 조인과 그룹화

  • 일괄 처리에서 조인(join)은 데이터셋 간의 모든 연관 관계를 처리하며, 색인 대신 전체 스캔이 일반적이다.
  • 정렬 병합 조인 - 사용자 활동 이벤트 분석 예시
    • 매퍼에서 조인키를 추출하고 셔플 과정을 통해 같은 키가 레코드를 같은 리듀서로 모은다.
    • 리듀서는 정렬된 레코드를 병합하여 조인 결과를 생성한다.
    • 이 방식은 필요한 데이터를 한 곳에 모아 효율적인 처리를 가능하게 한다.
  • 그룹화
    • SQL의 GROUP BY와 유사하게 특정 키로 레코드를 그룹화하는 연산도 맵리듀스에서 키를 기준으로 데이터를 모아 리듀서에서 집계하는 방식으로 구현된다.
    • 사용자 세션별 활동 이벤트를 수집 분석할 때에도 그룹화를 사용하는데 세션화(sessionization)라고 한다.
  • 쏠림 다루기
    • 린치핀 객체(핫 키)와 같은 데이터 쏠림 현상은 특정 리듀서에 부하를 집중시켜 성능을 저하한다.
    • 쏠림 조인 등의 기법은 핫 키 데이터를 여러 리듀서에 분산시켜 처리함으로써 핫스팟을 완화한다.

2.3. 맵 사이드 조인

  • 리듀서나 정렬 없이 매퍼에서 조인을 수행하여 효율을 높이는 방식이다.
  • 브로드캐스트 해시 조인
    • 작은 데이터셋을 메모리 해시테이블에 적재하고 큰 데이터셋을 스캔하여 조회한다.
    • 작은 데이터셋이 모든 매퍼에 브로드캐스트되는 것과 유사하다.
  • 파티션 해시 조인
    • 조인 입력 두 개를 같으 방식으로 파티셔닝한 후 각 파티션별로 해시 조인을 독립적으로 수행한다.
    • 각 매퍼가 처리할 데이터 양을 줄인다.
  • 맵 사이드 병합 조인
    • 입력 데이터셋이 파티셔닝되고 정렬되어 있다면 매퍼에서 병합 조인을 사용할 수 있다.
    • 입력 데이터의 크기, 정렬, 파티셔닝에 제약이 있으며 데이터셋의 물리적 레이아웃 파악이 중요하다.

2.4. 일괄 처리 워크플로의 출력

  • 일괄 처리 작업의 출력은 보고서 형태 외에 검색 색인 또는 머신러닝/추천 시스템의 기반 데이터베이스 형태를 가진다.
  • 일괄 처리 작업에서 생산된 데이터를 외부 데이터베이스에 직접 기록하는 것은 성능 저하 및 부수 효과 문제로 선호되지 않는다.
  • 일괄 처리 작업 내부에 새로운 데이터베이스 파일을 구축하여 분산 파일 시스템에 저장하고, 이를 읽기 전용으로 제공하는 방식이 좋다.
    • 볼드모트, HBase 벌크 적재 등이 이러한 기능을 제공.
  • 일괄 처리 작업의 출력 철학은 입력의 불변성, 부수 효과 없음, 출력의 완전한 교체 등으로 유지보수 및 복구에 유리하여 실패한 태스크는 안전하게 재시도 된다.

2.5. 하둡과 분산 데이터베이스의 비교

  • 하둡은 유닉스의 분산 버전과 유사하며, MPP(대규모 병렬 처리) 데이터베이스와 비교된다.
  • 저장소의 다양성
    • 하둡의 분산 파일 시스템은 데이터 모델에 제약이 없어 다양한 형태의 데이터를 저장할 수 있으며 스키마 설계는 나중에 고려하여 데이터 수집의 속도를 올릴 수 있다. (데이터 호수(Data lake))
    • MPP 데이터베이스는 데이터를 가져오기 전에 신중한 모델링이 필요하다.
  • 처리 모델의 다양성
    • MPP 데이터베이스는 주로 SQL 분석 질의에 초점을 맞춘다.
    • 하둡은 맵리듀스 외에도 SQL, 머신러닝 등 다양한 처리 모델을 지원하는 유연성이 있다. 동일 클러스터에서 다양한 작업 부하를 지원하여 데이터 이동 없이 처리가 가능하다.
  • 빈번하게 발생하는 결함을 줄이는 설계
    • 맵리듀스는 태스크 실패 시 전체 작업 재수행 없이 개별 태스크 수준에서 복구하며 데이터를 디스크에 자주 기록한다. 태스크 종료가 빈번한 환경에 적합하다. (구글 선점형 스케쥴링)
    • MPP 데이터베이스는 장비 장애 시 전체 질의가 중단되는 경우가 많다.

3. 맵리듀스를 넘어

  • 맵리듀스는 분산 시스템 이해에 유용하지만, 복잡한 구현과 비효율성이 단점이다.
  • 고수준 언어와 API가 이러한 문제를 일부 해결한다.

3.1. 중간 상태 구체화

  • 맵리듀스는 분산 파일 시스템에 중간 상태를 구체화하여 내결함성을 확보하지만 유닉스 파이프에 비해 여러 단점을 가진다.
    • 단점: 느린 수행 시간, 중복 작업, 과도한 I/O
  • 스파크, 테즈 플링크와 같은 데이터플로 엔진은 중간 상태 구체화를 피하고 메모리나 로컬 디스크를 활용하여 효율을 높힌다.
  • 데이터플로 엔진은 전체 워크플로를 하나의 작업으로 다루고, 연산자 간 데이터 흐름을 명시적으로 모델링하며, 맵리듀스보다 유연하고 최적화된 실행을 제공한다.
  • 내결함성은 중간 데이터 재계산이나 체크포인트를 통해 확보하며 연산이 결정적인지 파악하는 것이 중요하다.

3.2. 그래프와 반복 처리

  • 그래프 데이터 처리는 머신러닝, 추천 시스템 등에 중요하며 페이지랭크가 대표적인 알고리즘이다.
  • 많은 그래프 알고리즘은 반복적인 연산을 포함하며, 맵리듀스는 이러한 반복 처리에 비효율적이다.
  • 프리글(Pregel) 모델은 일괄 처리 그래프 처리에 최적화된 모델(벌크 동기식 병렬: BSP)이며 정점 간 메시지 전달 및 반복 간 상태 유지를 통해 효율을 높힌다.
  • 프리글은 체크포인트 저장을 통해 내결함성을 확보하며, 프레임워크가 그래프 파티셔닝 및 메시지 라우팅을 담당한다.

3.3. 고수준 API와 언어

  • 하이브, 피그 등 고수준 언어/API는 맵리듀스 작업 작성을 용이하게 하며, 데이터플로 엔진으로 전환 시 코드 수정 없이 설정 변경만으로 가능할 수 있다.
  • 스파크, 플링크 등도 관계형 연산자 기반의 고수준 데이터플로 API를 제공한다.
  • 고수준 인터페이스는 코드 작성량을 줄이고 대화식 사용을 지원하며, 질의 최적화 기능을 통해 성능을 향상시킨다.
  • 일괄 처리 프레임워크는 임의 코드 실행 유연성을 유지하면서도 선언적 기능을 통합하며 MPP 데이터베이스와 유사해지고 있다.
  • 통계, 수치 알고리즘 머신러닝 등 다양한 분야를 지원하기 위한 전문화된 라이브러리(머하웃)가 개발되고 있다.
  • k 최근접 이웃 알고리즘 같은 공간 알고리즘을 사용하여 머신러닝 애플리케이션(분류, 추천 시스템)등에서 유사도 검색을 위해 사용된다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

09장. 일관성과 합의

-