아래의 글은 T아카데미 아파치 스파크 입문 강의를 듣고 정리한 내용입니다
1강. Spark의 개념과 활용
1. Apache Hadoop이란?
- HDFS : 분산파일 시스템
- YARN : 다양한 어플리케이션을 돌릴때 클러스터역할을 해주는 관리자
- MapReduce : 하둡의 프로그래밍 패러다임
HDFS (Hadoop Distributed File System)
하둡에코시스템에서 분산파일시스템 지원
큰 파일들을 잘 저장하고 잘 처리할 수 있게 지원
여러곳에 분산해서 저장->신뢰성 보장
HDFS 구조
마스터노드 (NameNode) : 메타데이터 managing
슬레이브노드 (DataNode)실제로 데이터를 저장하게 되는 노드
큰 파일들을 블럭단위로 저장(default size : 64) -> 안정적으로 복구하기 위해서 Fault Tolerance보장
디스크 Fail, OS Fault로 인해서 노드가 죽게 될 경우?
HDFS는 블록을 COPY하는 방식으로 복구한다.
하나의 블록이 하나의의 노드에 존재하는게 아니라, 여러번 복제가 된다. (기본설정 3 copy)
특정 노드에 문제가 생겼을때 복구하기 위해서 (Fault Tolerance 보장)
MapReduce
하둡에코시스템의 기본적인 프로그래밍 패러다임
전통적인 병렬프로그래밍은 전문적인 스킬을 요구했고, 잘못 개발된 경우 전체 작업에 영향을 미칠 수 있었다.
그리고 한참 job을 돌리다가 다시 작업하거나 복구하는데 어려웠는데 mapreduce는 이걸 해결해주는 프레임워크
코드를 병렬적으로 돌려줄 수 있는 프로그램모델
맵과 reduce를 fuction을 구현하면 된다.
MapReduce 동작방식 예시
파일들이 블럭단위로 나뉘게 되고, 각각의 노드에서 map단계, reduce단계 실행
map단계 : 각 단어를 토크나이징해서 몇번씩 노출됐는지 count
reduce단계 : shuffling, 데이터를 섞음. map단계에서 처리한 내용을 하나로 모아 shuffle, sort로 원하는 형태로 리턴
2. Apache Spark이란?
기존의 mapreduce보다 더 빠르고, 여러가지 할 수 있도록 제공해주는 프레임워크
hadoop에서는 매번 요청이 있을때마다 디스크 io가 발생하는 문제 -> 이걸 메모리에서 처리해준다는게 컨셉
자바 스칼라 파이썬 알로 사용할 수 있다.
컴퓨터 클러스터에서 병렬프로세싱을 하는 라이브러리의 집합
- low-level API : RDD , 분산 variable
- 구조화된 데이터 API : Dataset, DataFrame, SQL
- Spark Streaming, 머신러닝 라이브러리,
MapReduce와 Spark의 차이
- MapReduce : 항상 데이터를 읽고 쓰고 하는 일을 반복 (디스크io증가)
- Spark : 메모리에서 연산 , 네트워크io,디스크io를 줄일 수 있다. 개발의 생산성 측면에서도 장점
Apache Spark의 역할
데이터분석 (머신러닝, 딥러닝 프레임워크도 제공)
실시간 스트리밍 데이터 처리 등등
여러가지 데이터소스를 연결해서 컴퓨팅해서 분석할 수 있도록 다양한 언어로 제공해준다.
Apache Spark 동작방식
클러스터 매니저에 의해서 여러가지 노드가 관리
드라이버 프로세스 생성 -> spark session 생성 -> 다수의 executors (리소스를 얼마 쓰겠다고 제출)
->할당받은 executors들에서 실제로 작성한 코드동작
데이터구조 : DataFrame
멀티 클러스터환경에서 데이터를 분산처리하는 것, 행과 열로 이루어진 테이블형식으로
Apache Spark 활용사례
데이터전처리, 집계를 할때 spark 많이 사용
실시간처리 (스트리밍 데이터처리) ,배치프로세싱(hive)
ml라이브러리를 통해 머신러닝 분석 등등
응답성이 좋고 interactive한 연산에 유용
Apache Spark, when not to use
분산병렬 컴퓨팅 엔진
그저 에코시스템, 단일로 쓰기보다 하둡을 붙인다거나 다른기술과 결합했을때 능력이 좋아짐
DB를 대체할 수 없음 - 데이터를 읽어올때 인덱스가 없어서 성능이 안나온다.
메모리 뿐만 아니라 CPU 스펙도 중요함
'Book & Lesson' 카테고리의 다른 글
[Spark강의3-2] Spark 데이터처리 실습1 - RDD개념 (0) | 2021.08.22 |
---|---|
[Spark강의3-1] Spark 데이터처리 실습1 (0) | 2021.08.22 |
[Spark강의2] Spark의 실시간/배치 (0) | 2021.08.18 |
[데엔스터디2] 데이터엔지니어링을 위한 데이터웨어하우스(RedShift) (0) | 2021.08.15 |
[데엔스터디1] 데이터팀과 데이터엔지니어 (0) | 2021.08.15 |
[데엔스터디0] 신청계기와 커리큘럼 그리고 얻고 싶은 것! (0) | 2021.08.14 |