- 빅데이터 란?
- 옛날에는 분석이 불가능 했지만, IT 기술의 발전으로 다룰 수 있게된 방대한 양의 데이터. (ex: 교통정보, 검색정보, SNS, ... )
- (글로벌 빅테크 서비스가 생활화 되면서... 데이터가 터져나와 ㅎㅎ)
- (기존엔 전형화된 수치자료 중심 이였다면... 비정형의 문자,영상,위치 등등 다양한 데이터를 다룰수있게 되 ㅎㅎ)
- (즉, "주민번호-이름-나이-성별" 같은 개인식별정보 에서 더 나아가 ->"당신이 어디에서 무엇을하며~ 선호하는것이 뭔가?" 를 찾는식!)
- Volume(대용량) : large volume of data.
- Variety(다양성) : number and type of data sources. structured & unstructed.
- Velocity(급속성) : frequency of updates. real-time stream. batch processing.
- 빅데이터 활용예
- 1) ZARA : Supply Chain Analytics. 유통 데이터으로 예측을 최적화 시켜 매출 극대화.
- 2) 국세청 : 탈세 예방 시스템으로 국민 등골 쪽쪽 빨아먹기 ㅋㅋㅋ
- 3) 티맵 : 실시간 교통분석. 체증해소. 에너지절약.
- 4) 구글번역 : 도서정보 및 유엔 의회 자료 -> 64개의 언어 자동번역.
- 5) 신한카드 : 2200만명 정보 분석...
- 1) 하둡 (HDFS)
- Hadoop Distrituted File System
- 사용자 -> (200MB 데이터) -> Client -> NameNode
- =>> DataNodes
- Client :
- BLOCKSIZE : 요청받은 데이터를 블록단위(128MB or 64MB) 로 분리.
- REPLICATION : 각 블록을 분산저장 (보통 3-Copy)
- NameNode
- 블록단위의 데이터를 저장할 DataNodes 의 주소를 관리.
- 각종 메타정보 (블록,노드,...) 를 관리.
- SPOF (Single Point Of Failure) = 네임노드가 죽으면, HDFS 전체가 마비 됨...
- HEARTBEAT 및 BLOCKREPORT 기반으로 손상된 블록을 관리.
- DataNodes
- Client -[checksum|data]-> <-[ack]- DataNode
- 전송받은 블록을 Replication-Pipeline 에 따라 Packet(동일한 데이터집합) 저장.
- 저장완료 블록을 NameNode 에 통보.
- 주기적으로 HEARTBEAT 를 NameNode 에 전송.
- 주기적으로 BLOCKREPORT (체크썸을 기반으로 유효한 모든 블록 목록) 를 NameNode 에 전송.
- Hadoop Distrituted File System
- 2) MapReduce
- 맵리듀스 란?
- 대용량의 분산되어있는 데이터를 기반으로 자동화된 병렬처리를 하기위해~ 2004년 구글에서 발표한 프로그래밍 모델.
- 함수형 프로그래밍에서 일반적으로 사용되는 Map() 및 Reduce() 를 기반으로 구성.
- 예) Map(in_Key, in_Value) -> (k, v) list
- 분산되어 있는는 데이터를 key,value 쌍으로 묶는 과정!
- 예) Reduce(k, v list) -> (out_Key, out_Value) list
- 해당 key를 기준으로 (필터링&정렬) 데이터에서 결과를 추출하는 과정!
- 예) Map(in_Key, in_Value) -> (k, v) list
- 함수형 프로그래밍
- function : 변하지않는 정의역에 '값'을 받아서 -> 해당되는 치역에 '값'으로 처리.
- functional : immutable한 input을 -> (Parrelal하게) -> immutable한 output으로 처리.
- 동작(함수)를 정의해두고, IN&OUT을 개발하는 구조.
- 패러다임의 변화
- Transistor Vs Frequency
- CPU 속도의 물리적 한계 봉착!!!
- 무어의 법칙 : 트랜지스터 성능은 24개월마다 2배로 증가한다.
- 즉, 이젠 CPU Core를 늘려~ 병렬처리를 잘해야 한다.
- mutable VS immutable
- Multi-Thread 병렬처리를 잘하기 위해선, Thread-safe한 보장 해야한다.
- 하지만, 개발자가 직접 배타제어(Mutual Exclusion) 하는것은... 매우 고단해 왔다.
- 즉! immutable 하게 데이터를 다루는 Functional Language가 등장.
- input -> (function) -> output -> (function) -> output -> ...
- 각각에 State는 immutable 하기 때문에, 각각에 처리는 Thread-safe 함.
- 즉, 각각 독립적으로 병렬처리가 가능하여, Scalable이 아주 뛰어나게 됨.
- Transistor Vs Frequency
- 세부 단계 처리과정
- Splitting : 대량의 데이터를 분할하여 저장.
- 예) K1 = 첫번째 라인 , V1 = "Dear Bear River" 값 그자체. (일반적으로 키는 관련이 없는것? 으로 간주 된다고 함)
- Mapping : 분할된 데이터를 input으로 -> 처리후 -> output 결과들을 뽑아냄.
- 예) List(K2, V2) = [{"Dear": 1}, {"Bear": 1}, {"River": 1}]
- Shuffling : mapping 결과들의 (필터링후~) key를 해싱기준으로 정렬하여, 해당 values를 저장.
- 예) K2 = "Bear" , List(V2) = [1, 1]
- Reducing : shuffling 데이터를 input으로 -> 처리후 -> output 결과들을 뽑아냄.
- 예) K3 = "Bear" , V3 = 2
- 맵리듀스 란?
- 3) Hadoop Ecosystem
-
- https://www.analyticsvidhya.com/blog/2020/10/introduction-hadoop-ecosystem
- https://www.edureka.co/blog/hadoop-ecosystem
- https://inkkim.github.io/hadoop/Hadoop-Ecosystem이란
- Sqoop
- 각종 DBMS 데이터를 -> HDFS 으로 import/export
- 예) MySQL, Oracle, JDBC, DataWarehouse, NoSQL, ...
- Flume
- 각종 원천 혹은 실시간성 데이터를 수집 -> HDFS 으로 입수
- 확장성, 신뢰성(고성능), 다양성, 관리성, 개방성 등등의 강점을 지님.
- Zookeeper
- 분산 시스템의 클러스터에 자원을 관리.
- 이벤트 처리.
- ...
- HBase
- Column-Family 계열의 데이터베이스
- 대용량 데이터를 안정적으로 처리
- Hive
- HDFS 를 기반으로 '유사 SQL' 을 제공하는 데이터 웨어하우스
- select, join, group by, limit 등등 지원
- Pig
- '데이터 흐름' 기반의 (데이터를 처리하는) 스크립트 프로그래밍 언어
- Set, List, Array, Tuple 등등의 타입 제공
- Oozie
- 워크플로우 스케쥴링&모니터링 코디네이터. (XML 기반, DAG)
- HTTP, CLI, 웹UI 등등 제공.
- 다양한 Action-Node(잡 어플리케이션) 을 지원하고 제어 함. (MR, Pig, Hive, Java, ...)
- ...
-
-끝-
'MQ' 카테고리의 다른 글
SQS (0) | 2020.05.16 |
---|---|
RabbitMQ (AMQP) (0) | 2020.04.30 |
Elastic Stack 란? (1) | 2020.04.12 |
flafka (flume + kafka) (0) | 2019.06.08 |
kafka x zookeeper (0) | 2019.05.18 |