Data Engineering
- 빅데이터를 수집, 가공, 저장하는 모든 시스템을 구축/관리하는 과정
- 대용량 데이터 처리를 위한 DataBase(DB)를 관리하는 작업
- Database란, 데이터를 효율적으로 저장/관리하기 위한 시스템을 말한다.
- 회사/기관이 운영하는 서비스에서 발생하는 모든 데이터를 데이터베이스로 효과적으로 관리하기 위한 모든 시스탬을 운영
- Hadoop Ecosyste와 관련이 깊다
- 하나의 확정된 개념은 아니다.
기초 용어
- coumputing Resource : 데이터를 처리하기 위해서 필요한 리소스(=능력
- cpu : 연산 능력(= 계산량)
- 메인 메모리 : 데이터를 임심 저장할 수 있는 공간의 크기 (= 단기 기억 능력)
- 스토리지 : 데이터를 저장할 수 있는 크기 (= 장기 기억 능력)
- network : 컴퓨터가 특정 시스템을 통해서 연결되어 있는 구조. 이 구조에서는 컴퓨터들이 서로 통신을 해서 데이터를 주고 받을 수 있다.
- network model : computer network를 이해하는 방식 (OSI 7 layer VS TCP/IP layer)
- Client : end-user, 실제 사용자, 서비스 사용자, 작업을 요청하는 사람(또는 프로그램)
- server : 요청을 받는 대상, 서비스를 운영해주는 컴퓨터
- web : WWW(World Wide Web)와 같은 단어, hypertext와 media로 구성된 페이지들을 연결한 구조 또는 시스템
- 데이터베이스 : 데이터를 효율적으로 운영/관리/저장하는 시스템
- RDB : Relational DataBase, 관계형 데이터베이스, 테이블 형태로 데이터를 관리하는 체계
- table : row와 column으로 구성된 2차원 데이터, RDB의 구성요소, table 단위로 데이터를 관리
- schema : 어떤 테이블에 대한 정의, 테이블에 대한 metadata, column에 대한 정의, row에 대한 정의
- SQL : 데이터베이스를 다루기 위한 언어
- NoSQL : SQL 그 이상, SQL로 지원되지 않는 데이터베이스들을 포함한 모든 시스템
- Data Warehouse : 분석을 목적으로 만들어진 대용량 데이터 처리가 가능한 데이터 베이스
- Data Lake : 수집을 목적으로 만들어진 대용량 데이터 처리가 가능한 NoSQL
Data Pipeline
ETL
- Extract, Transform, Load의 약자로 다양한 데이터 소스로부터 데이터를 수집 및 처리하는데 사용되는 파이프라인
- 데이터 분석가들이 분석에 사용할 데이터를 정의하게 되면, 데이터 엔지니어에게 요청을 해서 해당 데이터를 처리해주길 원한다.
- 대용량 데이터를 한번에 처리하는걸 데이터 베이스 요청을 했다면 어떻게 처리해야 할까?
- 만약에 데이터 분석가가 Pandas를 이용해서 데이터를 처리하기로 정했다. Pandas에서 데이터를 처리할 수 있게 요청을 했다면 어떻게 처리해야 할까
- Extract(추출)
- 데이터를 원본 소스로부터 가져오는 작업
- SQL의 SELECT와 같다.
- 원본 소스가 꼭 RDB일 필요는 없다. (RDB가 효율은 가장 좋다)
- 분석가가 정의한 모든 데이터를 다 가져온다.
- Transform(변환)
- 추출한 데이터를 분석에 필요한 형태로 변환한다.
- 데이터의 포맷을 통일시켜주는 작업이다.
- 분석 요청 사항에 맞는 형태로 저장된다 (Data Warehouse의 schema 정의)
- Load(적재)
- 변환된 데이터를 Data Warehouse에 저장한다.
- 저장된 데이터를 분석가가 편의에 따라 자유롭게 사용할 수 있다. (application 형태로 제공)
- 원본 데이터에 정보를 모두 나타내고 있어야 한다.
- ETL은 데이터 엔지니어의 손을 많이 탄다.
- 데이터 엔지니어가 직접 각 프로세스마다 처리 방식을 모두 구현해주어야한다.
- 명세사항이 변경되는 경우엔, 그에 맞춰서 다시 처리단계(Transform)을 맞춰줘야한다.
- 대신에 솔루션 사용자 입장에서는 맞춰진 프로세스에 따라 편하게 데이터를 처리 및 사용이 가능하다.
ELT
- Extract, Load, Transform의 약자로 Transform이 일어나는 위치만 ETL과 다른 데이터 파이프 라인
- ELT는 ETL과 각 단계의 정의는 같다
- ELT는 ETL과 달리, 데이터를 일단 적재한 다음에 변환을 수행한다.
- 일단 데이터를 먼저 올려놓기 때문에, Data Warehouse보다는 Data Lake가 적합하다
- Data Lake는 정형/비정형/반정형 데이터 모두 자유롭게 적재가 가능하기 때문에 저장 효율성이 좋다.
- 다양한 데이터 타입을 모두 저장할 수 있다.
- 처리 속도가 ETL에 비해 느리다(저장된 이후에 Transform을 제일 마지막에 하기 때문에)
- 대신에 저장의 유연성과 명세사항에 없던 추후에 사용될지도 모르는 데이터까지 모두 수집이 가능하다
Hadoop Ecosystem
- Apache 재단에서 관리하는 프리웨어인 Hadoop Project에서 만들어지는 모든 소프트에어 솔루션들의 집할을 얘기
- Haddop은 HDFS라는 파일처리 시스템과 YARN이라는 리소스 관리 시스템, MapReduce라는 대용량 처리 시스템을 기반으로 하는 프레임 워크다.
- 대용량 데이터를 효과적으로 처리하는 것을 목적으로 하는 많은 소프트웨어들이 함께 있는 플랫폼이라고 볼 수 있다.
HDFS
- Hadoop에서 관리하는 모든 데이터를 저장/관리하는 시스템(스토리지 관리)
- Namenode와 Datanode로 데이터를 분산관리한다.
- node : 컴퓨터 한 대
- rack : Node 여러 대를 물리적으로 묶어놓은 것. 같은 네트워크 스위치를 공유한다.
- cluster : 여러 rack을 물리적으로 묶은 것
- Namenode는 실제 데이터가 어떤 Datanode에 저장되어 있는지를 관리하는 메타데이터를 관리하는 노드이다.
- Datanode엔 실제 데이터가 분산 저장된다. (replica들이 존재함)
YARN
- Hadoop에서 처리되는 모든 리소스를 관리해주는 시스템
- 어떤 요청이 어떤 클러스터에 할당되어야하는지 관리한다.
- Resource Manager와 Node Manager가 리소스를 관리한다.
- Resource Manager는 각 Node Manager가 각 Node의 리소스를 얼마나 사용하는지를 관리한다.
- Node Manager는 각 Node를 관리하며, Node의 리소스를 관리한다. Resource Manager의 요청을 수행하는 역할
- Client가 작업을 요청하면 Resource Manager가 Node Manager들을 관리하여 리소스를 할당하고, 작업을 수행한다.
mapreduce
- Hadoop에서 데이터를 분산처리하는 방법 중에 하나이다.(가장 많이 쓰임)
- Map task와 Reduce task가 있다.
- Map task를 수행하는 노드를 Mapper, Reduce task를 수행하는 노드를 Reducer라고 한다.
process
- 전처리가 Mapper가 일을 할 수 있는 형태로 데이터를 정의하여 Mapper들에게 전달한다
- Mapper는 처리해야하는 데이터를 Reducer가 연산할 수 있는 형태로 변환한다.(mapping)
- Reducer에게 전달하기 전에 데이터를 기준에 맞게 Sort & Merge한다. (shuffling)
- Reducer는 전달받은 데이터에 요청한 연산을 수행한다.(Reducing = Sum)
- Reducer들이 처리한 데이터를 합친다.
Cloud computing
- 사용자에 필요에 따라 Computing Resource를 할당해주는 시스템, 할당을 해주는 서버가 네트워크/서비스를 통해서 제공해주는 시스템.
- 지금은 '대'클라우드 시대이다.
- Cloud Computing으로 우리는 컴퓨터(컴퓨팅 리소스)를 빌려쓰는 시대에 살게되었다.
- "Pay-as-you-go" -> 사용한만큼 지불한다.
- Clouding Computing을 하기 위해서는 Data Center와 실시간 분산처리 시스템이 필요하다
- 주로 IT대기업들이 서비스를 제공한다
- ~aaS(as a Service)
- Cloud Computing을 직접 운영하는 회사들의 서비스 설명을 보며, 개념을 구체화해보자