[Apache Spark] 스파크 기능 둘러보기 👀

연수·2021년 11월 4일
2

spark

목록 보기
3/26

🍏 운영용 애플리케이션 실행하기

  • spark-submit 명령을 사용해 대화형 셸에서 개발한 프로그램을 운영용 애플리케이션으로 쉽게 전환할 수 있다.
  • spark-submit: 애플리케이션 코드를 클러스터에 전송해 실행, 실행에 필요한 자원과 실행 방식 등 다양한 옵션 지정 가능
  • 클러스터에 제출된 애플리케이션은 작업이 종료되거나 에러가 발생할 때까지 실행된다.

 

🌀 Dataset: 타입 안정성을 제공하는 구조적 API

  • 자바와 스칼라의 정적 데이터 타입에 맞는 정적 타입 코드를 지원하기 위해 고안된 구조적 API
  • 파이썬과 R에서는 사용 불가능
  • Row 타입의 객체로 구성된 분산 컬렉션
  • 타입 안정성 지원

 

🐳 구조적 스트리밍

  • 스트림 처리용 고수준 API
  • 구조적 스트리밍을 사용하여 구조적 API로 개발된 배치 모드의 연산을 스트리밍 방식으로 실행할 수 있으며, 지연 시간을 줄이고 증분 처리할 수 있다.
  • 배치 처리용 코드를 일부 수정하여 스트리밍 처리를 수행하고 값을 빠르게 얻을 수 있다는 장점이 있다.

예)

# dataframe 정의
streamingDataFrame = spark.readStream ... 

# 계산 (지연연산)
purchaseByCustomerPerHour = streamingDataFrame.selectExpr(...

# 스트리밍 액션 호출
# 인메모리 테이블에 데이터 저장
# 이전 집계값보다 더 큰 값이 발생한 경우에만 인메모리 테이블 갱신하므로 언제나 가장 큰 값을 얻을 수 있음
purchaseByCustomerPerHour.writeStream ...

# 스트림이 실행되면 쿼리 실행 결과가 어떻게 인메모리 테이블에 기록되는지 확인 가능

** 윈도우 함수: 간격을 통해 처리 요건을 명시할 수 있어 날짜와 타임스탬프 처리에 유용

 

⚙️ 머신러닝과 고급 분석

  • 스파크는 내장된 머신러닝 알고리즘 라이브러리인 MLlib을 사용해 대규머 머신러닝을 수행할 수 있다.
  • 전처리, 멍잉, 모델 학습, 예측, 분류, 회귀, 군집화, 딥러닝 등

 

🐻 저수준 API

  • 스파크는 RDD를 통해 자바와 파이썬 객체를 다루는 데 필요한 저수준 API를 제공한다.
  • 스파크의 거의 모든 기능은 RDD 기반
  • 대부분 구조적 API를 사용하는 것이 좋지만, RDD를 이용해 파티션과 같은 물리적 실행 특성을 결정할 수 있어 DataFrame보다 더 세미한 제어가 가능하다.
  • 드라이버 시스템의 메모리에 저장된 원시 데이터를 병렬처리 하는 데 RDD를 사용할 수 있다.
  • 최신 버전의 스파크에서는 RDD를 사용하지 않지만, 비정형 데이터나 원시 데이터 처리에는 사용

       🐻‍❄️ RDD(Resillient Distributed Data)란?

  • 스파크에 도입되었던 가장 기초적인 데이터 구조
  • "회복력 있는 분산 데이터"
  • RDD는 불변의 특성을 갖는다. 따라서 특정 동작을 위해서는 기존 RDD를 변형한 새로운 RDD가 생성된다. → 스파크 내 연산에서 수많은 RDD들 생성됨 (Lineage)
  • RDD Lineage는 DAG(Directed Acyclic Graph)의 형태를 가진다. DAG에 의해 특정 RDD 관련 정보가 메모리에서 유실되었을 경우, 그래프를 복기하여 다시 계산하고 자동 복구할 수 있다. → Fault-tolerant
  • 동작 원리
    • Transformation 기존 RDD에서 새로운 RDD 생성 (실제 연산 작업 수행 X) 리턴값이 RDD
    • Action 기록된 모든 작업을 실제 수행 리턴값이 데이터 또는 실행 결과

 

🍳 SparkR

  • 스파크를 R 언어로 사용하기 위한 기능
  • 파이썬 API와 매우 유사

 

[출처] 스파크 완벽 가이드 (빌 체임버스, 마테이 자하리아 지음)

profile
DCDI

0개의 댓글