Spark 소개 및 특징
Spark 소개
- 스파크는 2011년 버클리 대학의 AMPLab에서 개발한 오픈 소스 범용 분산 클러스터 컴퓨팅 프레임워크
- 인-메모리 기반의 대용량 데이터 고속 분산 처리 시스템
- 범용적이면서도 빠른 속도로 작업을 수행할 수 있도록 설계한 클러스터용
- 메모리에 분산 저장, 병렬 처리 구조
- 최초 데이터 로드와 최종 결과 저장만 디스크 사용(스테이지에서 디스크에 저장할 때도 있음)
- 아파치 스파크 중심은 컴퓨팅 클러스터로 분할 가능한 불변적 객체 컬렉션을 나타내는 프로그래밍 추상화, 즉 탄력적 분산 데이터 집합(Resilient Distributed Dataset, RDD) 개념이다
- 스파크SQL은 구조적 데이터 처리에 초점을 두며, R과 파이썬(판다스)에서 사용한 데이터프레임을 사용한다
- 스파크SQL은 표준SQL 지원 외에 기본적으로 지원되는 JSON, HDFS, 아파치 하이브, JDBS, 아파치 ORC, 아파치 파케이(Parquet)를 포함한 다른 데이터 저장소에서의 읽기와 쓰기를 위한 표준 인터페이스도 제공한다
인-메모리 컴퓨팅
- 인-메모리 컴퓨팅은 전체 데이터를 메모리에 적재하여 사용하는 것을 의미(기존의 디스크 기반 컴퓨팅은 데이터를 하드디스크에 저장하고 관리)
- 디스크 기반 컴퓨팅에서는 데이터를 하드디스크에 보관/처리 하고, 빈번하게 사용되는 일부 데이터를 메모리에 캐싱하는 구조라고 하면, 인-메모리 컴퓨팅은 데이터를 메모리에 보관/처리하고 하드디스크를 데이터의 안전한 보관(stash)하기 위해 사용하는 구조다.
- 연산 플랫폼이자 스트림 처리를 효과적으로 수행
Hadoop VS Spark
- 디스크 입출력 방식을 인-메모리 데이터 처리 방식으로 전환하여, 기존 디스크 입출력에 대한 지연 시간 개선
- 메모리를 사용하여 반복적인 작업이나 스트리밍 데이터를 효율적으로 처리 스파크는 최초 로드 및 최종 저장만 디스크에 I/O가 발생하며, 각 단계(스테이지)는 메모리에 저장 함
- 기존 맵리듀스 디스크 입출력 방식보다 평균 10~100배 정도의 속도 향상
지원 기능
- 맵리듀스와 유사한 일괄처리(배치)
- 실시간 데이터 처리(Spark Streaming)
- SQL과 유사한 정형 데이터 처리(Spark SQL)
- 그래프 알고리즘(Spark GraphX)
- 머신러닝 알고리즘(Spark MLlib)
Spark 특징
Speed | 인-메모리 기반의 빠른 처리 |
Ease of Use | 다양한 언어 지원(Java, Scala, Python, R, SQL)을 통한 사용의 편의성 |
Generally | SQL, Streaming, 머신러닝, 그래프 연산 등 다양한 컴포넌트 제공 |
Run Everywhere | YARN, Mesos, Kubernetes 등 다양한 클러스터에서 동작 가능 |
HDFS, Cassandra, HBase 등 다양한 파일 포맷 지원 |
Spark 지원 언어
Spark 프로그래밍
- 스파크 애플리케이션은 스칼라, 자바, 파이썬(PySpark), R로 구현 가능
- 각 언어로 스파크SQL을 실행
- 스칼라
- 객체 지향 언어의 특징과 함수형 언어의 특징을 함께 가지는 다중 패러다임 프로그래밍 언어
- 스칼라는 자바 가상머신(JVM)에서 동작하는 JVML언어
- JVML(Java Virtual Machine Language)언어는 자바 가상머신 위에서 동작하는 언어들로 Scala, Kotlin, Groovy 등
- 스파크 쉘
- 데이터를 대화식으로(인터프린터) 분석하는 대화형 쉘을 제공