ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spark 기초1
    Spark/BASIC 2020. 12. 8. 18:09

     

    기본과정

    - 특정 함수 없이 스파크를 이용하면 어떤 일을 할 수 있는지?

    - Hadoop, Spart, Data Engineering

     

    실습과정

    - 제공 함수 RDD, DataFrame 함수 활용

     

    심화과정

    - 함수 호출 시 스파크 내부 동작 구조

     

    ---

    스파크

    - 대용량 데이터 분산 처리 SW

    - 별도의 App 없이 대용량 쿼리 수행

    - App 구현을 위한 API 제공

     

    spark.apache.org/

     

    Apache Spark™ - Unified Analytics Engine for Big Data

    Ease of Use Write applications quickly in Java, Scala, Python, R, and SQL. Spark offers over 80 high-level operators that make it easy to build parallel apps. And you can use it interactively from the Scala, Python, R, and SQL shells.

    spark.apache.org

    Spark Components

    장점

    • Speed(과장)
    • Ease of Use(최고)
    • Generality
    • Runs Everywhere

    예제

    • SELECT col_A, col_B, col_C FROM my_table WHERE col_A ...
    • col_D를 보고싶다면? 하둡은 Build/Deploy 후 모든 분산 저장소를 다시 전부 조회 해야됨
    • MapReduce를 이용해서 orderBy, distinct, join, pivot, takeSample, countApproxyDistinct 를 구현함
    • 대용량 데이터 중복 제거 - 정렬을 해서 메모리 부하가 가지 않게 잘 처리 해야됨
    • SQL방식(Hive), 프로그래밍 방식 두가지 방법을 제공

     

    공식 정의

    • Apache Spark™ is a unified analytics engine for large-scale data processing.
    • 데이트 크기와 상관 없이, 어떤 요구사항도 다 처리할 수 있는 (통합) 데이터 분석 엔진
    • 아주 잘 만든 분산처리 스칼라(자바) 어플리케이션 프레임워크
    • 단순 데이터 처리에 사용하기에는 아까울 정도로 잘 만들어졌다.

     

    데이터 처리 업무 -> 스파크
    다양한 도메인, 다양한 도구

    빅데이터 분야의 모호한 부분.. 너무 범위가 추상적이다.

    • 데이터 처리?
    • 데이터를 읽어와서 원하는 작업을 수행하고
    • 그 결과를 저장하거나 외부 프로세스에 전달
    • MYSQL(Connection -> Query Execute -> Extract Result Data)와 원리는 동일
    • Why Spark?
      • 특정 광고가 하루 몇번 노출됐는지 알아보기
      • 특정 광고를 본 사용자가 몇명인지 알아보기
      • 최근 한달간 당일 첫 방문 시 A업종의 광고에 노출된 횟수가 5회 이상인 사용자중에 최근 1주일 사이 B업종 광고에 3회 이상 연속 노출되면서 최초 클릭을 수행한 사용자 수-> 사용자 * 시간(ms) * 광고 수 : 매우 큰 데이터
      • 조금 더 특화된 기능

    다양한 라이브러리 지원 및 통합 런타임 환경, 비즈니스 로직 구현 집중(RDD, DF)

     

     

    아키텍처와 주요 컴포넌트

    spark.apache.org/docs/latest/cluster-overview.html

     

    Cluster Mode Overview - Spark 3.0.1 Documentation

    Cluster Mode Overview This document gives a short overview of how Spark runs on clusters, to make it easier to understand the components involved. Read through the application submission guide to learn about launching applications on a cluster. Components

    spark.apache.org

     

    간단한 예제(단어 수 세기 : word counting)

    1. 파일 경로 입력으로 전달
    2. 결과를 저장할 컬렉션 준비(키:단어, 값:count)
    3. 파일을 한 줄씩 읽으면서
    4. 각 줄을 공백 문자를 기준으로 단어로 분리한다.
    5. 분리된 모든 단어에 대해
    6. 아직 등록되지 않은 단어면 count 1로 등록하고, 이미 등록된 단어면 1을 증가시킨다.

    왜 자꾸 단어를 세라는건지?

    • 가장 간단하고 -> 전형적인 입력 데이터 포맷(정제되지 않은, 날것(컨텐츠, 저장형식, 저장위치, 크기 다양한) 그대로의 파일)
    • 가장 기본적, 자주 활용되는 문법 
    • 런타임 환경의 정상 여부를 확인

    단어 수 예제 다시 보기

    • 읽고
    • 처리하고(파싱 -> 단어수 세기)
    • 결과를 전달(출력)
    • 데이터 처리 == (Read -> Process -> R -> PRPRP..)

    단어 수 세기 고도화(스파크는 어떻게 했을까?)

    • 간단한 예제이지만, 파일의 크기가 매우 커지면 동작하지 못하는 단점이 있다.
    • 파일을 나눠서 여러 서버에서 나눠서 처리하면 됨(불변의 진리)

    MAP & REDUCE

    스파크가 없으면 어떻게 할까?

    • 서버 준비
    • 실행 환경 구성(OS, Java, 환경변수 등)
    • 파일 분할(전용 유틸리티 사용)
    • 분할한 파일을 여러 서버에 복사
    • 프로그램 빌드
    • 빌드 프로그램 여러 서버에 복사
    • 여러 서버에서 프로그램 실행
    • 각 서버별로 실행 결과를 기록
    • 모두 더해서 최종 결과 계산
    • 단어 수 세는 용도로만 활용 가능

    이 일을 범용 프로그램으로 발전 시켜보자

    • 변하지 않는 것 -> 재사용 가능한 공통 모듈
      • 파일분할 유틸리티
      • 파일을 서버에 복사스크립트
        • 잘못된 가정.. 파일이 한 서버에 못들어 갈 정도로 크다면?
        • 유틸리티로 스플릿 불가능, 파일 복사시 서버 다운될 수도 있음..
        • 분산 파일 시스템이 결국 필요해짐.. Not Easy
        • 대용량 파일 저장은 스파크의 영역이 아니다..
        • HDFS API(업계 De Facto)
        • pros : 호환성, 안정성, 편의성
        • cons : 하둡 라이브러리 의존성(Not CM)
        • 하둡이 필수는 아니지만 클래스 패스에만 하둡 라이브러리가 잡혀있음(for build)
        • CDH : 하둡 계열의 빅데이터 솔루션 중에 자주 사용하는 것들을 모아둔 번들 툴
    • 변하는 것 -> 구현을 통해 확장 가능하도록 추상화
      • 프로그램 빌드/복사/실행
      • 프로그램
        • 비즈니스 로직은 도메인에 따라 바뀐다
        • Input -> 불변
        • map/transform -> 변화
          • map(파일) -> return 단어수 맵
          • map(이미지) -> return JSON_Object
          • map(각 서버에서 취합한 파일들) -> return 단어수 맵
          • 추상화 레벨이 너무 높다(각 서버별로 실행하는 맵, 모든 서버의 결과를 통합하는 맵) -> 그룹화 + 구분
          • 함수 분리
            • map
            • reduce
            • anotherFunction
          • 타입(인터페이스, 클래스) 분리
            • class Mapper
            • class Reducer
            • class AwesomeCalculator
          • Case of Spart -> 둘다 분리
            • class Mapper { map() }
            • RDD(abstract class)
              • HadoopRDD, CheckPointRDD, JdbcRDD, UnionRDD, ShuffleRDD, PartioningPruningRDD....etc
        • Output -> 불변

    사람이 했던 역할 - 클러스터매니저(CM)

    • 여러 서버들을 제어
    • 여러 서버에서 구동중인 프로그램 제어
    • 결과 취합 후 최종 프로그램 실행
    • HDFS -> 분산 처리를 제어하는 부분을 포기?
      • 자체 클러스터 제공 하지만
      • 기존 클러스터 활용할수 있게 배려 해줌(하둡 범용)
    • 자체 런타임 실행 모델 구축
      • Driver(App 실행에 필요한 백그라운드 프로세스, 정보 관리) <-> Executor(Yarn, Mesos, K8s)(Task를 할당받아 실행하는 역할 수행)
      • Driver : 마스터 역할을 하는 수많은 백그라운드 프로스세의 집합
      • 클러스터별 익스큐터 실행코드 -> spark-submit(spart shell) -> cluster manager 지정
      • 단일 프로그래밍 모델, CM Free
      • Unit Test, IDE Debugging

     

     

    RDD(Resilient Distributed Dataset)

    • 분산 데이터 모델
    • Hadoop의 MapReduce API와 비슷한 역할
    • Map/Reduce -> How/Workflow
    • Dataset -> What/Data
    • 데이터 처리 프로그램 작성을 위한 스파크의 (General) 프로그래밍 모델
    • 이제 안쓰지 않나요?

    최종 개념적 구조

     

    SparkContext 생성 == Initialize Env

    Spark가 사용하기 편한 이유

    App 실행

    • rdd.show
      • DAG Scheduler (Workflow 로 변환)
      • POOL(Task)
      • Scheduler - CM
      • Executor

    댓글

Designed by Tistory.