카테고리 없음

빅데이터를 지탱하는 기술_빅데이터의 축적

알라도크 2025. 4. 16. 15:09

데이터 저장소 : 대용량 데이터에 적합한 객체 스토리지(HDFS, S3)

데이터 수집 : 나중에 처리하기 쉽도록 준비

  • 작은 파일을 단위화 : 시계열 데이터의 대량의 작은 파일이 만들어지는 것을 방지하기 위해 작은 데이터를 하나의 큰 파일로 만드는 작업 필요
  • 큰 파일의 소분화 : 1TB 파일을 100Mbps 회선으로 전송하면 24시간이 소요됨

데이터 전송 : 벌크형 vs 스트리밍형

축적된 데이터를 사용할 때 : 벌크형

스트리밍 데이터를 사용할 때 : ETL 도구, 오픈 소스 벌크 전송 도구, 스크립트 사용하여 전송

벌크형

파일 사이즈의 적정화 : 디스크 과부하, 실패 시 재시도의 장점 존재

  • 대용량 데이터인 경우 적절한 전송 단위를 설정해야 한다.
  • TB에 이르는 데이터를 한 번에 전송하게 되면 디스크가 넘쳐나서 오류가 발생하게 된다.

데이터 전송의 워크플로우 : 벌크형 데이터 전송과 뛰어난 궁합

  • 오류가 발생했을 때 재전송이 유리하다.
  • 마스터 데이터의 스냅샷과 신뢰성이 중시되는 과금 데이터 전송은 워크플로우에 포함시키기

스트리밍형

  • 다수의 클라이언트에서 작은 데이터가 지속적으로 전송되는 것이 특징
  • 통신을 위한 오버헤드가 커지기 때문에 이를 처리하는 서버 부하를 고려해야 함
  • 메시지 저장 방법
  1. 작은 데이터 쓰기에 적합한 NoSQL 사용 + Hive 쿼리 엔진
  2. 메시지 큐, 메시지 브로커과 같은 중계 시스템 사용

웹 이벤트 트래킹

상주형 로그 수집 소프트웨어 : 서버 안에 일정 데이터를 모아서 전송하는 방식

웹 이벤트 추적 : HTML 페이지에 태그를 삽입해서 엑세스 분석 서비스 및 데이터 분석 서비스에 사용

 

모바일 앱으로부터의 메시지 배송

MBaaS를 사용 : 직접 로그 수집 서버를 마련할 필요가 없음

SDK 사용 : 오프라인 시에는 축적이 불가능하기에 SDK 내부에 축적한 뒤에 온라인 상태 시에 전송

중복 제거의 구조가 필요 : 네트워크 장애가 발생할 수 있기 때문에 중복이 발생할 가능성이 존재

 

디바이스로부터의 메시지 배송

MQTT : TCP/IP를 사용하여 데이터를 전송하는 프로토콜, 구독한 토픽을 통해 메시지를 전송하면 해당 메세지를 받은 브로커가 구독자에게 메시지를 전송하는 개념

장점 : 네트워크에서 분리된 상황에 대한 대비가 되어 있다.

 

용어 정리

클라이언트 : 메시지가 생성되는 기기

프런트 엔드 : 메시지를 먼저 받는 서버로 클라이언트와의 통신 프로토콜을 제대로 구현하는 것, 높은 확장성,

메시지 브로커 : 프런트 엔드에서 메시지를 받고 분산 스토리지에 데이터를 저장시키는 역할

 

데이터 수집 파이프라인

  • 기본 구조 : 클라이언트 → 메시지 프로듀서 → 메시지 브로커 → 메시지 컨슈머 → 분산 스토리지 → 중복 제거 → 데이터 구조화
  • 쓰기 읽기 성능이 문제가 없다면 메시지 브로커는 필요없다. → NoSQL 데이터 베이스에 직접 쓰는 것이 좋다.

중복을 고려한 시스템 설계

  • 99%의 이상의 신뢰성을 확보한 후에 평소 “멱등한 조작”에 유의하여 “중복이 있어도 문제가 되지 않는” 시스템을 설계할 것을 추천한다.
  • 신뢰성이 중시되는 경우는 스트리밍보단 벌크형 데이터 전송 방식을 사용해라 → 중복도 결손도 피할 수 있다.

시계열 데이터의 최적화

시계열 데이터의 최적화 : “메시지가 도착할 때까지의 시간 지연”이 문제

  • 오프라인 상태, 네트워크 문제로 인한 전송 지연 상태도 고려해야 한다.
  • 클라이언트 상에서 메시지가 생성된 시간을 “이벤트 시간”, 서버가 처리하는 시간을 “프로세스 시간”이라고 한다.
  • 대부분 데이터 분석에 사용되는 데이터는 “이벤트 시간”을 사용한다.

프로세스 시간에 의한 분할과 문제점

  • 전송 지연 문제로 늦게 도착하는 메시지를 고려하여 집계 시점을 몇 일 이후에 진행하게 되면 다음과 같은 문제가 발생한다.
  • 프로세스 시간 기준으로 데이터를 분할을 하게 되면 이벤트 시간 기준으로 과거 데이터가 포함된 상태이다. → 일일 배치 프로세스로 집계할 때 그저께 발생된 데이터가 포함되어 있을 수 있다.
  • 모든 데이터를 로드하여 이벤트 시간으로 정렬하면 이 때 필요한 리소스가 크다. → full scan

시계열 인덱스 : 이벤트 시간에 의한 집계 효율화1

  • 풀 스캔을 피해 데이터를 효율적으로 정렬하기 위해 이벤트 시간에 대해 인덱스를 활용한다.
  • 정해진 시간에 발생한 이벤트를 조사하거나, 실시간 대시보드를 만드는 경우에 유용하다.
  • 대량의 데이터를 집계하는 경우에는 열지향 스토리지를 활용하기

조건절 푸쉬다운 : 이벤트 시간에 의한 집계의 효율화2

  • 매일 한 번씩 새로 도착한 데이터를 배치 처리로 변환하는 것을 고려해보자
  • 스트리밍 데이터를 일정 시간 모은 뒤에 이벤트 시간으로 정렬하고 열 지향 스토리지로 변환한다.
  • 열 지향 스토리지의 “칼럼 단위의 통계 정보”를 이용하여 최적화(조건절 푸쉬다운)가 이뤄지게 하기 위함이다.

조건절 푸쉬다운은 데이터에 대한 통계 정보를 활용하여 최소한의 데이터만 읽어들이는 방법이다.

이벤트 시간에 의한 분할 : 테이블 파티셔닝, 시계열 테이블

  • 프로세스 시간으로 파일을 나누고 있는 한, 동일 이벤트 시간 데이터가 분산 저장되게 된다.
  • 분산 저장되게 하되 비슷한 시간대의 데이터는 동일하게 분산 저장되도록 하는 테이블 파티셔닝 기법을 사용한다.
  • 여기서 문제는 대량의 작은 파일이 만들어져 쿼리 성능이 악화되는 경우가 존재한다.
  • 작은 데이터를 효율적으로 추가할 수 있는 분산 데이터베이스를 사용하거나 너무 오래된 데이터는 버리는 아이디어가 필요하다.

데이터 마트를 이벤트 시간으로 정렬하기

  • 파일이 조각나는 일도 없고, 항상 최적의 데이터 마트를 유지할 수 있다.

비구조화 데이터의 분산 스토리지

NoSQL 데이터베이스 활용 시 애플리케이션에서 온라인으로 이용하거나 실시간으로 집계할 수도 있다.

 

[기본 전략] NoSQL 데이터베이스에 의한 데이터 활동

객체 스토리지의 단점 : 파일 교체가 어려워서 로그 파일에는 적합하다. 하지만 쓰기 빈도가 높은 경우는 RDB에 저장하거나 다른 “분산 데이터베이스”에 저장하도록 한다.

 

+ NoSQL 데이터베이스란 특정 용도에 최적화된 데이터 저장소를 말한다.

분산 KVS - 디스크로의 쓰기 성능을 높이기

분산 KVS는 모든 데이터를 키값 쌍으로 저장하도록 설계된 데이터 저장소를 말한다. ( 객체 스토리지?)

구체적으로 몇 KB 정도의 데이터를 초당 수만 번 읽고 쓰는 경우에 적합하다

모든 데이터에 고유의 키를 지정하고 해당 값은 부하 분산을 위해 이용한다.

 

Amazon DynamoDB

항상 안정된 읽기 쓰기 성능 제공,

미리 설정한 초단위 요청 수에 따라 노드가 증감되는 특징이 있다.

P2P 형의 분산 아키텍쳐를 가지고 있다.

분석을 위해서는 Amazon EMR 및 Amazon Redshift 등과 결합하여 사용한다.

DynamoDB 고유 기능인 “DynamoDB Streams”를 사용하면 데이터 변경을 이벤트 외부에 전송해 실시간 스트리밍을 할 수 있다.

NoSQL 데이터베이스는 애플리케이션에서 처음에 데이터를 기록하는 장소로 이용된다.

와이드 칼럼 스토어

분산 KVS를 발전시켜 2개 이상의 임의의 키에 데이터를 저장할 수 있도록 한 것

내부적으로 행 키와 칼럼 명의 조합에 대해 값을 저장한다.

Apache Cassandra

테이블의 스키마를 결정할 필요가 있기에 구조화 데이터만을 취급할 수 있다.

복합키를 사용한다.

도큐먼트 스토어

와이드 칼럼 스토어가 주로 ‘성능 향상’을 목표로 하는 반면, 도큐먼트 스토어에서는 주로 ‘데이터 처리의 유연성’을 목적으로 한다.

스키마를 정하지 않고 데이터를 처리할 수 있어 외부 데이터를 저장하는 데 적합한다.

주로 참조 시스ㅔㅁ의 데이터 미 로그 저장 등에 적합하다.

MongoDB

성능을 우선하여 신뢰성을 희생해왔다.

여러 노드에 데이터를 분산할 수 있지만, 그 자체는 대량의 데이터를 집계하는 데 적합하지 않다.

검색 엔진

텍스트 데이터 및 스키마리스 데이터를 집계하는 데 자주 사용된다.

텍스트 데이터를 전문 검색하기 위해 “역 색인”을 만드는 부분이다. 데이터를 기록하는 시스템 부하 및 디스크 소비량은 커지지만, 키워드 검색이 훨씬 고속화된다.

실시간 집계 시스템의 일부로 이용된다.

Elasticssearch

로그 수집 소프트웨어인 “Logstash’, 시각화 소프트웨어인 ‘Kibana’와 함께 ‘ELK 스택’ 또는 ‘Elastic 스택’으로 자주 이용된다.

아무것도 지정하지 않으면 모든 필드에 색인이 만들어진다. → 명시적으로 스키마를 결정함으로써 색인을 무효화하는 식의 튜닝이 필요하다.

표준 쿼리 언어는 사람의 힘으로 쓰기에는 너무 복잡하므로, Kibana 와 같은 프런트 엔드를 이용하거나 프로그램 안에서 호추하는 것이 주요한 사용법이다.

Splunk

텍스트 데이터를 집계하기 위한 도구로 알려져 있다.