러닝 스파크 - 1장

Jajuna_99·2023년 3월 25일
0

러닝 스파크

목록 보기
2/8

1장 아파치 스파크 소개: 통합 분석 엔진

스파크의 역사와 철학, 프로젝트의 핵심 컴포넌트, 분산 아키텍처를 배우는 장이다.

스파크의 시작

빅데이터와 구글에서의 분산 컴퓨팅

엄청난 양의 데이터를 색인하고 검색할 새로운 접근 방식이 필요했다.

  • 구글 파일 시스템 (Google File System) : 클러스터 안에서 사용 서버에 장애 내구성이 있는 분산 파일시스템을 제공
  • 빅테이블 (BigTable) : GFS 기반으로 구조화된 대규모 데이터의 저장 수단 제공
  • 맵리듀스 (MapReduce) : 함수형 프로그래밍 개념을 기반으로 하여 GFS와 빅테이블 위에서 대규모 데이터 분산 처리가 가능한 새로운 병렬 프로그래밍

야후!에서의 하둡

컴퓨터 차원의 과제와 해결책은 하둡 파일 시스템(Hadoop File System, HDFS)과 분산 컴퓨팅 프레임워크로서의 맵리듀스 구현에 대한 청사진을 구글의 GFS 논문에 개제됐다.

그리고 2006년에 아파치로 이관되면서 관련 모듈은 하둡 프레임워크의 일부가 되었다.

여러 시스템에 사용되고 오픈 소스 기여자들이 참여했지만 HDFS에서 돌아가는 맵리듀스 프레임워크에는 몇 가지 단점이 있다.

  1. 번거로운 운영 복잡도로 인해 관리가 쉽지 않았다.
  2. 일반적인 배치 처리를 위한 맵리듀스 API는 장황하고 많은 양의 기본 셋업 코드를 필요로 했으며, 장애 대응은 불안정했다.
  3. 방대한 데이터 작업을 수행하면서 많은 MR 태스크가 필요해지면 각 태스크는 이후의 단계들을 위해 중간 과정의 데이터를 로컬 디스크에 써야 했다.
  4. 하둡 MR은 일반적인 배치 처리를 위한 대규모 작업에는 적당하지만 머신러닝이나 스트리밍, 상호 반응하는 SQL 계통의 질의 등 다른 워크로드와 연계해 쓰기에는 한계가 있다.

새로운 종류의 워크로드를 다루기 위해 용도에 맞는 시스템들이 개발되었다.
(Hive, Storm, Impala, Giraph, Drill, Mahout 등...)

AMP 랩에서의 스파크 초창기

하둡 MR을 더 간편하고 빠르게 만들기 위해 버클리 연구원(RAD -> AMP -> RISE 랩)들은 스파크 프로젝트를 시작했다.

스파크의 핵심 개념은 하둡 맵리듀스에서 차용한 아이디어지만, 더 뛰어난 시스템을 제공하기 위해, 더 높은 장애 내구성을 갖게 하고, 병렬성을 극적으로 높여, 반복적이고 상호 작용이 많은 맵리듀스 연산을 위한 중간 결과를 메모리에 저장한다던가, 프로그래밍 모델로 쉽고 구성이 간편한 API를 다양한 언어로 제공하며 다양한 워크로드를 통일성 있게 지원하도록 했다.

아파치 스파크란 무엇인가?

아파치 스파크는 데이터 센터나 클라우드에서 대규모 분산 데이터 처리를 하기 위해 설계된 통합형 엔진이다.

중간 연산을 위해 메모리 저장소를 지원, 하둡 맵리듀스보다 훨씬 빠르게 동작할 수 있다.

MLlib, 스파크 SQL, 스파크 스트리밍, 그래프 처리 등을 쉽게 사용 가능한 API들로 이루어진 라이브러리를 갖고 있다.

다음 4개의 소분류들은 스파크 설계 철학이다.

속도

  1. 하드웨어, 소프트웨어 덕에 스파크 프레임워크는 이러한 요소들에서 이득을 얻을 수 있도록 최적화 되어 있다.

  2. 질의 연산을 방향성 비순환 그래프(DAG, directed acyclic graph)로 구성한다. 이 DAG의 스케줄러와 질의 최적화 모듈은 효율적인 연산 그래프를 만들어서 각각의 태스크로 분해, 클러스터의 워커 노드 위에서 병렬 수행될 수 있도록 해 준다.

  3. 물리적 실행 엔진 텅스텐(Tungsten)은 전체적 코드 생성(whole-stage code generation)이라는 기법을 써서 실행을 위한 간결한 코들를 생성한다.

  4. 모든 중간 결과는 메모리에 유지되며, 디스크 I/O를 제한적으로 사용해 성능이 향상된다.

사용 편리성

유연한 데이터 세트(resilient distributed dataset, RDD)라 불리는 자료구조를 구축해 단순성을 실현했다.

연산의 종류로서 트랜스포메이션액션의 집합으로 프로그래밍을 단순하게 했다.

모듈성

스파크 연산은 지원한느 모든 프로그래밍 언어로 표현할 수 있다.

문서화가 잘 되어있고, API로 통합 라이브러리를 제공한다. 핵심 컴포넌트로는 스파크 SQL, 정형화 스트리밍, MLlib, GraphX가 있다.

확장성

저장과 연산을 모두 포함하는 아파치 하둡과는 잘리 스파크는 이 둘을 분리하였다.

API를 사용하여 여러 데이터 소스에서 데이터를 읽어 들여서 논리적인 데이터 추상화 레벨에서 처리할 수 있도록 확장 가능하다.

통합된 분석

통합 : 스파크에 있어서 설계 철학과 진화를 나타내는 핵심 개념

하나의 단일 분산 처리 엔진 위에서 다양한 워크로드를 처리할 수 있는 통합된 컴포넌트 스택으로 스파크가 스톰, 임팔라, 드레멜, 프레겔 등 모든 개별적 배치 처리, 그래프, 스트리밍, 질의 엔진 등을 대체할 수 있다.

단일화된 스택으로의 아파치 컴포넌트

스파크는 스파크 SQL, 정형화 스트리밍, MLlib, GraphX를 제공하되 이 컴포넌트들은 스파크의 중심 장애 대응 엔진과는 별도로 존재, API를 써서 스파크 애플리케이션을 만들면 스파크 코어 엔진이 적절한 DAG로 변환해 실행해 준다.

그래서 어떤 언어를 쓰든 스파크 코드로 작성해 정형화 API를 사용하더라도 바이트코드로 변환 되어 클러스터 전체에 나뉘어 워커 노드의 JVM에 실행된다.

스파크 SQL

RDBMS, 구조화된 파일 포맷(CSV, txt, JSON 등)에서 데이터를 읽어 들일 수 있다.

그 데이터로 스파크에서 영구적이거나 임시적인 테이블을 만들 수 있다.

여러 언어로 스파크 정형화 API를 사용하여 SQL 계통의 질의를 써서 데이터를 바로 DF로 읽어 들일 수 있다.

스파크 MLlib

범용 머신러닝 알고리즘들을 포함한 라이브러리들이 들어있다.

2.x 대의 엔진 개선 후 비약적인 성능 상승이 있었다.

이 API들은 특성 추출, 변형, 파이프라인 구축, 배포 동안 모델을 보존해둔다. (저장 & 재로드를 위해)

그 외의 추가적인 도구들은 일반적인 선형대수 연산을 사용하게 해 준다.

스파크 정형화 스트리밍

스파크 SQL 엔진과 DF 기반 API 위에 연속적인 스트리밍 모델과 정형화 스트리밍 API이다.

구조적인 내용은 뒷 장에서 보자

GraphX

그래프를 조작하고, 그래프 병렬 연산을 수행하기 위한 라이브러리이다.

분석, 연결 탐색 등의 표준적인 그래프 알고리즘을 제공하며 커뮤니티의 사용자들이 기영한 페이지랭크, 연결 컴포넌트, 삼각 집계 등의 알고리즘도 포함하고 있다.

아파치 스파크의 분산 실행

어떻게 스파크의 분산 아키텍처 위에서 모든 컴포넌트들일 같이 동작하면서 서로 통신하는지, 어떤 식으로 배포가 가능한지를 알아보자

스파크 아키텍처는, 하나의 스파크 애플리케이션은 스파크 클러스터의 병렬 작업들을 조율하는 하나의 드라이버 프로그램으로 이루어진다.

드라이버는 SparkSession 객체를 통해 클러스터의 분산 컴포넌트들(스파크 이그제큐터와 클러스터 매니저)에 접근한다.

스파크 드라이버

스파크 드라이버의 역할

  • SparkSession 객체 초기화
  • 클러스터 매니저와 통신
  • 스파크 이그제큐터들을 위해 필요한 자원 요청
  • 모든 스파크 작업을 DAG 연산 형태로 변환, 스케줄링
  • 실행 단위를 태스크로 나누어 이그제큐터들에게 분배
  • 자원 할당 후 이그제큐터와 직접 통신

SparkSession

모든 스파크 연산과 데이터에 대한 통합 연결 채널

이전에 엄청나게 많던 연결 API들을 통합했고 작업도 간편화 시켰다.

JVM 실행 파아미터 생성, DF나 데이터세트 정의, 데이터 소스에서 데이터 읽기, 메타데이터에 접근, 스파크 SQL 질의를 실행

클러스터 매니저

스파크 애플리케이션이 실행되는 클러스터에서 자원을 관리 및 할당하는 컴포넌트

현재 스파크는 네 종류의 클러스터 매니저를 지원한다.

  • 내장 단독 클러스터 매니저
  • 아파치 하둡 얀
  • 아파치 메소스
  • 쿠버네티스

스파크 이그제큐터

클러스터의 각 워커 노드에서 동작하는 컴포넌트.

드라이버 프로그램과 통신하며 워커에서 태스크를 실행하는 역할을 한다.

대부분의 배포 모드에서 노드당 하나의 이그제큐터만이 실행된다.

배포 모드

여러 다른 환경에서 다른 설정으로 돌아갈 수 있도록 다양한 배포 모드를 지원한다.

분산 데이터와 파티션

실제 물리적인 데이터는 HDFS나 클라우드 저장소에 존재하는 파티션이 되어 저장소 전체예 분산된다.

데이터가 파티션으로 되어 물리적으로 분산되면서, 스파크는 각 파티션을 고수준에서 논리적인 데이터 추상화, 즉 메모리의 DF 객체로 바라본다.

profile
Learning bunch, mostly computer and language

0개의 댓글