본문 바로가기
IT

스파크 데이터 구조

by 힁구띠 2022. 8. 26.

1. 스파크 데이터 구조

DateFrame

 1) 개념

스파크의 데이터 구조중 가장 대표가 되는 DataFrame은 마치 엑셀의 격자모양, 일반적인 RDB의 컬럼, 로우의 스키마 구조와 유사합니다. 

하지만 엑셀과의 분명한 차이는, 엑셀은 한대의 컴퓨터에서 작동하지만 스파크 DataFrame은 여러 컴퓨터에 분산되어 있습니다. 왜냐하면 한대의 컴퓨터에 대한 데이터 저장과 처리는 연산이 너무 오래 걸릴 수 있기 때문입니다.

스파크는 파이썬과 R을 모두 지원하기 때문에 파이썬(Pandas) 라이브러리의 DataFrame을 스파크 DataFrame으로 쉽게 변환할 수 있습니다.

 

 2) 파티션

스파크 파티션은 클러스터의 물리적 머신에 존재하는 로우의 집합을 의미합니다. 스파크는 모든 익스큐터의 병렬 작업을 위해 파티션이라는 청크 단위로 데이터를 분리합니다. DataFrame의 파티션은 실행 중에 데이터가 컴퓨터 클러스터에서 물리적으로 분산되는 방식을 나타냅니다. 하지만 파티션이 한 개라면 수많은 스파크 익스큐터들이 있더라고 병렬성은 1이 됩니다. 마찬가지로 수많은 파티션이 있더라도 익스큐터가 한 개밖에 없다면 병렬성은 1이 됩니다.

DataFrame을 사용하면 파티션을 수동 혹은 개별적으로 처리할 필요가 없습니다. 물리적 파티션에 데이터 변환용 함수를 지정하면 스파크가 실제 처리 방법을 결정합니다.

 

트랜스포메이션

 1) 개념

스파크는 불변성이라는 데이터 핵심 구조를 가지고 있습니다. 다시 말하자면 한번 생성하면 변경할 수 없습니다. DataFrame을 변경하려면 변경 방법을 스파크에 알려줘야 합니다. 이때 사용하는 명령어가 트랜스포메이션입니다.

트랜스포메이션은 스파크에서 비즈니스 로직을 표현하는 핵심 개념입니다. 트랜스포메이션의 두 가지 유형으로는 좁은 의존성, 넓은 의존성이 있습니다.

좁은 의존성의 트랜스포메이션은 각 입력 파티션이 하나의 출력 파티션에만 영향을 줍니다.

넓은 의존성의 트랜스포메이션은 하나의 입력 파티션이 여러 출력 파티션에 영향을 줍니다. 좁은 트랜스포메이션을 사용하면 스파크에서 파이프라이닝을 자동으로 수행합니다. DataFrame에 여러 필터를 지정하는 경우 모든 작업이 메모리에서  발생합니다. 하지만 셔플은 다른 방식으로 동작합니다. 스파크는 셔플의 결과를 디스크에 저장합니다.

 

 2) 지연 연산

지연 연산은 스파크가 연산 그래프를 처리하기 직전까지 기다리는 동작 방식입니다. 스파크는 특정 연산 명령이 내려진 즉시 데이터를 수정하지 않고 원시 데이터에 적용할 트랜스포메이션의 실행계획을 생성합니다. 스파크는 코드를 실행하는 마지막 순간까지 대기하다가 원형 DataFrame 트랜스포메이션을 간결한 물리적 실행 계획으로 컴파일합니다. 스파크는 이 과정을 거치며 전체 데이터 흐름을 최적화하는 강점이 있습니다. DataFrame의 조건절 푸시다운이 한 예가 될 수 있습니다. 복잡한 스파크 잡이 원시 데이터에서 하나의 로우만 가져오는 필터를 가지고 있다면 필요한 레코드 하나만 읽는 것이 효율적입니다. 스파크는 이 필터를 데이터 소스로 위임하는 최적화 작업을 자동으로 수행합니다.

 

Action

사용자는 트랜스포메이션을 이용해 논리적 실행 계획을 세울 수 있습니다. 하지만 실제 연산을 수행하려면 Action 명령을 해야 합니다. Action은 일련의 트랜스포메이션으로부터 결과를 계산하도록 지시하는 명령입니다. 가장 단순한 Action인 Count 매서드는 DataFrame의 전체 레코드수를 결과로 반환합니다. 

    divisBy2.count()

Count 외에도 아래 세 가지 유형의 Action이 있습니다.

 (1) 콘솔에서 데이터를 보는 Action

 (2) 각 언어로 된 네이티브 객체에 데이터를 모으는 Action

 (3) 출력 데이터 소스에 저장하는 Action

 

Action을 지정하면 스파크 잡이 시작됩니다. 스파크 잡은 필터(좁은 트랜스포메이션)를 수행한 후 파티션 별로 레코드 수를 count(넓은 트랜스포메이션)합니다. 그리고 각 언어에 적합한 네이티브 객체에 결과를 모읍니다. 이때 스파크가 제공하는 스파크 UI로 클러스터에 실행 중인 스파크 잡을 모니터링할 수 있습니다.

 

스파크 UI

스파크 UI는 스파크 잡의 진행 상황을 모니터링할 때 사용합니다. 스파크 UI는 드라이버 노드의 4040 포트로 접속할 수 있습니다. 로컬 모드에서 스파크를 실행했다면 스파크 UI 주소는 http://localhost:4040입니다. 스파크 UI에서 스파크 잡의 상태, 환경 설정, 클러스터 상태 등의 정보를 확인할 수 있습니다. 스파크 UI는 스파크 잡을 튜닝하고 디버깅할 때 유용합니다. 

 

스파크 데이터 소스

 1) CSV

스파크는 다양한 데이터 소스를 지원합니다. CSV는 반정형 데이터 포맷으로, 파일의 각 로우는 DataFrame의 로우가 됩니다. 데이터는 SparkSession의 DataFrameReader 클래스를 사용해서 읽습니다. 이때 특정 파일 포맷과 몇 가지 옵션을 함께 설정합니다. 스파크는 DataFrame의 스키마 정보를 알아내는 스키마 추론 기능을 사용합니다. 그리고 파일의 첫 로우를 헤더로 지정하는 옵션도 함께 설정합니다.

스파크는 스키마 정보를 얻기 위해 데이터를 조금 읽습니다. 그리고 해당 로우의 데이터 타입을 스파크 데이터 타입에 맞게 분석합니다. 하지만 운영 환경에서는 데이터를 읽는 시점에 스키마를 엄격하게 지정하는 옵션을 사용해야 합니다.

 

'IT' 카테고리의 다른 글

스파크 실행과 언어 API  (0) 2022.09.07
MySQL 권한 - 1  (0) 2022.09.05
스파크의 기본 개념 - 1  (0) 2022.07.25
SQL의 기본 개념 - 2  (0) 2022.07.13
SQL의 기본 개념 - 1  (0) 2022.07.12

댓글