[빅데이터를 지탱하는 기술]을 읽고-3.빅데이터의 분산 처리
3.빅데이터의 분산 처리
3-1.대규모 분산 처리의 프레임워크
| 구조화 데이터와 비구조화 데이터
- 구조화된 데이터 : 스키마가 명확히 정의된 데이터
ex)기존의 데이터웨어하우스의 데이터- 비구조화된 데이터 : 스키마가 없는 데이터
ex) 텍스트 데이터,이미지 및 동영상등의 미디어 데이터데이터레이크 비구조화 데이터를 분산 스토리지등에 저장하고 그것을 분산 시스템에서 처리하는것이 데이터레이크의 개념이다.
- 스키마리스 데이터 : 기본 서식은 있지만,스키마가 정의 안됨
CSV,JSON,XML등의 데이터는 서식은 정해져 있지만, 칼럼 수나 데이터형은 명확하지 않아 '스키마리스 데이터'라고 불림
- 데이터 구조화의 파이프라인 : 테이블형식으로 열 지향
스토리지에 장기 보존 1.분산 스토리지의 데이터의 스키마를 명확하게 한 테이블 형식의 '구조화 데이터'로 변환한다. (분산 스토리지에 수집된 데이터는 명확한 스키마를 갖지 않은 것도 많으므로,그대로 SQL로 집계할 수 없다.) 2.구조화 데이터는 열 지향 스토리지로 저장한다. (데이터의 압출율을 높이기 위해) ex)MPP데이터베이스로 전송하거나 Hadoop상에 열 지향 스토리지에 보관 팩트테이블: 구조화된 데이터 중 시간에 따라 증가하는 데이터 그에 따른 부속 데이터를 디멘젼 테이블로 취급
- 열 지향 스토리지 작성 :분산 스토리지 상에 작성해 효율적으로 데이터를 집계
| Hadoop-분산 데이터 처리의 공통 플랫폼
- Hadoop은 단일 소프트웨어가 아니라 분산 시스템을 구성하는 다수의 소프트웨어로 이루어진 집합체다.
분산 시스템의 구성 요소 HDFS,YARN,MapReduce
- Hadoop의 기본 구성 요소
1.HDFS (분산 파일 시스템)
2.YARN (리소스 관리자)
3.MapReduce (분산 데이터 처리의 기반)분산 파일 시스템과 리소스 관리자 HDFS,YARN
HDFS: Hadoop에서 처리되는 데이터 대부분은 HDFS에 저장된다. =>네트워크에 연결된 파일 서버와 같은 존재지만, 다수의 컴퓨터에 파일을 복사하여 중복성을 높인다는 특징이 있다. YARN: CPU나 메모리 등의 계산 리소스는 YARN에 의해 관리된다. =>애플리케이션이 사용하는 CPU코어와 메모리를 '컨테이너' 단위로 관리한다. =>클러스터 전체의 부하를 보고 비어 있는 호스트부터 컨테이너를 할당한다. =>실행의 우선순위를 결정할 수 있다.
분산 데이터 처리 및 쿼리 엔진 MapReduce,Hive
MapReduce
분산 시스템에서 데이터 처리를 실행하는 데 사용된다.
(임의의 자바 프로그램을 실행시킬 수 있기 때문에, 비구조화 데이터를 가공하는데 적합)Hive
쿼리 엔진 중 하나이며,쿼리를 자동으로 MapReduce 프로그램으로 변환하는 소프트웨어=> MapReduce와 Hive 모두 대량의 데이터 처리 및 시간이 걸리는 배치 처리에는 적합하나,애드 혹 쿼리에는 부적합하다.
- Hive on Tez
Hive를 가속화하기 위한 노력의 하나로 개발된것이
Apach Tez
다.기존에 MapReduce 프로그램에서는 1회의 스테이지가 끝날 때까지 다음의 처리를 진행 할 수 없었다. => Tez에서는 종료를 기다리지 않고 처리가 끝난 데이터를 차례대로 전달함으로써 쿼리 전체 실행
요약
HDFS:분산 시스템의 스토리지를 관리하여 데이터가 항상 여러 컴퓨터에 복사되도록 한다. YARN:CPU와 메모리를 관리하고 리소스에 여유가 있는 컴퓨터에서 프로그램을 실행한다. MapReduce:데이터 처리의 스테이지가 바뀔 때 대기시간이 있어서 복잡한 쿼리에서는 대기 시간만 증가함 Tez:불필요한 단계가 감소하여 처리가 짧아짐과 동시에, 스테이지 사이의 대기 시간이 없어 처리 전체가 동시에 실행되며 실행 시간이 단축됨 Spark:중간 데이터를 디스크에 쓰지 않고 메모리에 보존한다. 따라서 프로그램 실행 중 많은 메모리가 필요하지만, 실행 시간은 단축된다. 장애 등으로 중간 데이터를 잃어버려도, 입력 데이터로 다시 실행한다.
대화형 쿼리 엔진 Impala와 Presto
Presto와 Impala와는 YARN과 같은 리소스 관리자를 사용하지 않고,SQL의 실행만 특화한 독자적인 분산 처리를 구현하고 있다. =>가능한 한 많은 데이터의 처리를 병력화함으로써 고속화를 실현한다.
| Spark 인 메모리 형의 고속 데이터 처리
- Spark의 특징
1.대량의 메모리를 활용하여,고속화 실현
2.'가능한 많은 데이터를 메모리상에 올린 상태로 두어,
디스크에는 아무것도 기록하지 않는다'는 것이 현실화됨
- MapReduce 대체하기
1.Spark는 Hadoop을 대체하는 것이 아니라 MapReduce를 대체하는 존재다.
2.Spark의 실행은 자바 런타임이 필요하지만,
데이터 처리는 스크립트 언어를 사용할 수도 있다.
3.대규모 배치 처리뿐만 마니라, SQL에 의한 대화형 쿼리 실행과 실시간 스트림 처리에 모두 사용됨3-2.쿼리 엔진
| 데이터 마트 구축의 파이프라인
1.분산 스토리지에 저장된 데이터 구조화, 열 지향 스토리지 형식으로 저장 (다수의 텍스트 파일을 읽어 가공하는 부하가 큰 처리가 되므로, Hive 이용) 2.완성한 구조화 데이터를 결합,집계하고 비정규화 테이블로 데이터 마트에 써서 보냄 (열 지향 스토리지를 이용한 쿼리의 실행에는 Pesto를 사용함으로서,실행 시간 단축) 3.Hive에서 만든 각 테이블의 정보는 'Hive 메타 스토어'라고 불리는 특별한 데이터베이스에 저장된다. (다른 쿼리엔진에서도 공통의 테이블 정보로 참고된다)
| Hive에 의한 구조화 데이터 작성
Hive의 쿼리를 개선하는 방법 1.서브 쿼리 안에서 레코드 수 줄이기 => 서브 쿼리 안에서 팩트 테이블을 작게 하는 것이 더 효율적! 2.데이터의 편차를 최대한 없애고, 모든 데이터가 균등하게 분산되도록 하기
| 대화형 쿼리 엔진 Presto의 구조
Presto의 특징 1.플러그인 가능한 스토리지 설계 2.다수의 컴퓨터에서 실행되는 분산 시스템 3.하나의 코디네이터와 여러 워커로 구성된다. (코디네이터 : 쿼리를 분석하고,실행 계획을 수립 워커:처리를 분해) 4.Hive에 등록된 테이블을 가져올 수 있다. =>Hive에서 만든 구조화 데이터를 좀 더 집계하는 등의 목적에 적합 5.ORC 형식 로드에 최적화됨
CPU 처리의 최적화 - 읽기와 코드 실행 병렬 처리
Presto는 쿼리를 분석하여 최적의 실행 계획을 생성
=> 자바의 바이트 코드로 변환
=>바이트 코드는 Pesto의 워커 노드에 배포됨
=> 런타임 시스템에 의해 기계 코드로 컴파일된다.인 메모리 처리에 의한 고속화
(쿼리 실행에는 가급적 대화형 쿼리 엔진 사용)
Presto는 쿼리의 실행 과정에서 디스크에 쓰기를 하지 않는다.
=>모든 데이터 처리를 메모리상에서 실시하고
메모리가 부족하면 기다리거나 오류로 실패한다.분산 결합과 브로드캐스트 결합
Presto는 기본적으로
분산 결합
을 실시한다.분산 결합에서는 노드 간의 데이터 전송을 위한 네트워크 통신이 발생하기 때문에 종종 쿼리의 지연을 초래 한쪽 테이블이 충분히 작은 경우에는 '브로드캐스트 결합'사용 =>처리 속도를 크게 고속화 할 수 있다. (결합하는 테이블의 모든 데이터가 각 노드에 복사된다. Presto에서 브로드캐스트 결합을 유효로 하려면 분산 결합을 명시적으로 무효화해야 한다. 또한 쿼리 안의 SELECT문으로 먼저 팩트 테이블을 지정하여, 그것에 디멘전 테이블을 결합해야 한다.
| 데이터 분석의 프레임워크 선택하기
MPP데이터베이스 (완성한 비정규화 테이블의 고속 집계에 적합하다.) Hive (데이터양에 좌우되지 않는 쿼리 엔진) =>텍스트 데이터를 가공하거나 열 지향 스토리지를 만드는 등 무거운 처리는 Hive에서 실행하는것이 적합하다. Presto (속도 중시 & 대화식으로 특화된 쿼리 엔진 ) =>대화식 쿼리의 실행에 특화되어,텍스트 처리가 중심이고 ETL프로세스 및 데이터 구조화에는 적합하지 않다. Spark (분산 시스템을 사용한 프로그래밍 환경) Spark의 장점은 ETL프로세스에서 SQL까지 일련의 흐름을 하나의 데이터 파이프라인으로 기술할 수 있다는 점이다.
3-3.데이터 마트의 구축
| 팩트 테이블 -시계열 데이터 축적하기
- 팩트 테이블 작성 방법
1.추가
새로 도착한 데이터만을 증분으로 추가
2.치환
과거의 데이터를 포함하여 테이블 전체를 치환한다.테이블 파티셔닝 - 물리적인 파티션으로 분할
테이블 파티셔닝
하나의 테이블을 여러 물리적인 파티션으로 나눔으로써 파티션 단위로 정리하여 데이터를 쓰거나 삭제할 수 있도록 쓰는 것이다.데이터 마트의 치환
| 집계 테이블 - 레코드 수 줄이기
- 카디널리티
각 칼럼이 취하는 값의 범위| 스냅샷 테이블 -마스터의 상태를 기록하기
- 마스터 데이터처럼 업데이트될 가능성이 있는 테이블
1.스냅샷 테이블
정기적으로 테이블을 통째로 저장하는 방법
2.이력 테이블
변경 내용만을 저장하는 방법