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 |
---|