初めてのSpark
オライリー・ジャパン
はじめに
日本語版まえがき
まえがき
1章 Sparkによるデータ分析への招待
1.1 Apache Sparkとは何か?
1.2 統合スタック
1.2.1 Spark Core
1.2.2 Spark SQL
1.2.3 Spark Streaming
1.2.4 MLlib
1.2.5 GraphX
1.2.6 クラスタマネージャ
1.3 Sparkを使う人とその目的
1.4 データサイエンスのタスク
1.4.1 データ処理アプリケーション
1.5 Sparkの歴史
1.6 Sparkのバージョンとリリース
1.7 Sparkのストレージ層
2章 Sparkのダウンロードと起動
2.1 Sparkのダウンロード
2.2 SparkのPythonおよびScalaシェルの紹介
2.3 Sparkの中核となっている概念
2.4 スタンドアローンのアプリケーション
2.5 SparkContextの初期化
2.6 スタンドアローンアプリケーションの構築
2.7 まとめ
3章 RDDを使ったプログラミング
3.1 RDDの基本
3.2 RDDの生成
3.3 RDDの操作
3.3.1 変換
3.3.2 アクション
3.3.3 遅延評価
3.4 Sparkへの関数の渡し方
3.4.1 Python
3.4.2 Scala
3.4.3 Java
3.5 一般的な変換とアクション
3.5.1 基本的なRDD
3.5.2 異なる型のRDDへの変換
3.6 永続化(キャッシング)
3.7 まとめ
4章 キー/値ペアの処理
4.1 ペアRDDを使う理由
4.2 ペアRDDの生成
4.3 ペアRDDの変換
4.3.1 集計
4.3.2 データのグループ化
4.3.3 結合
4.3.4 データのソート
4.4 ペアRDDで使えるアクション
4.5 データのパーティショニング(上級編)
4.5.1 RDDのパーティショナの決定
4.5.2 パーティショニングの恩恵を受ける操作
4.5.3 パーティショニングに影響する操作
4.5.4 事例:PageRank
4.5.5 カスタムのパーティショナ
4.6 まとめ
5章 データのロードとセーブ
5.1 ロードやセーブの選択肢の重要性
5.2 ファイルフォーマット
5.2.1 テキストファイル
5.2.2 JSON
5.2.3 CSVとTSV
5.2.4 SequenceFile
5.2.5 オブジェクトファイル
5.2.6 Hadoopの入出力フォーマット
5.2.7 ファイルの圧縮
5.3 ファイルシステム
5.3.1 ローカル/通常のファイルシステム
5.3.2 Amazon S3
5.3.3 HDFS
5.4 Spark SQLでの構造化データ
5.4.1 Apache Hive
5.4.2 JSON
5.5 データベース
5.5.1 Java Database Connectivity
5.5.2 Cassandra
5.5.3 HBase
5.5.4 Elasticsearch
5.6 まとめ
6章 Sparkの高度なプログラミング
6.1 イントロダクション
6.2 アキュムレータ
6.2.1 クロージャに注意
6.2.2 アキュムレータとフォールトトレランス
6.2.3 カスタムアキュムレータ
6.3 ブロードキャスト変数
6.3.1 ブロードキャストの最適化
6.4 パーティション単位での処理
6.5 外部のプログラムへのパイプ
6.6 数値のRDDの操作
6.7 まとめ
7章 クラスタでの動作
7.1 イントロダクション
7.2 Sparkのランタイムアーキテクチャ
7.2.1 ドライバ
7.2.2 エクゼキュータ
7.2.3 クラスタマネージャ
7.2.4 プログラムの起動
7.2.5 まとめ
7.3 spark-submitによるアプリケーションのデプロイ
7.4 コードの依存対象のパッケージング
7.4.1 MavenでビルドするJavaのSparkアプリケーション
7.4.2 sbtでビルドするScalaのSparkアプリケーション
7.4.3 依存性の衝突
7.5 Sparkアプリケーション内およびSparkアプリケーション間でのスケジューリング
7.6 クラスタマネージャ
7.6.1 Standaloneクラスタマネージャ
7.6.2 Hadoop YARN
7.6.3 Apache Mesos
7.6.4 Amazon EC2
7.7 使用するクラスタマネージャの選択
7.8 まとめ
8章 Sparkのチューニングとデバッグ
8.1 SparkConfによるSparkの設定
8.2 実行の構成要素:ジョブ、タスク、ステージ
8.3 情報の探し方
8.3.1 Spark Web UI
8.3.2 ドライバおよびエクゼキュータのログ
8.4 パフォーマンスに関する重要な考慮点
8.4.1 並列度
8.4.2 シリアライゼーションのフォーマット
8.4.3 メモリ管理
8.4.4 ハードウェアのプロビジョニング
8.5 まとめ
9章 Spark SQL
9.1 Spark SQLとのリンク
9.2 アプリケーション内でのSpark SQLの利用
9.2.1 Spark SQLの初期化
9.2.2 基本的なクエリの例
9.2.3 SchemaRDD
9.2.4 キャッシング
9.3 データのロードとセーブ
9.3.1 Apache Hive
9.3.2 Parquet
9.3.3 JSON
9.3.4 RDD
9.4 JDBC/ODBCサーバー
9.4.1 Beelineの利用
9.4.2 長期間存在するテーブルとクエリ
9.5 ユーザー定義関数
9.5.1 Spark SQLのUDF
9.5.2 HiveのUDF
9.6 Spark SQLのパフォーマンス
9.6.1 パフォーマンスチューニングのオプション
9.7 まとめ
10章 Spark Streaming
10.1 シンプルな例
10.2 アーキテクチャと抽象化
10.3 変換
10.3.1 ステートレスな変換
10.3.2 ステートフルな変換
10.4 出力操作
10.5 入力ソース
10.5.1 コアのソース
10.5.2 追加のソース
10.5.3 複数ソースとクラスタのサイジング
10.6 常時稼働の運用
10.6.1 チェックポイント処理
10.6.2 ドライバのフォールトトレランス
10.6.3 ワーカーのフォールトトレランス
10.6.4 レシーバのフォールトトレランス
10.6.5 処理の保証
10.7 ストリーミングのUI
10.8 パフォーマンスの検討
10.8.1 バッチとウィンドウのサイズ
10.8.2 並列度
10.8.3 ガベージコレクションとメモリ消費
10.9 まとめ
11章 MLlibを使った機械学習
11.1 概要
11.2 システム要件
11.3 機械学習の基礎
11.3.1 サンプル:スパムの分類
11.4 データ型
11.4.1 ベクトルを使った処理
11.4.2 アルゴリズム
11.4.3 特徴抽出
11.4.4 統計処理
11.4.5 分類と回帰
11.4.6 クラスタリング
11.4.7 協調フィルタリングとレコメンデーション
11.4.8 次元削減
11.4.9 モデルの評価
11.5 テクニックとパフォーマンスの検討
11.5.1 特徴の用意
11.5.2 アルゴリズムの設定
11.5.3 RDDの再利用のためのキャッシング
11.5.4 スパース性の認識
11.5.5 並列度
11.6 パイプラインAPI
11.7 まとめ
付録A 原書発行以降の変更点
A.1 付録Aの内容について
A.2 バージョン1.2.1の主な変更内容
A.2.1 Sparkコア
A.2.2 Spark SQL
A.2.3 Spark Streaming
A.2.4 PySpark
A.3 バージョン1.2.2の主な変更内容
A.3.1 Sparkコア
A.3.2 PySpark
A.4 バージョン1.3.0の主な変更内容
A.4.1 Sparkコア
A.4.2 DataFrame API
A.4.3 Spark SQL
A.4.4 Spark ML/MLlib
A.4.5 Spark Streaming
A.4.6 GraphX
A.5 バージョン1.3.1の主な変更点
A.5.1 Sparkコア
A.5.2 Spark SQL
A.5.3 Spark Streaming
A.5.4 PySpark
A.6 バージョン1.4.0の主な変更点
A.6.1 SparkR
A.6.2 Sparkコア
A.6.3 DataFrame API and Spark SQL
A.6.4 Spark ML/MLlib
A.6.5 Spark Streaming
A.7 まとめ
付録B Spark SQLについて本編の補足
B.1 APIの使い方の変更
B.1.1 初期化方法の変更
B.1.2 データのロードとセーブの方法の変更
B.1.3 UDFの登録方法の変更
B.2 DataFrame
B.2.1 RDDからDataFrameを生成する方法
B.2.2 DataFrame API
B.3 まとめ
付録C Spark/MapReduceの機械学習ライブラリ比較検証
C.1 背景と目的
C.2 検証の概要
C.3 対象アルゴリズムの概要
C.3.1 アイテムベースの協調フィルタリング
C.3.2 ALSを用いた協調フィルタリング
C.3.3 2つのアルゴリズムの違い
C.4 比較方法
C.5 Sparkのチューニング
C.6 検証結果
C.7 まとめ
索引