2022. 3. 6. 15:57ㆍAI/Big data
- 목차
Hadoop
정형 데이터 및 비정형 데이터를 효과적으로 처리하는 빅데이터 솔루션
빅데이터가 곧 하둡이라고 표현할 정도
하둡과 연동된 솔루션들을 포함하여 하둡 에코시스템으로 부름
서브 프로젝트들은 대부분 동물 이름과 관련되어 있고 이를 관리하는 것이 'zookeeper'
Hadoop?
여러 대의 컴퓨터 cluster에서 대규모 데이터 set을 분산 처리하는 framework
하둡분산처리 시스템과 MapReduce framework로 시작하여 저장, 실행, 프로그래밍 등을 처리하는 다양한 기능을 모두 포함한 것으로 발전하고 있음
분산 코디네이터
- zookeeper
- 서버 간의 상호 조정을 수행하는 system
- 분산 동기화, 그룹 서비스 등을 제공하여 분산처리 및 분산 환경을 구성하는 서버 설정을 통합 관리
- YARN
- 분산 리소스 관리
- 클러스터 리소스 관리를 위한 framework
- MapReduce, Hive, Impala, Spark 등 다양한 application은 YARN에서 작업을 실행
- HBase
- 데이터 저장(분산 DB)
- HBase는 구글 Bigtable을 기반으로 개발된 NoSQL DB
- Hadoop 및 HDFS 위에 Big talbe과 같은 기능을 제공
- HDFS
- 분산 file data 저장
- 분산 파일 시스템
- Kudu
- column based 스코리지
- 2015년 말 Apache 인큐베이션 프로젝트로 선정
데이터 수집
- Chukwa
- 분산 환경에서 생성되는 data를 HDFS에 안정적으로 저장/모니터링하는 platform
- HDFS 및 MapReduce에서 수집된 데이터를 활용하기 위한 모니터링 및 유현한 툴킷을 포함
- 데이터 수집
- Kafka
- 데이터 스트리밍을 실시간으로 관리하는 분산 시스템
- 대용량 event 처리를 위해 개발
데이터 처리
- Pig
- Hadoop에 저장된 데이터를 MapReduce 프로그램을 만들지 않고 SQL과 유사한 script로 처리
- MapReduce API를 단순화한 형태
- Spark
- 대규모 데이터 처리를 위한 엔진
- 병렬 application 처리를 위한 80개 이상의 고급 연산자를 제공
- Python, R 등에서 사용 가능
- Implala
- 하둡 기반 분산 엔진
- MapReduce 대신 C++로 개발한 in-memory 엔진을 사용
- Hive
- 하둡 기반
- Facebook에서 개발
- Java를 몰라도 데이터 분석을 도움
- map과 reduce로 데이터 분석 application을 구현
- e.g., word count
아주 많은 문서에서 단어의 출현 빈도를 계산
- map
- lambda word: (word, 1)
- reduce
- lambda a, b: a + b
input data들이 여러 partition으로 나눠져 각각의 map task들로 할당됨
map task들은 각 partition 내 문서들이 지닌 단어의 출현 빈도를 계산
이후 map들은 할당된 reduce task로 결과를 전달
reduce task는 전달 받은 결과를 합하여 output data를 산출
이 때 map task와 reduce task의 mapping은 'shuffle'이라는 과정을 통해 수행됨
shuffle은 map task들과 reduce task간 통신이 수행되기에 많은 'network' 통신을 발생함
map에서 reduce로 처리한 결과를 보낼 때는 map에서 처리한 것들 중 일부를 (여러) reduce로 보냄
골고루 보냄
Map Reduce runtime
Task scueduler가 여러 task executor들을 제어함
map과 reduce task들은 task scheduler에 의해 task executor에 할당되어 처리됨
- scheduling: job의 분배 scheduling
- fault tolerance: 한 곳에서 문제가 생겨도 재 처리를 통한 복구
- scalability: task의 증가가 문제가 되지 않음
- elasticity: 자원이 가용한 것이 시간에 따라 바뀔 시 최대한 활용 가능하게 수행 계획을 변경
Map Reduce의 한계
- map과 reduce로만 분리가능
- Spark등은 DAG를 지원하여 여러 task들을 다양한 방식으로 구성하여 수행할 수 있음
- MapReduce는 오직 map task와 reduce task만 가능
- 데이터 공유
- 분산 파일 시스템에 데이터를 저장하여 상태를 전달함
- 매우 느림!!
- Spark의 경우 RDD라는 in-memory dataset을 지원함
- RDD는 (Resil ient Distributed Datasets)
- 분산 파일 시스템에 데이터를 저장하여 상태를 전달함
map reduce에서 50개의 map task와 10개의 reduce task 간 총 몇 번의 데이터 전송이 발생하나?
-> 500번
한 개의 machine에서 4개의 map task와 2개의 reduce task를 동시에 수행할 수 있다.
job 실행은, map이 다 끝나고 reduce를 실행한다.
job은 48개의 map tasks와 24개의 reduce tasks이다.
모든 map task의 수행 시간이 동일 할 경우, 그리고 최대한 병렬화 한다고 하면, 최소 몇 개의 물리적 머신이 필요한가?
-> 12개
Spark
- MapReduce와 비교해 더 일반적인 데이터 처리 모델을 지원
- 다양한 데이터 분석을 통합
- 다양한 언어를 지원
- JAVA, Scala, Python, R
- Apache open source 재단에서 가장 확발히 개발
Spark 특징
- 일반적인 data-flow graph
- map, reduce가 아닌 다양한 operator를 사용
- operator가 graph 형태로 처리됨 (DAG)
- RDD (Resilient Distributed Datasets)라는 in-memory 지원
- 쉬운 programming interface
- map, reduce만 제공하던것에 비해 RDD의 다양한 변환을 표현
- 다양한 처리 지원
- batch 분석, stream 분석
- ML 분석
- SQL
- graph 분석 등
RDD (Resilient Distributed Datasets)
탄력있는 분산 데이터셋
- RDD는 cluster 내 여러 machine에 나눠져 저장되는 변치않는 object의 collection
- immutable
- 생성 이후 RDD의 특정 object만 변경할 수 없음
- RDD는 정적 type을 지님
- RDD operations
- transformation
- map, filter, groupBy
- actions
- count, collect, ...
- transformation
RDD 성질
- fualt 시 RDD 내 정보(lineage)로 자동 복구
- 변환은 lazy하게 실행됨
- 성능 최적화 가능
- Meterialization
- disk나 memory에 결과를 저장하고 사용 가능
- 재 계산 없이 저장된 결과를 이용
RDD 구조
- load
- transformation
- 분석 pipeline 기술
- store
Spark 역시 data를 처음 읽을 때는 분산 file system인 HDFS에서 read
결과 역시 HDFS에 저장함
중간 단계에서 flatMap, reduceByKey 등을 수행하면 RDD가 만들어짐
DAG example
textFile -> flatMap-> map -------> reduceByKey
\/
/ \
textFile -> flatMap-> map -------> reduceByKey
state 0은 textFile, flatMap, Map
state 1은 reduceByKey
분석 종류
배치 분석
저장되어 있는 많은 데이터를 한번에 처리
- 병렬화된 collection 생성
- HDFS에 file이 있는 경우 등
- RDD 변환
- RDD 내 각 원소 별 변환을 수행
- 입력에 대한 여러 처리르 수행
- Map
- FlatMap
- Filter
- RDD 내 각 원소 별 변환을 수행
- reduceByKey
- 각 key에 대해 data를 모음
- 동일 key 를 갖는 서로 다른 RDD들을 모아 하나의 결과로 생성
- Pair RDD 변환
- reduceByKey
- groupByKey
- keys
- values
- sortByKey
- join
- 두 RDD 사이 join을 수행하여 결과를 리턴
actions
결과를 만드는 operations
- collect
- RDD의 원소를 모두 모아 master인 driver program에 전달
- count
- RDD 내 원소 개수를 세어 리턴
- first(n)
- RDD 내 첫 번째 원소를 반환
- take(n)
- RDD에서 처음 n개 원소를 반환
- saveAsTextFile
- RDD 중 pair 형태의 RDD를 sequece file로 저장
'AI > Big data' 카테고리의 다른 글
hyperparameter tuning (0) | 2022.03.19 |
---|---|
Titanic data training (0) | 2022.03.19 |
Titanic data analysis (0) | 2022.03.19 |
Pandas DataFrame (0) | 2022.03.18 |
Pandas Series (0) | 2022.03.18 |