Spark 1. RDD, DF, SQL

skh951225·2023년 8월 13일
0

Spark

목록 보기
1/4

분산 데이터 아키텍쳐

  1. MPP(Massive Parallel Processing)
  • 초기의 분산 데이터 아키텍쳐
  • 여러대의 머신에 DB를 두어 데이터를 분산처리하고자 함
  • 결국에는 데이터를 중앙에서 취합해야하고 Join과 같은 연산을 수행하게되면 머신끼리 네트워킹을 해야해서 비쌈
  • Teradata, GP, Exadata
  1. HDFS(Hadoop File System)
  • GFS을 바탕으로 만들어진 시스템
  • MapReduce를 통해 대량의 데이터를 처리
  • MapReduce는 굉장히 단순하기때문에 복잡한 비지니스에 쓰기에 부적합함
  • Hive를 통해 SQL 쿼리를 MapReduce로 변환해서 처리하는 것이 가능해짐
  1. Spark
  • In-memory 기반 데이터 처리 툴
    • disk I/O가 발생하는 MapReduce에 비해 빠르다.
  • DAG 기반의 실행 최적화(RDBMS의 실행최적화와 유사)
  • RDD, DF, SQL 기반의 데이터 처리 추상화
  • S/W 라이센스 비용 없이 데이터 처리를 할 수 있는 가성비가 뛰어난 솔루션
  • 10TB 이상의 시스템은 Spark을 고려해볼만함

Spark에 대한 오해

1. Spark은 In-memory 특화 기능을 가지고 있다?

  • Spark의 in-memory처리는 SimD, DB에서의 join최적화와 같은 레벨이 아닌 caching에 가깝다.

2. Spark은 Hadoop보다 100배 빠르다?

  • Spark은 Lazy operation이나 in-memory 저장기능을 통해 Hadoop보다 특정 상황에서는 100배 빠를 수 있음.
  • 하지만 DAG 기반의 실행 최적화가 필요하지 않은 단순한 작업이나 모든 데이터가 in-memory에 담기지 못하는 상황에서는 빠르기는 하지만 그렇게까지 빠르지는 않다.

3. Spark은 데이터 프로세싱에 있어서 혁신적인 기술이다?

  • Spark은 MPP를 계승하고자 하는 부분이 큼

Spark

Architecture

  • Cluster Manager: job을 균등하게 Worker Node에 뿌려줌
  • Worker Node: 일반적으로 하드웨어 단위이며 보통 core수만큼의 Executor를 가짐
  • Executor: Job을 다시 Task단위로 세부적으로 쪼개서 실행

Data

  • RDD(Resilient Distributed Dataset)
    • Spark의 저수준의 데이터 추상화
    • 한번 생성되면 변경되지 않는(Immutable) 분산 데이터 집합
  • DataFrame
    • 행과 열로 구성된 2차원 데이터 구조
    • SQL과 호환을 염두해둔 데이터구조(Hive의 영향을 많이 받음)
    • Pandas의 DataFrame과는 생김새만 비슷하지 내부 구성은 완전히 다름
    • RDD보다 훨씬 편리하며 내부적으로 실행계획을 최적화해줌
    • RDD를 사용하게되면 Scala를 사용하는 것이 성능에 많은 영향을 줌. 하지만 DataFrame을 사용하게되면 Scala를 사용하지 않아도 성능상에 큰 차이가 없음
  • SQL 대비 DataFrame의 장점
    • Spark Component들과의 interface제공
    • Loop 기반에서 보다 쉬운 데이터 처리
    • 보다 쉬운 컬럼명/값 변경
    • 사용자 정의 함수의 손쉬운 실행

Pandas vs Spark (DataFrame)

  • Pandas
    • numpy 의 ndarray를 기반으로 2차원 Tabular 데이터 분석에 용이함
    • numpy 의 API와 높은 호환성을 가짐
    • numpy의 SimD 프로세싱으로 매우빠른 처리
    • SimD(Single Instruction Multiple Data)
      • 하나의 명령어로 여러개의 값을 동시에 계산하는 방식
      • 벡터프로세싱에 많이 사용되며 게임, CG, HPC 등 다양한 분야에서 활용
      • 인텔 CPU에서는 4, 8, 16 등의 단위 벡터 기반의 SIMD 연산 수행
    • 병렬 CPU 처리가 안되고 단일 서버 메모리 용량 이상 데이터를 처리할 수 없음
  • Spark
    • Java Object로 만들어진 RDD기반
    • SQL과 유사한 연산을 지원하는 API 구성
    • 병렬 CPU 처리 및 분산 서버 데이터 처리 가능
    • 분산 서버 처리가 가능하므로 서버를 Scale out 하여 대용량 데이터의 메모리 처리 가능
  • Spark DataFrame API 주요 특징
    • SQL연산과 비슷한 연산자 제공
    • Spark DF의 연산은 새로은 DF를 반환하는 형태. inplace 옵션이 존재하지 않음(Immutable)
    • Spark DF는 [] 대신 withColumns()를 통해 컬럼의 값을 가져옴
    • Spark DF는 여러 컬럼에 접근할때 []를 사용하지 않음
      • pandas_df.drop(['컬럼1', '컬럼2'])
      • spark_df.drop('컬럼1', '컬럼2')

2개의 댓글

comment-user-thumbnail
2023년 8월 13일

좋은 글 감사합니다.

1개의 답글