-
apache spark 란BigData 2023. 1. 12. 07:20728x90반응형
스파크란
아파치 스파크는 대용량의 데이터를 분산처리하는 엔진입니다.
빅데이터의 시대에서 대용량의 데이터를 처리하기 위한 안정적인 분산 시스템과
고속도의 데이터 처리 시간을 보장하기 위하여 스파크는 등장하게 되었습니다.
스파크는 안정 + 고속 + 분산 처리 등의 소목표를 달성해야하는 데이터 처리 부분에 집중하며,
데이터의 저장과 관련된 영역은 다른 스토리지 엔진이난 하둡의 hdfs 같은 영역에서 담당하게 됩니다.
Driver Program
main 함수를 포함하는 스파크의 실질적인 프로그램입니다.
from pyspark.sql import SparkSession # Create SparkSession spark = SparkSession.builder \ .master("local[1]") \ .appName("SparkByExamples.com") \ .getOrCreate() # Create RDD from parallelize dataList = [("Java", 20000), ("Python", 100000), ("Scala", 3000)] rdd = spark.sparkContext.parallelize(dataList) rdd2 = rdd.map(lambda tup: (tup[0], tup[1] + 1)) rdd2.foreach(print)
대략 위와 같이 구성되는 Application 을 의미하는데,
데이터의 처리를 이렇게 저렇게 하겠다는 처리 내용이 기술됩니다.
이러한 처리 내용을 실행 계획 이라고 부르는데요.
드라이버 프로그램이 구동되면서 실행 계획이 작게 세분화되고, 각각의 물리적인 작업 단위 로 나뉘어집니다.
실행 계획은 특히 filter, map, flatmap 등과 같은 처리 로직을 동반한 부분을 기준으로 나뉘게 되고
이 영역이 물리적인 작업의 단위가 됩니다.
그리고 클러스터에서 해당 작업들을 분산 및 동시 처리하게 됩니다.
그리고 SparkContext 또는 SparkSession 이라고 불리는 객체가 실행 계획을 스파크 클러스터에게 전달하게 됩니다.
스파크 프로그램에서 가장 첫 줄에서 import 하게 되는 SparkContext, SparkSession 이 클러스터와의 연결을 책임지고 있습니다.
RDD
Resilient Distributed Dataset 의 약자입니다.
스파크에서 사용하는 데이터 처리의 단위인데,
단순히 데이터를 저장하는 변수의 느낌은 아닙니다.
제가 느끼기에 stream 과 유사한 성격이 많기 때문에 스트림의 설명과 함께 작성하도록 하겠습니다.
RDD 는 아래 예시처럼
var data = 1
단순한 저장소는 아니며,
Lazy 하게 데이터를 처리하기 위한 Stream 에 가깝습니다.
var textStream = fs.readFile("some file") var filteredBlankLineStream = fileStream.filter(text -> text.contains("")) var lineCount = filteredBlankLineStream.reduce(...)
textStream 과 filteredBlankLineStream 은 데이터를 담고 있는 변수는 아니지만,
특정 텍스트 파일의 텍스트 스트림을 가지고 있습니다.
파일이 비어있으면 스트림의 길이는 0 이고, 파일의 용량이 크다면 스트림 또한 처리한 데이터의 양이 많아지겠죠.
그리고 설정에 따라 lazy computation 또한 가능하며, 각각의 스트림은 immutable 한 특징 또한 있죠.
이러한 면이 RDD 와 Stream 의 유사한 면이라고 생각합니다.
분산 처리 모델
스파크의 클러스터 구조는 다른 분산 처리 시스템과 같이 Master Node, Worker Node 로 구성됩니다.
Master Node 는 Worker Node 들의 스케줄링과 가용상태를 체크합니다. 그리고 Worker Node는 Master Node 의 통제하에서 동작하게 됩니다.위에서 설명한 태스크를 수행하는 대상은 워커 노드입니다. 워커 노드의 Executor 가 드라이버 프로그램이 만든 태스크를 실행합니다.
워커 노드가 태스크를 수행하는 과정에서 지속적으로 현재 가용 상태를 마스터 노드에 공유합니다. 이를 heartbeat 라고 부르는데요.작업 중인 워커 노드에 장애가 생긴다면 heartbeat 의 알림이 중단될 것이고 마스터 노드를 heartbeat가 중단된 워커 노드를 장애 상태로 판단하여 다른 노드에 태스크를 할당시킵니다.
cluster manager
마스터와 워커 노드 사이의 통신은 클러스터 매니저가 담당합니다.
클러스터 매니저의 종류는
- YARN
- Mesos
- Kubernetes
- Standalone
등이 있으며, 각각 장단점을 가집니다.
상세한 특징은 다음 기회에 작성해보도록 하겠습니다.
여기서 standalone 상태로 스파크 클러스터를 구동시키면, 이땐 Master Node 와 Worker Node 가 직접적으로 통신을 시도합니다.
즉, 중간 브로커가 없는 셈이죠.
좋은 링크 있어서 공유합니다.
https://magpienote.tistory.com/221
반응형'BigData' 카테고리의 다른 글
Avro Serialization 알아보기. (0) 2023.10.05 Avro File 알아보기 (0) 2023.10.04 RabbitMQ 에 대해서 (0) 2023.04.09 hdfs (hadoop) 에 대해서 (0) 2023.01.11 RocksDB 알아보기 (0) 2021.12.15