[빅데이터기초] 스파크란?
스파크란?
아파치 스파크는 마태자하리아가 UC 버클리에서 박사과정 논문의 일부로 개발한 강력한 오픈소스 처리 엔진입니다. 스파크는 오픈소스 분산 쿼리 및 처리 엔진으로, 유연성과 맵리듀스에 대한 확장성을 훨씬 빠른 속도로 제공하고 있습니다. 데이터가 메모리에 저장되어있을 경우에는 하둡보다 100배 빠르며, 디스크에 저장되어 있을 때에는 10배 빠릅니다.
스파크는 데이터를 읽고, 변형하고, 합계를 낼 수 있으며 복잡한 통계 모델들을 쉽게 학습하고 배포할 수 있다는 특징이 있습니다. 스파크 API는 자바, 스칼라, 파이썬, R, SQL을 이용해 접근할 수 있습니다. 어플리케이션을 빌드하는데 쓰일수도 있고, 여러 어플리케이션을 라이브러리로 묶어서 클러스터에 배포할수도 있으며, 파이썬 노트북을 통해 대화식으로 빠른 분석을 수행할 수 있습니다.
스파크 잡과 API
실행 프로세스
모든 스파크 애플리케이션은 여러 개의 잡을 가질 수 있는 하나의 드라이버 프로세스를 마스터 노드에서 실행합니다. 드라이버 프로세스는 아래 그림처럼 실행 프로세스들을 컨트롤하는데, 여러 태스크를 포함하고 있는 실행 프로세스들은 여러 개의 워커 노드로 태스크를 분산시킵니다.
드라이버 프로세스는 태스크 프로세스의 개수와 구성을 결정합니다. 태스크 프로세스는 하나의 잡 그래프에 기반해 실행 노드에 의해 컨트롤됩니다. 모든 워커 노드는 서로 다른 잡으로부터 받은 태스크를 실행할 수 있습니다.
스파크 잡에서의 객체 의존성은 비순환 방향성 그래프(DAG) 형태로 표현할 수 있습니다. 비순환 방향성 그래프는 스파크 UI상에서 아래와 같이 생성됩니다. 이 그래프를 기반으로 스파크는 스케줄링과 태스크 실행을 최적화할 수 있습니다.
RDD
스파크는 RDD(Resilient Distributed Datasets, 탄력적 분산 데이터셋)이라고 불리는 이뮤터블(immutable) 자바 가상 머신(JVM) 객체들의 집합으로 만들어져 있습니다. 이 객체들은 잡들이 매우 빠르게 연산할 수 있도록 메모리상에서 캐시되고 저장되고 계산됩니다. 이러한 스키마는 하둡과 같은 다른 전형적인 분산 처리 시스템과 비교해 빠른 연산을 가능하게 합니다.
또한 RDD는 map()
, reduce()
, filter()
와 같은 트랜스포메이션(transformation)을 제공하며, 다양한 연산을 수행하기 위해 하둡 플랫폼의 유연성과 확장성을 유지합니다. RDD는 병렬로 데이터에 트랜스포메이션을 적용하고 기록하는데, 이는 속도와 내구성을 향상시킵니다다. RDD는 트랜스포메이션별로 데이터의 흐름(data lineage)를 제공합니다. 이로 인해 RDD는 데이터 유실을 막을 수 있으며, RDD 일부의 파티션이 없어지더라도 추가적인 데이터 복구를 하지 않고 유실된 파티션을 재생산해낼 수 있는 충분한 데이터를 가지고 있습니다.
RDD에서 병렬 연산은 포인터를 새로운 RDD에 리턴하는 트랜스포메이션(transformation)과 연산 후에 값을 리턴하는 액션(action) 이렇게 두종류가 있습니다.
RDD 트랜스포메이션은 연산을 즉시 하지 않는다는 점에서 게으른 연산입니다. 트렌스포메이션은 액션이 실행되고 결과가 드라이버에 리턴되어야 할때만 수행됩니다. 실행을 지연시키려면 성능 측면에서 더욱 정교화된 쿼리를 수행할 수 있습니다. 최적화는 아파치 스파크 DAG 스케줄러(스테이지를 이용해 변형하는 스테이지 기반의 스케줄러)에서 시작됩니다. RDD는 트랜스포메이션과 액션이 분리되어 DAG 스케줄러의 경우 최적화를 쿼리상에서 수행할 수 있으며, 또한 데이터를 섞는 것 같은 상당한 리소스가 소모되는 작업을 피할 수 있습니다.
데이터프레임
RDD와 같이 데이터프레임은 클러스터상의 여러 노드에 분산된 이뮤터블 데이터 집합입니다. 그러나 RDD와는 달리 데이터프레임의 데이터는 칼럼명으로 이루어져 있습니다. (pandas의 데이터프레임과 비슷한 개념)
데이터프레임은 큰 데이터셋을 쉽게 처리하기위해 디자인되었다. 데이터프레임으로 데이터의 구조를 공식화할 수 있으며, 상위 계층에 대한 추상화도 가능하다. 이러한 점에서 데이터프레임은 관계형 데이터베이스의 테이블과 비슷하다. 데이터프레임은 부산 데이터를 다루기 위해 그리고 전문 데이터 엔지니어 뿐만 아니라 더 많은 사람들이 스파크에 접근할 수 있도록 하기위해 각 주제별 API들을 제공한다.
스파크 엔진은 최초에 논리적인 실행 계획을 작성하고 물리적 플랜에 의해 생성된 코드를 실행합니다. 이 물리적 플랜은 비용 옵티마이저(cost optimizer)에 의해 결정됩니다. 이는 데이터프레임의 가장 큰 장점 중 하나로, 자바나 스칼라에 비교해 파이썬에서는 상당히 느린 RDD와 다르게 데이터프레임은 모든 언어에 균일한 성능을 나타냅니다.
데이터셋
스파크 데이터셋의 목적은 사용자가 도메인 객체에서 트랜스포메이션을 쉽게 표현할 수 있는 API를 제공하고, 또한 견고한 스파크 SQL 실행 엔진의 성능과 장점을 제공하는 것입니다. 현재는 자바와 스칼라에서만 데이터셋이 사용 가능하다.
카탈리스트 옵티마이저
스파크SQL은 SQL 쿼리와 데이터프레임 API를 모두 강화시키기 때문에 아파치 스파크에서 가장 기술적으로 발전되고 디자인된 구성요소 중 하나입니다. 스파크 SQL 코어에는 카탈리스트 옵티마이저가 있습니다. 이 옵티마이저는 함수 프로그래밍 구조에 기반하고 있으며 두가지 목적을 위해 디자인되었습니다.
- 새로운 최적화 기술과 스파크 SQL 피처를 쉽게 추가하기 위해
- 외부 개발자들이 옵티마이저를 확장시킬 수 있도록 하기위해
프로젝트 텅스탠
텅스텐은 아파치 스파크 실행 엔진의 하위 프로젝트에 해당하는 코드 네임입니다. 이 프로젝트는 현재 하드웨어들의 성능을 최대한으로 활용하도록 해서 스파크 알고리즘을 향상시키는데 목적을 둡니다. 그로 인해 알고리즘 상에서 메모리와 CPU가 더 효율적으로 사용될 수 있도록 합니다. 그 외에 이 프로젝트는 다음 내용에 목적을 두고 있습니다.
- JVM 객체 모델의 오버헤드와 가비지 컬렉션이 제거되도록 메모리를 직접적으로 관리
- 알고리즘 디자인과 메모리 구조를 활용하는 데이터 구조 디자인
- 애플리케이션이 현재의 컴파일러를 활용하고 cpu에 최적화되도록 코드를 실행 시간에 생성
- 다중 cpu 호출을 줄일 수 있도록 가상 함수 디스패치를 제거
- 메모리 접근을 빠르게 하기 위해 로우 레벨 프로그래밍 활용
- 간단한 루프를 효과적으로 컴파일하고 실행하기 위해 스파크 엔진 최적화
'머신러닝 꿈나무 > 기본 개념' 카테고리의 다른 글
토큰화(tokenize)란? (0) | 2022.02.17 |
---|---|
[pyspark/빅데이터기초] Parquet(파케이) 파일 형식이란? (0) | 2021.11.17 |
켄달타우란? - 비모수적 상관계수에 대해서 (0) | 2021.05.24 |
주성분 분석(PCA)이란? (0) | 2021.03.03 |
맥북에서 딥러닝 개발환경 구축하기 - 아나콘다, oh-my-zsh, iterm2, jupyter lab 테마 설정하기 (0) | 2021.01.13 |
댓글
이 글 공유하기
다른 글
-
토큰화(tokenize)란?
토큰화(tokenize)란?
2022.02.17 -
[pyspark/빅데이터기초] Parquet(파케이) 파일 형식이란?
[pyspark/빅데이터기초] Parquet(파케이) 파일 형식이란?
2021.11.17 -
켄달타우란? - 비모수적 상관계수에 대해서
켄달타우란? - 비모수적 상관계수에 대해서
2021.05.24 -
주성분 분석(PCA)이란?
주성분 분석(PCA)이란?
2021.03.03