Spark 란

박지은·2023년 5월 10일
0

Spark

목록 보기
1/2
post-thumbnail

데이터 분야 취준생으로서 드디어 스파크를 사용해 보게 되었습니다...!
진짜로 사용하기 전에 먼저 스파크가 무엇인지 알아보고 가려 합니다.

필요성

엄청나게 많은 양의 데이터가 저장된 DB등의 저장소로부터 많은 양의 데이터를 서버로 받아오기 위해서는 어떤 과정을 거칠 수 있을까요?

  1. 서버는 한대. 그러니 데이터에 순서를 매겨서 차례로 불러온다.
    offset과 limit을 설정해놓고 offset에 지정된 번호의 데이터부터 시작해서 Limit 개수 만큼 데이터를 불러올 수 있습니다. 이때, limit은 컴퓨터 한 대에서 처리할 수 있는 메모리 크기를 기준으로 설정해야 합니다.

  2. 시간이 너무 오래걸리니 서버 사양을 높여본다.
    CPU와 메모리등 컴퓨터의 사양을 높입니다. 이를 수직적 확장이라고 합니다.

  3. 그냥 기본 성능의 서버 여러대 구비해 놓고 한번에 불러온다.
    서버 여러대를 이용해 병렬로 한번에 많은 양의 데이터를 불러올 수 있도록 구성합니다. 이를 수평적 확장이라고 합니다.

데이터가 정말 큰데 나름 비용도 아끼고 싶다면 3번을 이용하는 것이 최선의 선택처럼 보입니다.
스파크에서 3번 방식으로 데이터를 어떻게 처리하는지 알아보기 전에, 빅데이터 처리의 기본인 맵-리듀스를 간단히 알아보겠습니다.

맵-리듀스 (=하둡의 핵섬 컴퓨팅 모델)

맵 리듀스는 대규모 데이터 집합을 처리하기 위한 분산 컴퓨팅 모델입니다.
주로 클러스터 컴퓨팅에서 사용되며, 대량의 데이터를 작은 작업 단위로 분할하고, 이를 여러 컴퓨터에 분산하여 병렬처리를 진행합니다.

두 개의 주요 단계입니다.

  1. 맵(Map)
  • 입력 데이터를 작은 조각으로 나누고, 각 작은 조각에 대해 독립적으로 합수를 적용해 중간 결과를 생성합니다.
  • 맵 함수는 특정한 작업을 수행하고 입력 데이터를 키-값 쌍으로 매핑하는 함수입니다.
  1. 리듀스(Reduce)
  • 맵 단계에서 생성된 중간 결과를 가져와 동일한 키 값들을 결합해 최종 결과를 생성하는 작업을 수행합니다.
  • 리듀스 함수는 이러한 값들을 합치는 등의 연산을 수행합니다.

장점

  • 데이터 병렬처리를 통해 대량의 데이터를 효율적으로 처리할 수 있습니다.
  • 하나의 컴퓨터에 장애가 발생해도 다른 컴퓨터에서 작업을 계속할 수 있는 내결함성을 제공합니다.

단점

  • 데이터 전송 비용이 높습니다. 중간에 결과를 디스크에 저장하고 다시 읽어오는 과정이 필요하기 때문에, 맵-리듀스 사이 데이터 전송이 발생합니다. -> 이는 대규모 데이터를 처리할 경우 높은 네트워크 비용과 디스크 I/O비용을 야기합니다!

스파크(Spark)

많은 양의 데이터를 빠른 속도로 처리할 수 있습니다.
오 그러면 하둡대신 스파크를 이용하면 되겠네요!
하둡과 스파크를 비교하기 전에 먼저 스파크가 무엇인지 알아보겠습니다.

스파크란?

인메모리 기반의 분산 컴퓨팅 프레임워크로서, 빠른 데이터 처리대화형 쿼리 기능을 제공합니다. 스파크는 데이터를 메모리에 유지하고 병렬 처리를 통해 작업을 수행하기 때문에 일반적으로 맵 리듀스보다 더 빠른 처리 속도를 보여줍니다.

그렇다면.. 어떻게 빠른 처리 속도를 보여줄 수 있을까요?

Spark RDD(Resilient Distributed Dataset)

스파크에서 이용하는 데이터를 처리하기 위한 탄력적인 분산 데이터셋 입니다.
RDD는 분산되어 저장되며 병렬로 처리되는 불변성(immutable)의 데이터 요소 집합입니다.

RDD의 주요 특징은 다음과 같습니다.

  1. 데이터 추상화: 스파크의 클러스터에서는 데이터를 하나의 파일처럼 다룹니다. 어떤 크기의 데이터를 가지고 오더라도 SparkContext 객체 하나로 여러 노드에서 똑같이 다룰 수 있습니다.

  2. 장애 복구 기능(Resilience): RDD는 내결함성을 가지고 있습니다. 즉, 데이터 요소가 손실되었을 경우, RDD는 장애 복구를 통해 원래의 상태로 복원 가능합니다. 이는 RDD가 변환되는 과정에서 변환 기록을 가지고 있어, 데이터 손실 시 이를 재계산하여 복구할 수 있는 것을 의미합니다.

  3. 지연 연산(Lazy Evaluation): RDD는 지연 연산을 수행합니다. 즉, RDD는 데이터 처리 작업을 실제로 수행하기 전까지 계산을 지연시킵니다. 스파크에서의 연산은 Transformation과 Action으로 구성되어 있는데, 실제로 Action 명령어 이전까지 Transformation은 실행되지 않습니다. 차곡차곡 기록해뒀다가 필요 시에만 최적화된 실행 계획을 세우고 Action을 수행합니다.

Spark vs Hadoop

  1. 데이터 처리 방식
    하둡디스크 기반의 처리 방식을 사용하여 데이터를 저장하고 처리합니다.
    반면, 스파크메모리 기반의 처리 방식을 사용합니다. 따라서 데이터를 메모리에 유지하고 병렬처리를 수행해 빠른 속도를 제공합니다.

  2. 대화형 쿼리 지원
    스파크대화형 쿼리 기능(SQL)을 제공해 실시간으로 데이터를 탐색하고 분석할 수 있습니다.
    반면, 하둡은 해당 기능을 제공하지 않습니다.

  3. 유연성
    스파크다양한 작업 유형과 데이터 형식을 지원하는 라이브러리와 API를 제공합니다.
    하둡은 주로 배치 처리에 특화되어 있으며, 대규모 데이터 처리에 이용됩니다.

이러한 특징으로 보았을때, 하둡은 대용량 데이터 처리와 내결함성이 필요한 경우에 적합하며, 스파크는 빠른 데이터 처리와 대화형 분석이 필요한 경우에 유용합니다.

Reference

[1] https://www.guru99.com/introduction-to-mapreduce.html
[2] https://www.analyticsvidhya.com/blog/2022/08/create-rdd-in-apache-spark-using-pyspark/

profile
Today I learned...

0개의 댓글