빅데이터의 분산처리
대규모 분산 처리의 프레임 워크
구조화 데이터와 비구조화 데이터
비정형화된 데이터는 SQL로 제대로 집계할 수 없다.
NoSQL 데이터 베이스가 이러한 스키마리스 데이터에 대응하고 있다.
다양한 형태의 데이터를 우선 데이터 레이크에 저장한 후, 분석하기 용이하게 분산스토리지에 옮기는 파이프라인이 필요하다.
하둡의 열지향 스토리지
Apache ORC
구조화 데이터를 위한 열지향 스토리지로 처음에 스키마를 정한 후 데이터를 저장한다.
Apache Parquet
스키마리스에 가까운 데이터 구조로 되어잇어 json같은 데이터도 그대로 저장할 수 있다.
이 때 비 구조화 데이터도 열지향 스토리지로 변환하는 과정을 거쳐야 하는데, 사용되는 것이 Hadoop과 Spark 다.
Hadoop
분산 데이터 처리의 공통 플랫폼
아파치 하둡은 대량의 자료를 처리할 수 있는 큰 컴퓨터 클러스터에서 동작하는 분산 응용 프로그램을 지원하는 프리웨어 자바 소프트웨어 프레임워크이다. 원래 너치의 분산 처리를 지원하기 위해 개발된 것으로, 아파치 루씬의 하부 프로젝트이다. 위키백과
Spark
인메모리 형의 고속 데이터 처리
스파크는 맵리듀스를 대체하여 맵리듀스보다 더 효율적인 데이터 처리를 실현하는 것으로 등장했다. 스파크의 특징은 대량의 메모리를 활용하여 고속화를 실현하는 것이다. 실행 중에 많은 메모리가 필요하지만 실행시간이 단축된다.
스파크는 하둡을 대체한 것이 아니라 데이터 처리인 맵리듀스를 대체한 것이다.
스파크의 특징은 실행에 자바 런타임이 필요하지만, 실행되는 데이터 처리는 스크립트 언어를 사용할 수 있다.
쿼리 엔진
hadoop에 의하여 비구조화 데이터나 스키마리스 데이터들을 구조화 데이터로 변형하여 비정규화 테이블에 저장하는 파이프라인에는 대표적으로 hive와 presto가 사용된다.
데이터마트 구축의 파이프라인
처음 분산스토리지에 저장된 데이터를 구조화하고 열 지향 스토리지 형식으로 저장하는 것은 다수의 텍스트 파일을 읽어 가공하므로 hive를 사용한다. 그리고 완성된 구조화 데이터를 결합하고 집계하여 비정규화 테이블로 만드는 과정은 presto를 활용하여 시간을 단축한다.
대화형 쿼리엔진 Presto의 구조 Presto로 구조화 데이터 집계하기
hive가 대량출력을 수반하는 대규모 데이터 처리에 적합하다면,
작은 쿼리를 여러번 실행하는 대화형 데이터 처리에는 presto가 적합하다.
presto는 플러그인 가능한 스토리지 설계가 가능하다. 즉 하나의 쿼리안에서 여러 데이터 소스에 연결가능하다.
presto는 보통 hive 메타스토어에 등록된 테이블을 가져올 수 있으므로 hive에서 만든 구조화 데이터를 좀 더 집계하는 목적에 적합하다. 물론 다른 데이터 소스도 참고할 수 있지만, hive보다 성능이 훨씬 떨어지므로 presto를 효율적으로 활용하려면 참고하는 데이터 스토리지가 열지향 데이터구조로 되어있어야한다.
presto는 읽기와 코드 실행을 병렬 처리한다. 디스크에 쓰기작업을 하지 않고 메모리만을 사용한다.
또한 presto는 기본적으로 분산결합을 실시하여 같은 키를 같는 데이터는 동일한 노드에 모인다.
데이터 분석의 프레임워크 선택하기
실제로 현재 처리해야하는 데이터 양이나 상황에 따라서 클라우드 서비스로 시작할 수도 있고 서버를 설치해서 엔진을 가동할 수도 있다. 즉 상황에 따라서 적절한 프레임워크를 선택해야 한다.
MPP데이터베이스
완성한 비정규화 테이블의 고속 집계에 적합. 즉 SQL로 집계화/ 조회 하는 업무가 대부분일 때 적절하다,
그러나 확장성 및 유연성에는 분산 시스템이 유리하다. 대량의 텍스트 처리나 데이터 처리를 프로그래밍하거나, NoSQL 데이터베이스에 저장된 데이터를 집계하고 싶은 경우가 이런 경우이다.
따라서 이미 구조화가 완료된 데이터를 처리하여 비정규화 테이블로 만들어 데이터마트로 활용하려 할때 MPP데이터 베이스는 최적이다
Hive
데이터 양에 좌우되지 않는 쿼리 엔진이다. 안전성이 장점이다. 즉 대규모 배치 처리를 안정적으로 할 때 최적이다.
최근 인메모리 방식을 많이 활용하지만, 많은 양의 데이터를 안정적으로 다룰 때는 디스크 사용은 어느정도 필요하므로 이 때 Hive를 고려할 만하다.
Presto
속도 중시 & 대화형 쿼리엔진, 모든 데이터를 SQL로 집계하기 위한 중심적인 존재. 그러나 대화식 쿼리의 실행에 특화되어 있으므로 텍스트 처리 중심의 프로세스와 데이터 구조화에는 적합하지 않다. 즉 ETL 데이터 처리 프로세스는 Hive나 Spark가 적절하다.
Spark
분산시스템을 사용한 프로그래밍 환경. ETL프로세스부터 SQL에 이르기까지의 일련의 흐름을 하나의 데이터 파이프라인으로 기술할 수 있다는 장점
https://stackoverflow.com/questions/20822821/what-is-a-unix-timestamp-and-why-use-it
https://hazel-developer.tistory.com/211?category=914339