はじめに
第1章 Apache Sparkとは
第2章 チューニングのための情報取得
第3章 基本的なアルゴリズム
第4章 チューニングの考え方
第5章 チューニングの手法
本書では、Apache Sparkを利用したビッグデータを対象としたクエリのチューニングについて取り上げます。ビッグデータを学ぶとなると、インフラ構築の話からはじまり、実際のデータを扱い始めるまでが遠い印象があります。近年ではクラウド上のマネージドサービスを利用するなど、既にインフラが整っているケースも多いので、データの扱いを中心とした学び方があっても良いのではないかと考えています。また、ビッグデータという言葉がバズワードとして広まっているにも関わらず、そのデータを処理・分析するために必要なクエリのチューニングに関する技術情報、特に日本語の情報が多くは無いと感じています。そのような背景から、私自身がクエリのチューニングを学んだ際に、あれば良かったと思う情報をまとめて、本書を執筆しました。
本書では、Apache Sparkのインフラ構築やプログラミングといった内容は含めず、クエリのチューニングのみとしてコンパクトな内容にまとめました。分散処理の基本的なアルゴリズムである「Map Reduce」を説明した上で、それらを利用したテーブルの結合方法、チューニング・性能が出ない場合に注目すべき観点、具体的なチューニング手法を紹介していきます。
ビッグデータに限らず、クエリのチューニングはパズルを解くような感覚で、順序立てて整理して考えていく必要があります。本書で紹介している基本的な知識・よく使う手法は、そのようにクエリのチューニングを考える時に、ヒントとして役立つはずです。また、本書ではクエリのチューニングのみを扱いましたが、それぞれの手法は、考え方から説明しているので、ScalaやPythonなどを用いたSparkのプログラミングを行う場合でも応用できると考えています。本書がビッグデータの集計や分析を行う方々の助けとなれば幸いです。
第1章は、ビッグデータのクエリチューニングの考え方、Apache Sparkの概要を説明します。
第2章は、チューニングのための情報の取得方法を説明します。最初にApache Sparkの環境構築手順を説明した後、チューニングのために必要な情報の取得方法として、実行計画とHistory Serverについて紹介します。
第3章は、ビッグデータ処理の基本になるMapReduceアルゴリズムと、MapReduceを利用したテーブルの結合方法(Sort Merge JoinとBroadcast Join)を説明します。
第4章は、クエリのチューニングのための基本的な考え方を説明します。性能が出ない場合に調べるべき観点と、PartitionやSaltingなどの基本的な知識を紹介します。
第5章は、具体的なクエリチューニングの手法を紹介します。Data Skewの対処方法として、Salted JoinやSkew Join。それ以外に、範囲のJoin・中間ファイルのPartition化のテクニックを紹介します。
本書に掲載している手順やソースコードは、以下の環境にて動作確認を行いました。
・Ubuntu Linux
─OS: Ubuntu 20.04.2 LTS
─Java: Java 1.8.0_292
─Apache Spark: 3.1.2, Apache Hadoop 3.2
・macOS
─OS:macOS Big Sur 11.5.2 / Chip: Apple M1
─Java:Java 1.8.0_281
─Apache Spark: 3.1.2, Apache Hadoop 3.2
本書に記載された内容は、情報の提供のみを目的としています。本書を用いた運用は、お客様自身の責任と判断によって行って下さい。これらの情報の運用の結果について、著者及びアーリース情報技術株式会社はいかなる責任も負いません。