Apache Spark
- Spark MapReduce 형태의 클러스터 컴퓨팅 패러다임의 한계를 극복하고자 등장
- MapReduce
- Disk로부터 데이터를 읽은 후 Map을 통해 흩어져 있는 데이터를 Key-Value 형태로 연관성 있는 데이터끼리 묶은 후에, Reduce를 하여 중복된 데이터를 제거하고, 원하는 데이터로 가공하여 다시 Disk에 저장
- 하지만 파일 기반의 Disk I/O는 성능이 좋지 못했고, In-memory의 연산을 통해 처리 성능 향상을 위해 Spark가 등장하였음.
- Apache Spark는 오픈소스이며, 범용적인 목적을 지닌 분산 클러스터 컴퓨팅 프레임워크
- Fault Tolerance & Data Parallelism을 가지고 클러스터들을 프로그래밍
- RDD, Data Frame, Set의 3가지 API를 제공
- 이러한 데이터를 바탕으로 In-memory 연산이 가능하며, 디스크 기반의 Hadoop에 비해 성능을 약 100배 정도 증가
- 우리가 실습을 하면, 실제로는 빠르지 않음. 우리가 현재 사용하고 있는 환경은 가상환경, 노드당 메모리가 2GB 되질 않음, CPU, RAM, 등등 모든 것이 다 가상환경에서 이루어지기 때문에 우리 실습은 느리다(실제로 Spark는 빠르다고 함)
- Spark는 Cluster들을 관리하는 Cluster Manager와 데이터를 분산 저장하는 Distributed Storage System이 필요
- Cluster Manager
- Spark Standalone, Hadoop의 YARN, Apache Mesos
- Distributed Storage System
- HDFS, MapR-FS, Cassandra, OpenStack Swift, Amazon S3, Kudu, custom solution 등
- 가장 많이 사용되는 Storage System는 Hadoop
- zlib and Bzip2와 같은 압축 알고리즘을 지원하며, Spark와 같은 머신에서 구동가능하기 때문
Cluster Manager
- Standalone
- Spark에 포함된 기본 리소스 매니저
- Yarn (Hadoop)
- Hadoop에 포함된 리소스 매니저
- Mesos
- Hadoop Mapreduce에 동작하는 매니저
- 현재 지원이 중단되어 사용하지 않는 것을 추천
- Kubernetes
- 가상화된 분산 컨테이너로 동작하는 매니저
PYSPARK는 SPARK 보다 성능은 떨어지지만 병렬처리가 가능하며 python 코드로 짤 수 있기에 더 많이 쓰인다.
- scala 프로그래밍 언어 기반의 Spark가 기능적으로 더 우수하다. 내부적으로 JVM 객체를 생성하기 때문에 호환성 측면에서 Scala가 좀 더 접근이 용이하다.
- 다만 활용성 측면에서 PYSPARK는 python에서 제공하는 Numpy, Pandas, SciKit Learn 등의 라이브러리가 사용 가능 하다는 장점이 있다.
Spark 데이터 구조
- Spark에서 데이터 구조는 RDD(Resilent Distributed Dataset), DataFrame, Dataset으로 구분
Spark RDD
- RDD는 Resilient Distribted Data의 약어로 탄력 있는 분산된 데이터를 뜻함
- RDD는 내결함성(Fault Tolerance) 기능을 가진 변경할 수 없는 객체의 분산된 컬렉션
- 좌측과 같이 Python에서 List 형태로 데이터가 있다면, Spark에서는 RDD라는 분할된 Dataset으로 나누고, 나눈 Dataset을 파티션이라 부름.
Spark Dataframe
- 현재는 RDD보다 Dataframe이 많이 사용된다.
- RDD는 스키마(데이터 구조)가 없기 때문에 구조화된 데이터를 처리 및 가공하기 위해선 테이블 형태로 표현하여 "행"과 "열"로 조작하는 게 편리함
- Dataframe으로 데이터를 구조화하고, 데이터의 타입을 정의하면, Spark SQL과 같은 기능을 통해 쉽게 데이터를 처리하고, 조작할 수 있음
- csv, txt, json 등 다양한 데이터를 읽어 올 수 있기 때문에 Spark에서 가장 많이 사용하는 자료구조 형태이다.
Spark Dataset
- DataFrame과 Dataset을 합쳐서 Dataset이라고 부르게 되었다.
- DataFrame은 Dataset [Row]로 표현이 되어 유형이 지정되지 않는 RDD의 모음으로 untyped API로 표현됨
- Spark Dataset는 DataFrame에서 확장된 형태로 typed API를 활용하여 컴파일 에러에 대응할 수 있음
- 프로그램에 오류가 있을 때(잘못된 필드명을 사용, int 타입에 String 연산 등) 프로그램을 실행하기 이전에 컴파일을 할 때 오류가 발생
- Dataset은 JVM 객체를 통해 동작하기 땜누에 Scala Spark에서만 지원하고, PySpark에서는 지원하지 않음.
'빅데이터 관리 > Hadoop' 카테고리의 다른 글
Spark 설치 (0) | 2023.05.19 |
---|---|
Hive - 2 (0) | 2023.05.16 |
Hive - 1 (0) | 2023.05.16 |
PIG 기본명령어 - 6 (0) | 2023.05.16 |
PIG 기본 명령어 - 5 (1) | 2023.05.16 |