데이터 파이프라인
- 데이터 수집부터 워크플로우 관리
- 어디에서 데이터를 수집하여 무엇을 실현하고 싶은지?
데이터 수집
- 데이터 파이프라인의 첫 부분 (데이터를 모은다)
- 다양한 곳에서 발생되고 각각 다른 형태를 갖는다.
- 파일 서버에 축적된 로그 파일, 애플리케이션에서 쌓인 이벤트 데이터 등
데이터 전송 방법은 크게 bulk 형과 streaming 형이 있다.
bulk :
- 이미 존재하는 데이터를 정리해서 추출
- DB/서버에서 정기적으로 수집
streaming :
- 연속적으로 생성되는 데이터를 끊임없이 전송
- 모바일 애플리케이션/인베디드 장비에서 데이터 수집
스트림 처리 & 배치 처리
기존의 데이터 웨어하우스 : 벌크 형
현재 빅데이터 : 실시간으로 처리하느 스트림 처리가 주류가 됨
스트림 처리는 장기적인 데이터 분석에는 적합하지 않을 수 있음 -> 실시간 데이터와 장기 데이터를 하나로 취합하기 어려움
장기적인 데이터 분석에는 어느 정도 정리된 데이터를 효율적으로 가공하기 위한 배치 처리 구조가 적합하다.
분산 스토리지(객체 스토리지, NoSQL, 데이터베이스)
수집된 데이터는 분산 스토리지에 저장된다. (여러 컴퓨터와 디스크로부터 구성된 스토리지 시스템)
- Object Storage : 한 덩어리로 모인 데이터에 이름을 부여해서 파일로 저장 (S3)
- NoSQL DB: 애플리케이션에서 많은 데이터를 읽고 쓰는데 성능이 우수함.
분산 데이터 처리(쿼리 엔진, ETL 프로세스)
분산 스토리지에 저장된 데이터를 처리하는 프레임워크
빅데이터를 SQL로 집계하는 방법 :
1. 쿼리 엔진 : 분산 스토리지 상의 데이터를 SQL로 집계(HIVE, 대화형 쿼리 엔진)
2. ETL 프로세스 : 외부의 데이터 웨어하우스 제품을 사용
--> 분산 스토리지에서 추출한 데이터를 데이터 웨어하우스에 적합한 형식으로 변환 (추출, 가공, 로드)
데이터 웨어하우스와 데이터 마트 (데이터 파이프라인 기본형)
데이터 웨어하우스는 일반적인 RDB와 달리 '대량의 데이터를 장기 보존하는 것'에 최적화됨
정리된 데이터를 한 번에 전송에 적합하며 소량의 데이터를 자주 읽고 쓰는 데는 적합하지 않음
데이터 소스 : 업무 시스템을 위한 RDB/로그를 저장하는 파일 서버
ETL 프로세스 : 데이터 소스에 보존된 로우 데이터를 추출하고 가공 후 데이터 웨어하우스에 저장하는 흐름
데이터 웨어하우스는 업무에 중요한 데이터 처리에 사용됨
-> 데이터 분석에 필요한 데이터만 추출하여 데이터 마트를 구축한다.
웨어하우스와 마트는 먼저 테이블 설계를 정한 후 데이터를 저장하고, SQL로 데이터를 집계한다.
데이터 레이크 (데이터를 그대로 축적)
데이터를 모두 원래의 형태 그대로 축적하고 나중에 필요에 따라 가공하는 구조
임의의 데이터를 저장할 수 있는 분산 스토리지
데이터 형식은 자유이나, 대부분 CSV, JSON 등 범용적인 형식 사용
데이터 웨어하우스와 다른 점 : 미가공의 원시 데이터를 그대로 저장소에 저장한다.
- 단순한 스토리지, MapReduce 등의 분산 데이터 처리 기술을 사용함
- 분석에 필요한 데이터를 가공, 집계, 데이터 마트로 추출 후 분석
데이터 엔지니어
시스템 구축 및 운용, 자동화 담당
ETL 프로세스, 분산 시스템으로 데이터 수집 -> 데이터 레이크에서 워크플로우 관리 -> 데이터 마트
애드 혹 분석 및 대시보드 도구
자동화 되지 않은 수작업 데이터 집계, 일회성 데이터 분석
SQL 쿼리를 직접 작성해서 실행, 스프레드시트에서 그래프를 만드는 것까지 포함
확증적 데이터 분석 & 탐색적 데이터 분석
데이터 분석은
가설을 세우고 그것을 검증하는 확증적 데이터 분석과 (통계학적 모델링)
데이터를 보면서 의미를 읽어내려고 하는 탐색적 데이터 분석으로 나뉜다. (데이터 시각화)
웹서버 엑세스 로그 예
아래와 같은 웹사이트 액세스 로그를 BI도구에서 읽을 수 있는 형태로 전처리
파이썬 정규식을 사용하여 파싱
pattern = re.compile(
'^\S+ \S+ \S+ \[(.*)\] "(.*)" (\S+) (\S+)$'
) # 로그의 각 행에 매치하는 정규 표현식
def parse_access_log(path):
# 파일을 CP949 인코딩으로 시도하거나, 실패 시 오류를 무시하며 utf-8로 열기
with open(path, "r", encoding="CP949", errors="ignore") as file:
for line in file:
for m in pattern.finditer(line):
yield m.groups()
columns = ["time", "request", "status", "bytes"]
df = pd.DataFrame(
parse_access_log(log_path),
columns=columns,
)
df.time = pd.to_datetime(
df.time, format="%d/%b/%Y:%X", exact=False
) # df의 time이 읽기 불편하니, 표준 시간 포맷으로 변환
df.to_csv(
log_path,
index=False,
)
데이터에 근거한 의사 결정
KPI(Key Performance Indicator): 프로젝트의 현황을 파악하기 위한 숫자
약칭 | 정식명칭 | 의미 |
DAU | Daily Active User | 서비스를 이용한 1일 유저 수 |
계속률 | Customer Retention | 서비스를 계속해서 이용하고 있는 유저의 비율 |
ARPPU | Average Revenue Per Paid User | 유료 고객 1인당 평균 매출 |
객관적인 데이터를 근거하여 판단하는 것 : 데이터 기반 의사 결정
레퍼런스 : 빅데이터를 지탱하는 기술
'하둡' 카테고리의 다른 글
빅데이터의 탐색 (0) | 2023.09.11 |
---|---|
hadoop - 분산 환경 구축하기 (0) | 2023.04.07 |
하둡과의 만남! (0) | 2023.03.30 |
하둡 설치(단일 노드) (2) | 2023.03.29 |