-
Spark IntroDataEngineering/Spark 2021. 7. 26. 05:38
스파크란 뭐고 얘가 나타난 이유가 뭘까?!
먼저 하둡의 mapreduce의 한계를 짚어보면- 디스크 IO 에 따른 느린 속도
- 반복적인 알고리즘(머신러닝 / 그래프&네트워크 분석 등), 대화형 데이터 마이닝 에 비효율적인 직렬화
- word count를 생각해보면 한번 배치 처리 해라! 하고 엔터 때리면 user는 가만히 기다리는 것 말고 할 수 있는게 없음
- 진행되는 동안 쿼리 응답 등 받고싶어!
- 통신 비용 높음 ; 하둡은 기본적으로 network bottleneck이 잦다고 하다. 메모리를 효율적으로 쓰지 못함
- 맵리듀스 프로그램으로는 구현이 어려움 (실제로 하둡에서의 Mapreduce javac 소스코드랑 스파크에서 구현하는 소스코드 비교해보면 스파크로 개발하는게 훨씬 쉬워진 것을 볼 수 있음)
- 그니까 데이터를 메모리에 로드하고 디스크를 SSD로 대체하자 !
disk보다 memory가 더 빠르고, memory위에서 데이터가 운영될 때 더 빠르다.
in memory가 더 빠르단다 - 오픈소스 클러스터 컴퓨팅 프레임워크
- 맵리듀스 확장
- 메모리 위에서 돌아감
- 분산병렬처리
로지스틱 회귀를 하둡이랑 스파크에서 돌릴 때 속도 차이 💥 데이터를 분산병렬처리한다는 점에서 하둡과 유사하지만 메모리 기반으로 데이터를 운영함으로써 속도를 극적으로 끌어올리고, 다양한 언어와 프레임워크를 지원하는 종합선물세트같은 느낌이라고 할 수 있겠다.
우리 애는 장점이 많아요 ❔ 클러스터 : 여러 컴퓨터들의 자원을 가지고 하나의 컴퓨터처럼 사용하는 것(master - slave 구조)
💥 스파크 구성요소들 !!
스파크 클러스터 인프라 💥 SparkContext
- Main함수의 entry point --> spark 함수들 동작
- 스파크가 어디로 어떻게 클러스터에 접근해야하는지 알려줌으로써 스파크 클러스터로 연결
- RDD를 생성하고 변수들을 브로드캐스팅
❔ 브로드캐스팅 : 송신 호스트가 전송한 데이터가 네트워크에 연결된 모든 호스트에 전송되는 방식
💥 Driver program
- SparkContext 객체가 코디네이팅하는 main process
- 구체적인 파라메터들로 Spark process를 구성
- 스파크 액션들은 이 Driver에서 실행됨
- Application = Driver program + Executors
💥 Cluster manager
- SparkContext와 Executor 사이에서 통신하면서 리소스들(CPU, memory 등) 관리
- Standalone, YARN, Mesos, Kubernetes
- Deploy mode ; 배포 환경에서 드라이버가 실행되는 위치를 지정한다.
- Client (default)
- driver daemon은 스파크 작업을 클러스터에 제출하는 시스템에서 실행된다.
- 스파크를 interactive하게 사용할 때 좋음 (스파크한테 user input 줄 때나 쉘 커맨드 쓸 때)
- driver daemon에 대해 클러스터의 리소스를 예약하지 않으려는 경우
- Cluster
- driver runs on a random node in a cluster
- 스파크 job interactive하게 사용 X
- driver daemon process가 클러스터에서 실행 중이기 때문에 리소스들을 예약해야 함
- Client (default)
ex. Standalone ; 따로 리소스 매니저 프로그램 설치 없이 스파크에서 자체적으로 가지고 있는 리소스 매니저
서버 1대에 cluster 구성하는 시나리오 ex. Yarn ; 여러 대의 서버를 관리해줄 매니저가 필요할 경우 하둡 에코시스템 내에 있는 Yarn 리소스 매니저 사용
- 여러 대의 워커 서버가 데이터 로드/저장 등 공통으로 사용하는 파일시스템으로 HDFS 사용
- 파일시스템도 분산 저장, 한꺼번에 로드해서 application 개발 가능
서버 4대로 cluster 구성하고 yarn으로 리소스 매니징하는 시나리오 💥 Worker node
- 클러스터에서 어플리케이션 코드를 실행할 수 있는 모든 노드
- Executor ; worker node 에서 애플리케이션을 위해 시작된 process
- ; 작업을 실행하고 메모리 또는 디스크 스토리지에 데이터를 보관
- Task ; 하나의 executor에 보내질 작업 유닛
스파크 공식 도큐먼트 상당히 유용함
'DataEngineering > Spark' 카테고리의 다른 글
Spark RDD, DataFrame, Dataset (0) 2021.07.26