spark 데이터 시스템 아키텍처

데이터 병렬 처리 가능성 조건

  1. 데이터 분산
       - **하둡 맵의 데이터 처리 단위:** 하둡에서는 데이터를 먼저 분산시켜야 합니다. 맵리듀스에서의 데이터 처리 단위는 디스크에 있는 데이터 블록으로, 일반적으로 128MB 크기입니다. 이 크기는 `hdfs-site.xml`의 `dfs.block.size` 프로퍼티에 의해 결정됩니다.
       - **Spark에서의 파티션:** Spark에서는 데이터를 파티션으로 구분합니다. 기본적으로 파티션의 크기도 128MB(조절 가능)이며, 이는 `spark.sql.files.maxPartitionBytes` 프로퍼티에 의해 설정됩니다. 이 프로퍼티는 주로 HDFS 등에 있는 파일을 읽어올 때 적용됩니다.

  2. 동시 처리
       - **맵리듀스에서의 처리:** 맵리듀스에서는 N개의 데이터 블록으로 구성된 파일을 처리할 때 N개의 Map 태스크가 동시에 실행됩니다.
       - **Spark에서의 처리:** Spark에서는 데이터가 파티션 단위로 메모리에 로드되어 Executor에 배정되어 동시에 처리됩니다. Executor는 클러스터에서 실행되는 독립적인 작업 단위입니다.

 

spark 데이터 처리 흐름

  • 파티션 구성:
    • 작은 파티션: 데이터프레임은 작은 파티션들로 구성됩니다. 이는 데이터를 효율적으로 처리하기 위한 작업 단위로, 작은 단위로 데이터를 분할하여 병렬 처리를 가능케 합니다.
  • 불변성 (Immutable):
    • 데이터프레임의 불변성: 데이터프레임은 한 번 생성되면 수정할 수 없는 불변성을 가지고 있습니다. 이는 새로운 데이터프레임이 필요할 때 기존 데이터프레임을 변경하는 대신 새로운 데이터프레임을 생성하는 방식으로 동작합니다.
  • 변환 작업:
    • 다양한 변환 작업: 입력 데이터프레임을 원하는 결과까지 다른 데이터프레임으로 계속 변환할 수 있습니다. 이러한 변환 작업에는 sort, group by, filter, map, join 등이 포함됩니다.



셔플링 (Shuffling):

  • 셔플링 발생 상황:
        - 명시적으로 파티션을 변경하는 경우 (예: 파티션 수를 줄일 때)
        - 시스템에 의해 이뤄지는 셔플링 작업, 예를 들면 그룹핑(aggregation)이나 정렬(sorting)과 같은 작업이 있을 때

  • 셔플링이 발생할 때 네트웍을 타고 데이터가 이동하게 됨
        - 셔플링이 발생하면 파티션 간에 데이터 이동이 필요합니다. 이때 네트워크를 통해 데이터가 이동하게 됩니다.
        - 몇 개의 파티션이 결과로 만들어질까?
        - 셔플링이 발생할 때 최종적으로 몇 개의 파티션이 결과로 생성될지는 `spark.sql.shuffle.partitions` 프로퍼티에 의해 결정됩니다. 이 값은 기본적으로 200이며, 이는 최대 파티션 수를 나타냅니다.
        - 오퍼레이션에 따라 파티션 수가 동적으로 결정되며, 예를 들어 랜덤, 해싱 파티셔닝, 레인지 파티셔닝 등이 있다.
        - 정렬 작업의 경우 레인지 파티셔닝을 사용하게 됩니다.
      - **Data Skew 발생 가능성:**
        - 셔플링 과정에서 데이터 스뷰(skew)가 발생할 수 있습니다. 일부 파티션에 데이터가 고르게 분배되지 않고 특정 파티션에 데이터가 집중되는 현상을 말합니다.


셔플링: hashing partition( Aggregation 오퍼레이션)

 

데이터 스뷰 (Data Skewness)

  • 데이터 파티셔닝의 병렬성과 단점:
      - 데이터 파티셔닝은 데이터 처리에 병렬성을 제공하지만, 데이터가 균등하게 분포하지 않는 경우에는 단점이 발생
      - 이러한 단점은 주로 데이터 셔플링(shuffling) 이후에 발생합니다.

  • Data Skew 발생 원인:
      - **셔플링 이후 데이터 불균형:** 셔플링 작업을 통해 데이터를 재분배하는 과정에서 특정 파티션에 데이터가 과도하게 집중되는 현상으로 인해 Data Skew가 발생합니다.

  • 대응 방안:**
      - 셔플링 최소화:** 데이터 셔플링을 최소화하는 것이 중요합니다. 셔플링은 비용이 큰 작업 중 하나이며, 최소화하면 성능을 향상시킬 수 있습니다.
      - 파티션 최적화:** 데이터 파티션의 수를 최적으로 조절하여 균형 있는 분산을 유지하도록 최적화하는 것이 중요합니다. 효율적인 파티션 설정은 Data Skew를 방지하고 성능을 향상시킬 수 있습니다.

 

'하둡,spark' 카테고리의 다른 글

spark 기초 실습(colab)  (0) 2024.01.19
spark 데이터 구조  (0) 2024.01.19
Spark 프로그램 실행 환경  (0) 2024.01.18
spark 기초  (0) 2024.01.18
맵리듀스(MapReduce) 문제점  (0) 2024.01.18

+ Recent posts