본문 바로가기

Study/spark

[Spark] chapter 2 스파크 간단히 살펴보기

728x90
반응형

Chapter 2. 스파크 간단히 살펴보기

스파크 기본 아키텍처

    •  '컴퓨터' 라고 하면, 집이나 직장 책상 위에 놓인 장비 한대를 떠올림, 이 컴퓨터는 영화를 보거나 문서작업을 하기 아주 적합함.
    •  한 대의 컴퓨터로 수행하기 힘든 작업이 존재, 특히 대용량 데이터(빅데이터)를 처리하는 경우
    •  한 대의 컴퓨터는 대규모 정보를 연산할 만한 자원이나 성능을 갖지 못함, 연산이 가능하더라도 많은 시간이 소요
    •  컴퓨터 클러스터는 여러 컴퓨터의 자원을 모아 하나의 컴퓨터처럼 사용할 수 있게 만듦.
    •  클러스터 구성하는 것만으로는 부족, 작업을 조율할 수 있는 프레임워크가 필요(스파크)

 

스파크 어플리케이션

  •  드라이버 프로세스와 익스큐터 프로세스로 구성
  •  드라이버 프로세스(필수 프로세스)
    • 클러스터 노드 중 하나에서 실행
    • main() 함수 실행
    • 어플리케이션 정보 유지 관리
    • 사용자 프로그램이나 입력에 대한 응답
    • 익스큐터 프로세스의 작업과 관련된 분석, 배포, 스케쥴링
  • 익스큐터 프로세스
    • 드라이버 프로세스가 할당한 작업을 수행
    • 드라이버 노드에 진행상황 보고
  • 클러스터 매니저
    • 물리적 머신 관리
    • 스파크 어플리케이션 자원 할당
    • 하나의 클러스터에 여러 개의 어플리케이션 실행 가능

 

스파크 API

  • 다양한 언어 API(scala, java, python, SQL, R)
  • 스파크가 다양한 언어의 코드를 자동으로 변환 및 실행
  • 저수준 비구조적 API, 고수준 구조적 API
  • SparkSession
    • 드라이버 프로세스
    • 사용자가 정의한 처리 명령을 클러스터에서 실행
    • 하나의 SparkSesstion은 하나의 스파크 어플리케이션에 대응

 

SparkSession

 

 

scala에서 일정 범위의 숫자를 만드는 작업을 해보자

생성한 DataFrame은 한 개의 column과 1000개의 row로 구성된다.

각 row에는 0부터 999까지 숫자값이 들어있다.

이 숫자들은 분산컬렉션을 나타낸다.

클러스터 모드에서 이 코드를 실행하면 숫자 범위의 각 부분들이 서로 다른 익스큐터에 할당된다.

 

DataFrame

  • 대표적 구조적 API
  • 테이블의 데이터를 Row와 Column 으로 단순하게 표현(분산 콜렉션)
  • 파티션 : 모든 익스큐터가 병렬로 작업을 수행할 수 있도록 청크(Chuck) 단위로 데이터를 분할, 물리적 머신에 존재하는 row의 집합

 

트랜스포메이션

  • 스파크의 핵심 데이터 구조는 불변성(Immutable)을 가짐; 한번 생성하면 변경되지 않음.
  • 데이터 구조를 변경하려면 변경 방법을 스파크에 알려줘야 함
  • 변경에 사용하는 명령어들을 트랜스포메이션이라고 지칭

  • 응답 값은 출력되지만, 결과가 출력(데이터 처리)되지 않음
  • 추상적인 명령어의 집합(트랜스포메이션들)만 지정, 액션(Action) 연산이 수행 되지 않으면 트랜스포메이션이 수행되지 않음 (Lazy Evaluation)

  • 트랜스포메이션에는 좁은 의존성(narrow dependency)과 넓은 의존성(wide dependency) 두 가지 유형 존재

액션 (Action)

  • 실제 연산을 수행하기 위한 연산
  • 트랜스포메이션으로부터 결과를 계산하도록 지시하는 명령
  • 액션을 지정하면 스파크 잡(Job)이 시작 (Web UI로 확인 가능)

      ( Web UI의 주소 : http://localhost:4040 )

 

728x90
반응형

'Study > spark' 카테고리의 다른 글

[Spark] chapter 1 아파치 스파크란?  (0) 2021.07.08