실무 프로젝트로 배우는 빅데이터 기술
김강원 저
스마트카 프로젝트로 배워보는 빅데이터 프로젝트의 AtoZ
스마트카 빅데이터 파일럿 프로젝트를 단계별로 진행하면서 빅데이터의 수집/적재, 처리/탐색, 분석/응용 영역의 아키텍처와 활용 기술들을 다루고 있다. 전문 개발자가 아니어도 약간의 소프트웨어 지식만으로 빅데이터의 A~Z까지 기술들을 구현하고 경험해 볼 수 있는 파일럿 프로젝트 형식으로 구성했다.
빅데이터 시스템 구축에 필요한 실무 요건들을 도출하고 이를 해결하기 위한 빅데이터의 수집, 적재, 처리, 분석 아키텍처와 10여 개의 핵심 기술 ...
V6
Volume 크기, Variety 다양성, Velocity 속도, Veracity 정확성, Visualization 시각화, Value 가치
단계
수집 -> 적재 -> 처리 -> 탐색 -> 분석 -> 응용
https://onoffmix.com/event/101208
-- 빅데이터 수집 --
ESP(Event Stream Processing)/CEP(Complex Event Processing)
Flume 플럼
정의 : 수집의 다양한 요구사항들을 해결하기 위한 소프트웨어
구성 : Source (원천 시스템의 데이터를 수집), Interceptor (Source 와 Channel 사이에서 데이터 필터링 및 가공), Channel (Source 와 Sink 를 연결, 데이터를 버퍼링 하는 컴포넌트로 메모리, 파일, 데이터 베이스를 채널의 저장소로 활용), Sink (수집한 데이터를 Channel 로 전달 받아 최종 목적지에 저장), Agent (Source -> (interceptor) -> Channel -> Sink 컴포넌트 순으로 구성된 작업 단위로 독립된 인스턴트 생성)
Kafka 카프카
정의 : MOM(Message Oriented Middleware) 소프트웨어 중 하나로 대규모로 발생하는 메시지성 데이터를 비동기 방식으로 중계하는 역할, 원천 시스템으로부터 대규모 트랜잭션 데이터가 발생했을 때 중간에 데이터를 버퍼링하면서 타깃 시스템에 안정적으로 전송해 주는 중간 시스템
구성 : Broker (카프카의 서비스 인스턴스, 다수의 Broker 를 클러스터로 구성하고 Topic 이 생성되는 물리적 서버), Topic (Broker 에서 데이터의 발행/소비 처리를 위한 저장소 Table 과 비슷한 개념), Provider (데이터를 전송), Consumer (데이터를 수신)
-- 빅데이터 적재 --
Hadoop 하둡
정의 : 대용량 데이터리르 분산 저장, 분산 저장된 대용량 데이터를 분석하는 기능
Zookeeper 주키퍼
정의 : 공유된 정보를 기용해 서버 간의 중요한 이벤트 (분산락, 순서 제어, 부하 분산, 네임서비스 등) 을 관리하면서 상호작용을 조율해 주는 코디네이터시스템
구성 : Clinet (주키퍼의 ZNode 에 담긴 데이터에 대한 쓰기, 읽기, 삭제 등의 작업을 요청하는 클라이언트), ZNode (주키퍼 서버에 생성되는 파일시스템의 디렉터리 개념), Ensemble(3대 이상의 주키퍼 서버를 하나의 클러스터로 구성한 HA 아키텍처), Leader Server (Ensemble 안에 유일한 리더 서버, 클라이언트 요청을 받은 서버는 해당 요청을 리더 서버에 전달하고, 리더서버는 모든 팔로워 서버에게 전달), Follwer Server (Ensemble 안에 리더서버와 메시지를 주고 받으면서 ZNode의 데이터를 동기화하고 리더 서버에 문제가 발생할 경우 내부적으로 새로운 리더를 선출하는 역할)
-- 빅데이터 적재 (실시간) --
Hbase
정의 : 하둡 기반의 칼럼 지향 NoSQL 데이터 베이스
구성 : HTable (칼럼기반 테이블, 공통점이 있는 칼럼들의 그룹을 묶은 칼럼 패밀리와 테이블의 로우를 식별해서 접근하기 위한 로우키 구성), HMaster (HRegion 관리 메타정보관리), HRegion (HTable의 크기에 따라 자동으로 수평 분할), HRegionServer (분산 노드별 HRegionServer 구성, 다수의 HRegion 지정), Store (칼럼 패밀리 저장 및 관리 MemStore 와 Hfile 로 구성), MemStore (데이터를 인메모리에 저장 및 관리하는 데이터 캐시 영역), HFile (데이터를 스토리지에 저장 및 관리하는 영구 저장 영역)
Redis 레디스
정의 : 분산 캐시 시스템 이면서 NoSQL 데이터베이스 처럼 대규모 데이터 관리 능력도 갖준 IMDG(In-Memory Data Grid) 소프트웨어, 키/값 형식의 구조 다양한 데이터 타입 지원, 스냇샵 기능 제공, 데이터 유실에 대비해 AOF(Append Only File) 기능으로 정합성 보장, 샤딩, 복제 지원
구성 : Master (분산 노드 간의 데이터 복제와 Slave 서버 관리, 쓰기 요청 처리), Slave (읽기 요청 처리), Sentinel (Master 서버 문제 발생시 새로운 마스터 선출), Replication (Master 서버에 쓰인 내용을 Slave 서버로 복제해서 동기화 처리), AOF/Snapshot (데이터를 영구적으로 저장하는 기능, 명령어를 기록하는 AOF와 스냅샷 이미지 파일 방식 지원)
Storm 스톰
정의 : 실시간 데이터를 병렬 프로세스로 처리하기 위한 소프트웨어, 원천 시스템으로부터 데이터가 끊이지 않고 매우 빠른 속도로 유입되는데 (스피드 데이터), 대규모 병렬 처리를 이용해 실시간 데이터를 프로세싱 (분리, 정제, 조합, 카운팅 등) 할수 있는 소프트웨어
구성 : Spout (외부로부터 데이터를 유입 받아 가공 처리해서 튜플을 생성, 이후 해당 튜플을 Bolt 에 전송), Bolt (튜플 받아 실제 분산 작업을 수행, 필터링, 집계 조인 등의 연산을 병렬로 실행), Topology (Spout-Bolt 의 데이터 처리 흐름을 정의, 하나의 Spout 와 다수의 Bolt 로 구성), Nimbus (Topology 를 Supervisor에 배포하고 작업을 할당 Supervisor 를 모니터링하다 필요 시 Fail-Over 처리), Supervisor (Topology 를 실행 Worker 를 구동시키며 Topology 를 Worker 에 할당 및 관리), Worker (Supervisor 상에서 실행중인 자바 프로세스로 Spout 와 Bolt 를 실행), Executor (Worker 내에서 시행되는 자바 스레드), Tasker (Spout 및 Bolt 객체가 할당)
Esper 에스퍼
정의 : 실시간 스트리밍 데이터의 복잡한 이벤트 처리가 필요할 떄 사용하는 룰 엔진, 복잡한 패턴을 찾고, 그 패턴에 따른 이벤트를 처리하는 기능 CEP(Complex Event Processing)
구성 : Event (실시간 스트림으로 발생하는 데이터들의 특정 흐름 또는 패턴을 정의), EPL (유사 SQL을 기반으로 하는 이벤트 데이터 처리 스크립트 언어), Input Adapter (소스로부터 전송되는 데이터를 처리하기 위한 어댑터 제공), Output Adapter (타깃으로 전송되는 데이터를 처리하기 위한 어댑터 제공), Window (실시간 스트림 데이터로부터 특정 시간 또는 개수를 설정한 이벤트들을 메모리 상에 등록한 후 EPL 을 통해 결과를 추출)
-- 빅데이터 탐색 --
EDA (Exploratory Data Analysis)
Hive 하이브
정의 : SQL 과 유사한 방식으로 하둡 데이터에 접근 가능하게 함, SQL on Hadoop 제품
구성 : CLI (사용자가 하이브 쿼리를 입력하고 실행할 수 있는 인터페이스), JDBC/ODBC Driver (하이브의 쿼리를 다양한 데이터베이스와 연결하기 위한 드라이버 제공), Query Engine (사용자가 입력한 하이브 쿼리를 분석해 실행 계획을 수립하고 하이브 QL을 맵리듀스 코드로 변환 및 실행)
Pig 피그
정의 : 하이브와 유사한 목적으로 맵리듀스의 복잡성을 해결 SQL 대신 pig latin 언어를 제공
Spark 스파트
정의 : 하이브는 복잡한 맵리듀스를 하이브 QL(Query Engine) 로 래핑해 접근성을 높일 수 있었지만 맵리듀스 코어를 그래도 사용함으로써 성능면에서는 부족, 단점을 극복하기위해 스파크 사용. 고성능 인메모리 분석 과도한 디스크 I/O 를 줄이고 인메모리 에서 수행. 스파크의 분산 노드로 아파치 메소드, 하둡 얀 을 이용.
구성 : Spark RDD (스파크 프로그래밍의 기초 데이터셋 모델), Spark Driver/Executors (Driver 는 RDD 프로그램을 분산 노드에서 실행하기 위한 Task 를 실행관리, 분산노드의 스토리지 및 메모리 참조), Spark Cluster Manager (실행 환경을 구성하는 클러스터 관리자 Mesos, YARN, Spark Standalone), Spark SQL (SQL 방식으로 스파크 RDD 프로그래밍 지원), Spark Streaming (스트리밍 데이터를 마이크로타임의 배치로 나누어 실시간 처리), Spark MLib (머신러닝 프로그래밍 지원), Spark GraphX (다양한 유형의 네트워크 구조(SNS, 하이퍼링크 등) 분석을 지원)
Oozie 우지
정의 : 반복적이면서 복잡한 후처리 잡을 처리하기 위해 방향성 있는 비순환 그래프 (DAG : Direct Acyclic Graph) 로 정의해서 잡에 시작, 처리, 분기, 종료점 등의 액션 (Action) 으로 구성하는 워크플로
구성 : Workflow(주요 액션에 댛나 작업 규칙과 플로우를 정의), Client (서버에 전송하고 관리하기 위한 환경), Server (정보가 잡으로 등록되어 잡의 실행, 중지, 모니터링 등을 관리), Control Node (워크플로의 흐름을 제어하기 위한 star, end, decision 노드 등의 기능을 제공), Action Node (잡의 실제 수행 태스크를 정의하는 노드로서 하이브, 피그, 맵리듀스 등의 액션으로 구성), Coordinator (워크플로 잡을 실행하기 위한 스케줄 정책을 관리)
Hue 휴
정의 : 다양한 하둡의 에코시스템의 기능들을 웹 UI 로 통합 제공
구성 : Job Designer (우지의 워크플로어 및 코디네이터를 웹 UI 에서 디자인), Job Browser (등록한 잡의 리스트 및 진행 상황과 결과 등을 조회), Hive Editor, Pig Editor, HDFS Browser, Hbase Browser
Impala 임팔라
정의 : 하이브의 배치성 분석에 만족하지 못하고, 빅데이터 분석을 인메모리 기반의 실시간 온라인 분석
구성 : Impalad (하둡의 데이터노드에 설치되어 임팔라의 실행 쿼리에 대한 계획, 스케쥴링, 엔진을 관리하는 코어 영역), Query Planner (임팔라 쿼리에 대한 실행 계획을 수립), Query Coordinator (임팔라 잡리스트 및 스케쥴링을 관리), Query Exec Engine (임팔라 쿼리를 최적화해서 실행하고, 쿼리 결과를 제공), Statestored (분산 환경에 설치돼 있는 Impalad 의 설정 정보 및 서비스를 관리), Catalogd (임팔라에서 실행된 작업 이력들을 관리하며, 필요 시 작업 이력을 제공)
Zeppelin 제플린
구성 : Notebook, Visualization, Zeppelin Server, Zeppelin Interpreter
Mahout 머하웃
정의 : 머신러닝 기법을 이용해 데이터 마이닝을 수행
구성 : recommendation, calssification, clustering, supervised learning, unsupervised learning
Sqoop 스쿱
정의 : 특별한 전처리 없이 곧바로 HDFS 에 적재하거나, 반대로 HDFS 에 저장된 데이터를 RDBMS 로 제공해야 하는 경우 사용
구성 : client (데이터 임포트 및 익스포트 기능 수행 하기 위한 라이브러리로 구성), server (분산된 클라이언트 기능을 통합해 REST API로 제공), import/export (임폴트는 RDBMS -> HDFS 익스폴트는 반대), connectors (접속 어댑터와 라이브러리 제공), metadata (스쿱 서버를 서비스하는 데 필요한 각종 메타 정보를 저장)
'Software Science' 카테고리의 다른 글
[Linux] path 확인 별칭 (0) | 2018.04.01 |
---|---|
[Linux] 리눅스 명령어 모음 (0) | 2018.04.01 |
[Linux] vi&vim 편집기 설정하기 (0) | 2018.04.01 |
[Linux] 기초 리눅스 강좌 (0) | 2018.03.29 |
[Python] 2018.03.25 점프투파이썬 (0) | 2018.03.25 |