대용량 처리 기술인 Spark에 대해 알아봅시다.

대용량 처리 기술이란?

  • 분산환경기반 분산 컴퓨팅과 분산 파일 시스템이 필요
  • Fault Tolerance 소수의 서버가 고장나도 동작해야함
  • 확장이 용이해야함 Scale Out이라고 부름

하둡

Doug Cutting이 구글랩 발표 논문에 기반해 만든 오픈소스. Map Reduce 기법을 사용합니다.

MapReduce

  • 작업에 따라서 MapReduce 프로그래밍이 너무 복잡해짐
    • 결국 Hive 처럼 MapReduce로 구현된 SQL 언어들이 다시 각광받게 됨
    • SQL on Hadoop
  • MapReduce는 기본적으로 배치 작업에 최적화

하둡의 발전

하둡은 이제 기반 분산처리 시스템이 되고 그 위에 어플리케이션 레이어가 올라가기 시작했습니다.
Spark와 같은 추가적인 어플리케이션들은 하둡 2.0 위에 있는 YARN 위에서 작동합니다.

시스템 구성

하둡은 흔히 이야기하는 data warehouse에 해당합니다. 데이터를 수집하면 하둡 시스템에서 데이터를 저장하고 관리합니다.
처리 결과를 엑세스 하기위해 검색 엔진 혹은 SQL 등을 이용해서 엑세스 레이어를 구성합니다.
이러한 과정을 워크 플로우 라고 부릅니다.
자동으로 워크 플로우를 처리하는 대표적인 툴로 Airflow가 있습니다.

Spark

데이터 셋을 로딩해서 자신이 원하는 데이터로 처리하기 위한 툴로 사용할 수 있습니다.
Pandas와 굉장히 흡사합니다.
Spark는 하둡 2.0 이상 버전 위에 올라가는 어플리케이션입니다.

Spark vs MapReduce

  • Spark는 기본적으로 메모리 기반 메모리가 부족해지면 디스크 사용 MapReduce는 디스크 기반
  • MapReduce는 하둡 위에서만 동작 Spark는 하둡(YARN)이외에도 다른 분산 컴퓨팅 환경 지원
  • MapReduce는 key-value 기반 프로그래밍
  • Spark는 다양한 방식의 컴퓨팅을 지원 배치 프로그래밍, 스트리밍 프로그래밍, SQL, …

드라이버 프로그램을 작성해서 원하는 결과를 도출합니다.
Spark는 Pandas와 흡사한 기능을 제공합니다.

Spark 세션

  • Spark 프로그램의 시작은 Spark Session을 만드는 것 (getOrCreate())
  • Spark 세션을 통해 Spark가 제공하는 다양한 기능을 사용 (appname, config(s), …)

Spark 데이터 구조

  • RDD(Resilient Distributed Dataset) 로우레벨 데이터로 클러스터내의 서버에 분산된 데이터를 지칭
    레코드 별로 존재하며 구조화된 데이터나 비구조화된 데이터 모두 지원

  • Dataframe과 Dataset

    • RDD위에 만들어지는 하이레벨 데이터로 RDD와는 다르게 필드 정보를 가지고 있음 (테이블)
    • Dataset은 Dataframe과는 달리 타입 정보가 존재하며 컴파일 언어에서 사용가능
      • 컴파일 언어: Scala/Java에서 사용가능
    • PySpark에서는 Dataframe을 사용함
      • SparkSQL을 사용하는 것이 더 일반적

RDD

  • 변경이 불가능한 분산 저장된 데이터
    • RDD는 다수의 파티션으로 구성되고 Spark 클러스터내 서버들에 나눠 저장됨
    • 로우레벨의 함수형 변환 지원 (map, filter, flatMap 등등)
  • RDD가 아닌 일반 파이썬 데이터는 parallelize 함수로 RDD로 변환 (sparkcontext.parallelize)

데이터프레임

  • RDD처럼 데이터 프레임도 변경이 불가한 분산 저장된 데이터
  • RDD와는 다르게 관계형 데이터베이스 테이블 처럼 컬럼으로 나눠 저장
    • 판다스의 데이터 프레임과 거의 흡사
    • 데이터 프레임은 다양한 데이터 소스 지원:
      파일, Hive, 외부 DB, RDD등
    • 스칼라, 자바, R, 파이썬과 같은 언어에서 지원

댓글남기기