1.1 스파크란?
아파치 스파크는 고속 범용 분산 컴퓨팅 플랫폼이며, 하둡의 맵리듀스의 대안책으로 나온 기술
범용 분산 컴퓨팅 플랫폼이라는 점에서 하둡과 유사하지만, 대량의 데이터를 메모리에 유지하여 성능을 끌어올림
※ 하둡 : 분산 컴퓨팅용 자바 기반 오픈소스 프레임워크로, 하둡 분산 파일 시스템(Hadoop Distributed File System, HDFS)와 맵리듀스 처리 엔진으로 구성
최초의 스파크는 UC 버클리 AMPLab에서 개발되었으며, 오픈소스로 공개되었음
초기 개발자들은 창업하여 데이터브릭스 클라우드라는 스파크 기반의 빅데이터 분석 솔루션을 상용화함
스칼라는 파이썬, 자바, 스칼라, R 언어까지 지원해 사용자를 광범위하게 포용할 수 있게 만듬
많은 기능을 제공하지만 아래에 해당되는 일부 애플리케이션에서 사용하기 적합하지 않음
- 단일 머신에서도 충분히 처리할 수 있는 데이터 셋을 다룰 때
- 분산 아키텍처로 인해 처리 시간에 약간의 오버헤드가 필연적으로 발생
- 대량의 원자성 트랜잭션을 빠르게 처리해야하는 작업 (ex. 온라인 트랜잭션 처리(OnLine Transaction Processiong, OLTP) )
- 스파크 설계시 고려 대상이 아니였음
반면 일괄 처리 작업이나 데이터 마이닝 같은 온라인 분석 처리(OnLine Analytical Processiong, OLAP) 작업에는 적합
하둡의 맵리듀스는 잡의 결과를 다른 잡에서 사용하려면 결과를 HDFS에 저장해야 된다는 문제가 있음
( 맵리듀스는 이전 잡의 결과가 다음 작업의 입력이 되는 반복 알고리즘에 본질적으로 적합하지 않음 )
스파크는 필요한 데이터를 디스크에서 매번 가져오는 대신, 데이터를 메모리에 캐시로 저장하는 인-메모리 실행 모델을 사용함
1.2 스파크를 구성하는 컴포넌트
스파크를 구성하는 컴포넌트는 다음과 같음 ( 각각의 컴포넌트에 대한 자세한 설명 생략 )
그림의 가운데에 있는 스파크 코어는 스파크 잡과 다른 스파크 컴포넌트에 필요한 기본 기능을 제공하는 역할을 하며,
스파크 API의 핵심 요소인 RDD(Resilent Distributed Dataset)을 사용함
RDD는 분산 데이터 컬렉션(= 데이터 셋)을 추상화한 객체로 데이터 셋에 적용할 수 있는 연산 및 변환 메서드를 함께 제공하며,
장애가 발생해도 데이터셋을 구성할 수 있는 복원성을 갖추고 있음
1.3 스파크 프로그램의 실행 과정
HDFS 클러스터에 분산 저장된 파일들이 있다면 잡 실행시 다음과 같은 과정이 발생함
- 대상 파일이 저장된 각 HDFS 클러스터의 메모리로 파일 로드 ( 디스크 -> 메모리 )
데이터 지역성을 최대한 달성이 목표 - RDD API를 통해 필요한 데이터 추출
RDD의 컬렉션을 필터링, 매핑, 리듀스, 다양한 연산 작업 등을 수행 가능 - cache 함수를 호출하여 추후 다른 잡을 수행할 때 RDD가 메모리에 유지되도록 지정
필요 데이터만 메모리에 저장하고 재사용
1.4 스파크 생태계
스파크는 하둡의 생태계에 있는 여러 컴포넌트를 대체할 수 있는 수단으로 사용할 수 있음
데이터 변환 및 조작 함수를 제공하는 분석 도구는 대부분 스파크에서 대체 가능하며,
경쟁적인 관계에 있는 컴포넌트들도 존재함
1.5 가상 머신 설정
실행하는 가상 머신의 환경(소프트웨어 스택)은 다음과 같음
- 64비트 우분투 OS( version : 14.04.4 )
- 자바 8
- 하둡 2.7.2
- 스파크 2.0
- 카프카 0.8.2
가상 머신을 시작하기 위해서 오라클 VirtualBox와 Vagrant(베이그런트)를 설치해야함
- VirtualBox - https://www.virtualbox.org/wiki/Downloads 에서 다운로드 후 설치
- Vagrant - mac OS의 터미널에서 아래 명령어 수행
brew install vagrant
이후 가상 머신 설치 과정
# 1. JSON 형식의 베이그런트 박스 메타데이터 파일을 내려받음
$ wget https://raw.githubusercontent.com/spark-in-action/first-edition/master/spark-in-action-box.json
# 2. 가상 머신 다운로드
$ vagrant box add --name manning/spark-in-action spark-in-action-box.json
# 3. spark-in-action 인 가상 머신 등록
$ vagrant init manning/spark-in-action
# 4. 추가된 Vagrantfile 파일에 아래 내용 삽입
$ vim Vagrantfile
# 추가할 내용
config.vm.network "private_network", ip: "192.168.10.2"
config.vm.network "public_network"
# 5. 가상 머신 시작
$ vagrant up
vagrant up 명령어 이후 네트워크 인터페이스를 연결해야함
위와 같이 사용 중인 네트워크에 연결하면 됨
추가적으로 가상 머신 관련 명령어
# 가상 머신 중지
$ vagrant halt
# 가상 머신 제거
$ vagrant destory
# 가상 머신을 생성하는데 사용한 베이그런트 박스 파일을 삭제
$ vagrant box remove manning/spark-in-action
'빅데이터 > spark' 카테고리의 다른 글
Spark in Action - 3장 스파크 애플리케이션 작성하기 (0) | 2021.09.15 |
---|---|
Spark in Action - 2장 스파크의 기초 (0) | 2021.09.15 |
Spark in Action - 0장 책 목차 소개 (0) | 2021.09.11 |