모든 것이 잘 동작할 때 아파치 스파크는 놀라운 성능을 보여주지만, 아직 기대한 만큼의 성능을 보지 못했거나 스파크를 실무에 적용할 만한 확신을 얻지 못하고 있다면 이 책은 당신을 위한 것이다. 저자들은 적은 자원을 쓰면서도 더 빠르고 더 큰 데이터를 다룰 수 있도록 아파치 스파크의 성능 최적화를 잘 보여준다.
대규모 데이터를 다루는 소프트웨어 엔지니어, 데이터 엔지니어, 개발자, 시스템 관리자에게 더할 나위 없는 이 책은 데이터 인프라 비용과 개발 시간을 줄여주는 기술을 소개한다. 스파크를 깊게 이해함과 동시에 스파크의 독보적인 성능을 어떻게 끌어내는지 배울 수 있을 것이다.
이 책의 주요 내용
스파크 SQL의 새로운 인터페이스 성능을 향상시키는 방법
코어 스파크와 스파크 SQL에서의 조인 종류 선택
기본 RDD 트랜스포메이션을 최대한 활용하는 방법
키/값 페어 패러다임에서의 성능 이슈
스칼라나 JVM 없이 고성능 스파크 코드를 작성하는 방법
제시된 성능 향상을 위해 기능과 성능을 테스트하는 방법
스파크 MLlib 및 스파크 ML 머신러닝 라이브러리 사용 방법
스파크의 스트리밍 컴포넌트와 외부 커뮤니티 패키지
저자 소개
홀든 카로(Holden Karau)
홀든 카로는 트랜스젠더 캐나다인이면서 IBM 스파크 기술 센터의 소프트웨어 개발 엔지니어다. 그녀는 스파크 커미터이면서 파이 스파크와 머신러닝에 많은 기여를 하고 있다. 또한, 다양한 국제 콘퍼런스에서 스파크 발표자로 활동하고 있다.
레이첼 워렌(Rachel Warren)
레이첼 워렌은 알파인 데이터(Alpine Data)의 소프트웨어 엔지니어이자 데이터 과학자다. 그녀는 현실 데이터 처리와 머신러닝 작업에 스파크를 사용하고 있다. 또한, 실무와 교육계 양쪽에서 분석가이자 멘토로 활동하고 있다.
역자 소개
박종영
한국 오라클, 세븐 네트웍스 코리아를 비롯한 여러 회사에서 DBMS 엔진 및 푸시 메시징 엔진 등을 개발했다. 그루터를 거쳐 지금은 쿠팡에서 빅데이터 관련 개발 업무를 하고 있다. 아파치 타조(http://tajo.apache.org) 커미터로도 활동 중이다. 옮긴 책으로는 《도커: 설치부터 운영까지》, 《러닝 스파크》가 있다.
차례
CHAPTER 01 고성능 처리를 위한 스파크 시작하기 1
스파크는 무엇이며 성능은 왜 중요한가? 1
이 책에서 얻을 수 있는 것은 무엇인가? 2
스파크 버전 규칙 3
왜 스칼라인가? 4
스파크 전문가가 되고 싶다면 어쨌든 약간이라도 스칼라를 알아야 한다 4
스파크의 스칼라 API는 자바 API보다 훨씬 사용하기 쉽다 5
스칼라는 파이썬보다 성능이 더 뛰어나다 5
꼭 스칼라를 써야만 하는가? 5
스칼라 배우기 6
요약 7
CHAPTER 02 스파크는 어떻게 동작하는가? 8
스파크는 빅데이터 생태계에서 어떻게 자리 잡고 있는가? 9
스파크 컴포넌트 10
스파크의 병렬 연산 모델: RDD 12
지연 평가 13
메모리 영속화와 메모리 관리 16
불변성과 RDD 인터페이스 17
RDD의 종류 19
RDD의 함수들: 트랜스포메이션 vs. 액션 20
넓은 종속성 vs. 좁은 종속성 21
스파크 잡 스케줄링 23
애플리케이션 간의 자원 할당 23
스파크 애플리케이션 23
스파크 잡의 해부 25
DAG 26
잡 27
스테이지 27
태스크 28
요약 30
CHAPTER 03 DataFrame, Dataset와 스파크 SQL 31
SparkSession(혹은 HiveContext 또는 SQLContext)으로 시작하기 33
스파크 SQL 의존성 35
스파크 의존성 관리 36
하이브 JAR 회피 37
스키마의 기초 38
DataFrame API 42
트랜스포메이션 42
다중 DataFrame 트랜스포메이션 54
전통적인 SQL 질의/하이브 데이터와 상호 연동하기 54
DataFrame과 Dataset에서의 데이터 표현 55
텅스텐 55
데이터 적재/저장 함수들 57
DataFrameWriter와 DataFrameReader 57
포맷들 58
저장 모드 68
파티션(복구 및 쓰기) 68
Dataset 69
RDD, DataFrame, 로컬 컬렉션과의 상호 운용성 70
컴파일 타임의 강력한 타입 체크 71
더욱 쉬운(RDD와 ‘유사한’) 함수형 트랜스포메이션 71
관계형 트랜스포메이션 72
여러 Dataset에 대한 관계형 트랜스포메이션 72
Dataset에서의 그룹 연산 72
사용자 정의 함수와 사용자 집계 연산 함수(UDF, UDAF) 74
질의 옵티마이저 76
논리적/물리적 계획 76
코드 생성 77
큰 규모의 질의 계획과 반복 알고리즘 77
스파크 SQL 질의 디버깅 78
JDBC/ODBC 서버 78
요약 80
CHAPTER 04 조인(SQL과 코어 스파크) 81
코어 스파크 조인 81
조인 형태 선택하기 83
실행 계획 선택하기 85
스파크 SQL 조인 88
DataFrame 조인 89
Dataset 조인 92
요약 93
CHAPTER 05 효율적인 트랜스포메이션 94
좁은 트랜스포메이션 vs. 넓은 트랜스포메이션 95
성능에 대한 고려 사항 98
장애 내구성의 고려 사항 98
coalesce의 특별한 경우 99
내 트랜스포메이션은 어떤 타입의 RDD를 반환하는가? 100
객체 생성 최소화하기 101
기존 객체 재활용하기 102
더 작은 자료 구조 사용하기 105
mapPartitions로 수행하는 반복자-반복자 트랜스포메이션 109
반복자-반복자 트랜스포메이션이란 무엇인가? 109
시간적/공간적인 이득 111
예제 111
집합 연산 114
셋업 오버헤드 줄이기 116
공유 변수 116
브로드캐스트 변수 117
어큐뮬레이터 118
RDD 재사용 123
재사용의 사례들 123
재연산이 충분히 적은 비용인지 판단하기 126
재사용의 형태: 캐시, 영속화, 체크포인트, 셔플 파일들 128
알루시오(기존의 타키온) 132
LRU 캐싱 133
혼잡한 클러스터에 대한 고려 사항 135
어큐뮬레이터와의 상호 작용 136
요약 136
CHAPTER 06 키/값 데이터로 작업하기 137
골디락스 예제 139
골디락스 버전 0: 반복적인 해법 141
PairRDDFunctions과 OrderedRDDFunctions의 사용법 143
키/값 쌍의 액션들 144
groupByKey 함수는 왜 그렇게 위험한가? 145
골디락스 버전 1: groupByKey 해결책 145
집계 연산 선택하기 149
성능 고려 사항 및 집계 연산에 대한 사전 149
다중 RDD 연산 153
공동 그룹화 153
파티셔너와 키/값 데이터 154
스파크 파티셔너 객체 사용하기 155
해시 파티셔닝 155
레인지 파티셔닝 156
사용자 파티셔닝 157
트랜스포메이션에서 파티셔닝 정보 보존하기 157
공존하는 RDD와 공동 파티셔닝된 RDD 활용하기 158
PairRDDFunctions의 매핑과 파티셔닝 함수 사전 160
OrderedRDDFunctions의 함수 사전 162
sortByKey를 사용하여 두 개의 키로 정렬하기 163
보조 정렬과 repartitionAndSortWithinPartitions 함수 164
키로 그룹화하고 값을 정렬하는 함수에 repartitionAndSortWithinPartitions 활용하기 165