[스터디] 스파크 완벽 가이드 9일차

Kristopher·2022년 1월 24일
0

Spark 스터디

목록 보기
9/16

Chapter 9 데이터 소스

해당 장에서는 스파크의 여섯 가지 핵심 데이터소스를 중점적으로 소개한다. 핵심 데이터소스의 종류는 다음과 같다.

  • CSV
  • JSON
  • 파케이
  • ORC
  • JDBC/ODBC 연결
  • 일반 텍스트 파일

데이터소스 API의 구조

스파크의 데이터소스 읽기API의 핵심 구조는 다음과 같다.

DataFrameReader.format(...).option("key","value").schema(...).load( )

기본적으로 DataFrameReader를 사용하며 format,option, schema를 조절하여 옵션을 조절할 수 있다. 외부 데이터를 읽다보면 형식에 맞지 않는 데이터를 사용하기도 하는데, 이 경우 읽기모드를 조절하여 형식이 맞지 않는 데이터를 어떻게 처리할지 결정하게 된다.

스파크의 데이터소스 쓰기API의 핵심 구조는 다음과 같다.

DataFrameReader.format(...).option(...).partitionBy(...).bucketBy(...).sortBy(...).save( )

읽기와 다르게 partitionBy, bucketBy, sortBy 메소드가 있는데, 이는 파일 기반의 데이터소스에서만 동작하며 최종 파일 배치 형태를 제어할 수 있다.

CSV파일

CSV파일은 콤마로 구분된 값을 의미한다. 각 줄이 단일 레코드가 되며 필드를 콤마로 구분하는 일반적인 텍스트 파일 포맷이다.CSV는 구조적으로 보이지만 운영 환경에서 어떤 내용이 들어있는지, 어떤 구조로 되어있는지 등 다양한 전제를 만들어낼 수 없기 때문에 까다롭다.

JSON파일

JSON파일은 자바스크립트 객체 표기법의 파일 형식이다. 스파크에서 JSON파일은 줄로 구분된 JSON파일을 기본적으로 사용하고, 큰 JSON객체나 배열을 하나씩 가지고 있는 파일을 다루는 것과는 대조적이다. 스파크는 JSON파일을 파싱한 다음 DataFrame을 생성하는데, 전체 파일을 읽어들인 다음 저장하는 방식이 아니므로 새로운 레코드를 추가할 수 있다. 또한 구조화되어 있고, 기본 데이터 타입이 존재하기 때문에 데이터를 원활하게 처리할 수 있다.

파케이 파일

파케이는 다양한 스토리지 최적화 기술을 제공하는 오픈소스로 만들어진 컬럼 기반의 데이터 저장 방식이다. 특히 분석 워크로드에 최적화되어 있고, 저장소 공간 절약, 개별 컬럼 읽기, 컬럼 기반의 압축기능을 제공한다. 스파크와 호환성이 높기 때문에 스파크의 기본 파일 포맷으로 사용한다. JSON, CSV보다 효율적으로 동작하기 때문에 장기 저장용 데이터를 파케이 포맷으로 저장하는 것이 좋다.

ORC 파일

ORC는 하둡 워크로드를 위해 설계된 자기 기술적이며 데이터 타입을 인식할 수 있는 컬럼 기반의 파일 포맷이다. 대규모 스트리밍 읽기에 최적화되어있고, 필요한 로우를 신속히 찾을 수 있다. 스파크는 ORC파일을 별도의 옵션 지정 없이 효율적으로 사용할 수 있다. 파케이와 유사해보이지만 ORC는 하이브에 최적화되어있고, 파케이는 스파크에 최적화되어 있다.

SQL 데이터베이스

사용자는 스파크를 통해 다양한 데이터베이스에 접속할 수 있다. 데이터베이스는 원시 파일 형태가 아니므로 고려해야할 옵션이 많다. 데이터베이스의 인증 정보, 접속 관련 옵션이 필요하기 때문에 스파크 클러스터에서 데이터베이스 시스템에 접속할 때는 네트워크 상태를 확인해야 한다.

고급 I/O 개념

쓰기 작업을 수행하기 전에 파티션 수를 조절하여 병렬로 처리할 파일 수를 제어할 수 있다. 또한 버케팅과 파티셔닝을 조절하여 데이터의 저장 구조를 제어할 수 있다.

파티셔닝

파티셔닝은 어떤 데이터를 어디에 저장할 것인지 제어할 수 있는 기능이다. 파티셔닝 된 디렉토리 또는 테이블에 파일을 쓸 때 디렉토리별로 컬럼 데이터를 인코딩해 저장한다. 그렇기에 데이터를 읽을 때 전체 데이터셋을 스캔하지 않고 필요한 컬럼의 데이터만 읽을 수 있다.

버켓팅

버케팅은 파일에 저장된 데이터를 제어할 수 있는 파일 조직화 기법이다. 버켓팅을 사용하여 동일한 버킷 ID를 가진 데이터가 하나의 물리적 파티션에 모여 있기 때문에 데이터를 읽을 때 셔플을 줄일 수 있다.

Reference

스파크 완벽 가이드
아파치 스파크

profile
개발자 지망생입니다.

0개의 댓글