3-1 구조화 데이터와 비구조화 데이터
- 스키마 : 테이블의 칼럼 명과 데이터형, 테이블 간의 관계
- 구조화된 데이터 : 스키마가 명확하게 정의된 데이터
- 비구조화 데이터 : 자연 언어로 작성된 텍스트 데이터, 이미지, 동영상 등의 미디어 데이터, SQL로 제대로 집계할 수 없다.
- 데이터 레이크 : 비구조화 데이터를 분산 스토리지 등에 저장하고 이것을 분산 시스템에서 처리한다
- 스키마리스 데이터 : 서식은 정해져 있지만, 칼럼 수나 데이터형은 명확하지 않은 데이터
CSV, JSON, XML 등의 예가 있다.
데이터 구조화의 파이프 라인 : 데이터 소스 -> 비구조화 데이터/스키마리스 데이터 -> 구조화 데이터
구조화 데이터는 항상 열 지향 스토리지에 보관한다.
- 팩트 테이블 : 시간에 따라 증가하는 데이터
- 디멘전 테이블 : 구조화 데이터 중 부속 데이터
Hadoop
Hadoop에서는 사용자가 직접 열 지향 스토리지의 형식을 선택하고, 자신이 좋아하는 쿼리 엔진에서 그것을 집계한다.
- 단일 소프트웨어가 아니라 분산 시스템을 구성하는 다수의 소프트웨어로 이루어진 집합체이다.
- 복수의 분산 애플리케이션이 동작하는 구성으로 되어, 대규모 분산시스템을 구축하기 위한 공통 플랫폼의 역할을 한다.
분산 시스템의 구성 요소
- 분산 파일 시스템 : HDFS
- 리소스 관리자 : YARN
- 분산 데이터 처리 : MapReduce
- Hadoop을 일부만 사용하거나 전혀 이용하지 않는 구성도 있다.
분산 파일 시스템과 리소스 관리자
- Hadoop에서 처리되는 데이터 대부분은 분산 파일 시스템인 HDFS에서 저장된다.
- 네트워크에 연결된 파일 서버와 같은 존재, 다수의 컴퓨터에 파일을 복사해서 중복성을 높인다.
- YARN : CPU나 메모리 등의 계산 리소스는 리소스 매니저인 YARN에 의해 관리된다.
- YARN은 애플리케이션이 사용하는 CPU 코어와 메모리를 컨테이너라 불리는 단위로 관리한다.
- Hadoop에서 분산 애플리케이션을 실행하면 YARN이 클러스터 전체의 부하를 보고 비어있는 호스트부터 컨테이너를 할당한다.
- 리소스 관리자를 사용하면 애플리케이션마다 실행의 우선순위를 결정할 수 있다.
분산 데이터 처리 및 쿼리 엔진
- 데이터 대부분은 분산 파일 시스템인 HDFS에 저장된다.
- HDFS : 네트워크에 연결된 파일 서버와 같은 존재, 다수의 컴퓨터에 파일을 복사하여 중복성을 높인다.
- YARN : CPU나 메모리 등의 계산 리소스는 리소스 메니저인 YARN에 의해 관리,
애플리케이션이 사용하는 CPU 코어와 메모리를 컨테이너라는 단위로 관리한다. - 리소스 관리자를 사용하면 애플리케이션마다 실행의 우선순위를 결정할 수 있다.
- MapReduce : 분산 시스템에서 데이터 처리를 실행하는 데 사용, 임의의 자바 프로그램을 실행시킬 수 있기 때문에 비구조화 데이터를 가공하는데 적합, 대량의 데이터를 배치 처리하기 위한 시스템
- SQL 등의 쿼리 언어에 의한 데이터 집계가 목적 : 아파치 하이브
- Apache Tez : Hive를 가속화하기 위한 노력의 하나.
스테이지의 종료를 기다리지 않고 처리가 끝난 데이터를 차례대로 후속 처리에 전달해서 쿼리 전체의 실행 시간을 단축한다. - Apache Impala, Presto : 대화형 쿼리 실행만 전문으로 하는 쿼리 엔진
장시간의 배치 처리를 가정해 한정해 한정된 리소스를 유효하게 활용하도록 설계되어있다. - Hive : 대량의 비구조화 데이터를 가공하는 무거운 배치 처리에는 높은 처리량으로 리소스 활용할 수 있다.
- Impala, Presto : 완성된 구조화 데이터를 대화식으로 집계하고자 할 때 지연이 적기 때문에 사용한다.
Spark
- 대량의 메모리를 활용하여 고속화를 실현
- MapReduce를 대체하는 존재
- 스크립트 언어를 사용할 수 있다. 표준으로 자바, 스칼라, 파이썬, R언어에 대응한다.
- SQL로 쿼리를 실행하기 위한 'Spark SQL'과 스트림 처리를 수행하기 위한 'Spark Streaming'이 포함되어 있다.
3-2 쿼리 엔진
데이터 마트 구축의 파이프 라인 :
- 분산 스토리지에 저장된 데이터를 구조화하고 열 지향 스토리지 형식으로 저장, 가공하는 부하가 큰 처리이기 때문에 Hive이용
- 완성한 구조화 데이터를 결합, 집계하고 비정규화 테이블로 데이터 마트에 써서 내보낸다.
열 지향 스토리지를 이용한 쿼리의 실행에는 Presto 사용
Hive에서 만든 각 테이블의 정보는 Hive 메타 스토어라는 데이터베이스에 저장된다.
Hive에 의한 구조화 데이터 작성
하이브를 시작하고 외부테이블을 정의한다.
- 외부 테이블 : 하이브의 외부에 있는 특정 파일을 참고해 그곳에 테이블이 존재하는 것처럼 읽어 들이기 위해 지정한다.
- 데이터를 그 자리에서 바로 집계할 수 있는 성직은 애드 혹 데이터 분석하기 유용하고 시간을 들여 데이터를 전송하지 않고도 원하는 정보를 얻을 수 있다.
- 테이블을 열 지향 스토리지 형식인 ORC형식으로 변환, 데이터의 집계가 고속화 된다.
- 테이블을 결합 및 집약해서 비정규화 테이블을 만든다.
- 데이터 편차 : 고속화를 방해하는 하나의 요인
- 분산 시스템의 성능을 발휘하기 위해서는 데이터의 편차를 최대한 없애고, 모든 노드에 데이터가 균등하게 분산되야 한다. 중복 제거도 필요하다.
대화형 쿼리 엔진 Presto의 구조
하이브는 작은 쿼리를 여러번 실행하는 대화형 데이터 처리에는 적합하지 않다.
쿼리 실행의 지연을 감소시키는 것을 목적으로 개발된 것이 대화형 쿼리 엔진이다.
- 플러그인 가능한 스토리지 설계 : 다양한 데이터 소스에서 직접 데이터를 읽어 들인다.
- 최대 성능을 위해서는 스토리지가 열 지향 데이터 구조여야 한다.
- ORC 형식의 로드에 최적화
- 일단 실행이 시작되면 중간에 끼어들 수 없기 때문에 작은 쿼리를 실행해야 한다.
- 쿼리의 실행 과정에서 디스크에 쓰기를 하지 않는다.
데이터 처리를 메모리상에서 실시하고, 메모리가 부족하면 여유가 생길 때 까지 기다리거나 오류로 실패한다. - 메모리상에서 할 수 있는 것은 메모리상에서 실행하고 디스크에 있어야 하는 일부 데이터 처리만을 하이브에 맡기는 것이 효과적이다.
데이터 분석의 프레임워크 선택하기
- MPP 데이터베이스
- 스토리지 및 게산 노드가 일체화되어 있어 처음에 ETL 프로세스 등으로 데이터를 가져오는 절차가 필요하다.
- 대량의 텍스트 처리가 필요하거나 데이터 처리를 프로그래밍하고 싶을 때, NoSQL 데이터 베이스에 저장된 데이터를 집계하고 싶을 때
- Hadppo을 중심으로 하는 빅데이터 기술 사용
- Hive
- 텍스트 데이터를 가공하거나 열 지향 스토리지를 만드는 등의 무거운 처리
- 안정성
- Presto
- 속도로 인해 다양한 것을 희생한다.
- 실행이 빠르기 때문에 오류가 발생하면 다시 반복해서 사용한다.
- 표준 SQL 준수
- 데이터의 구조화에는 Hive, Spark를 사용하는것이 좋다.
- Spark
- 인 메모리의 데이터 처리가 중심, 대화형 쿼리 실행에 적합
- ETL 프로세스에서 SQL에 이르기까지 일련의 흐름을 하나의 데이터 파이프라인으로 기술할 수 있다.
- 텍스트 데이터를 읽어 열 지향 스토리지로 변환하고 그것을 SQL로 집계해서 결과를 내보낼 수 있다.
- 분산 시스템을 사용한 프로그래밍 환경이므로 ETL프로세스, 머신러닝과 같은 모든 데이터 처리에 사용할 수 있다.
3-3 데이터 마트의 구축
분산 시스템이 준비되면 시각화를 위해 데이터 마트를 만드는 절차에 들어간다.
- 팩트 테이블
- 추가 : 새로 도착한 데이터만을 증분으로 추가
- 치환 : 과거의 데이트를 포함하여 테이블 전체를 치환
- 테이블 파티셔닝 : 하나의 테이블을 여러 물리적인 파티션으로 나눔으로써 파티션 단위로 정리하여 데이터를 쓰거나 삭제가 가능
자주 새 파티션을 만들고 이것을 팩트 테이블에 붙인다.
- 집계 테이블
- 일정 시간 간격으로 집계하고 불필요한 정보를 제거한 테이블
- 필요한 칼럼을 골라 숫자 데이터를 집계한다.
- 카디널리티 : 각 칼럼이 취하는 값의 범위
- 집계 테이블을 작게 하려면 모든 칼럼의 카디널리티를 줄여야 한다.
- 스냅샷 테이블
- 업데이트될 가능성이 있는 테이블에 대해서 이를 통째로 저장하는 방법
- 이력 테이블 : 변경 내용만을 저장하는 방법
- 데이터 분석을 위해서는 스냅샷 테이블이 취급하기 쉽다.
- 스냅샷 테이블은 시간이 지남에 따라 점점 커지므로 이것도 일종의 팩트 테이블로 간주한다.
- 다른 팩트 테이블과 결합함으로써 디멘전 테이블로도 사용 가능하다.
- 영구적인 저장소에 보관하여 삭제되지 않도록 한다.
- 이력 테이블
- 변경된 데이터만을 증분으로 스냅샷 하거나 변경이 있을 때 마다 그 내용을 기록한다.
- 데이터의 양을 줄이는데는 도움이 되지만, 완전한 마스터 테이블을 나중에 복원하는 것이 어렵기 때문에 디멘전 테이블로는 사용하기 어렵다.
- 디멘전을 추가하여 비정규화 테이블 완성시키기
- 팩트테이블과 디멘전 테이블을 결합하여 비정규화 테이블을 만든다.
- 디멘전 테이블로는 스냅샷 테이블을 사용할 뿐만 아니라 목적에 따라 각종 중간 테이블이 만들어 진다.
- 데이터 집계의 기본형
- 팩트 테이블에서 필요한 데이터를 꺼낸다, 칼럼수를 줄이면 데이터 로드 속도는 빨라진다.
- 디멘전 테이블과 결합하여 데이터 마트에 저장할 칼럼을 선택한다, 카디널리티를 작게 한다.
- 그룹화하여 측정값을 집계한다.
- 결과를 데이터 마트로 내보내거나 CSV파일로 저장한다.
'Today I Learned > 빅데이터를 지탱하는 기술' 카테고리의 다른 글
220603 TIL : 빅데이터를 지탱하는 기술 CH2 (0) | 2022.06.04 |
---|---|
220602 TIL : 빅데이터를 지탱하는 기술 CH1 (0) | 2022.06.03 |