詳解 Apache Spark

[表紙]詳解 Apache Spark

B5変形判/352ページ

定価(本体3,600円+税)

ISBN 978-4-7741-8124-0

電子版

→学校・法人一括購入ご検討の皆様へ

書籍の概要

この本の概要

Apach Sparkはより高速にビッグデータを処理するための分散処理フレームワークです。 SQLインターフェースや機械学習などの機能が標準で組み込まれ,バッチ処理だけでなくストリーミング処理や対話的な処理にも対応できるため,さまざまなシーンのデータ分析を強力にサポートします。

本書では,Sparkの分散処理の基礎であるRDDのしくみ,Sparkを構成する各コンポーネントの機能を理解するところからはじめます。 さらにSparkクラスタの構築と運用,構造化データを処理するためのDataFrame APIとSpark SQL,ストリーミング処理のためのSpark Streaming,機械学習ライブラリMLlib,グラフ処理のためのGraphXの各コンポーネントの実践的な利用方法を基礎から徹底的に解説します。

また基本機能の解説だけではなく,多くの実践的な利用例を通してSparkを理解し,アプリケーション作成ができることを目指す構成となっています。「5章 DataFrame APIとSpark SQL」では構造化データを分析するためのインタフェースを利用し,実際に公開されているオープンデータの分析を通してDataFrame APIやSpark SQLの使い方が学べます。「6章 Spark Streaming」ではSparkのストリーミング処理によるアクセスログの集計処理やTwitterのデータ抽出処理の例を通して,Spark Streamingのアプリケーション作成について学べます。「7章 MLlib」ではSparkの機械学習ライブラリによる好みの映画のレコメンドや住宅価格の予測やスパムメッセージの検出する方法を学べます。「8章 GraphX」ではSparkのグラフ処理ライブラリによるユーザの行動ログのグラフ化やアソシエーション・ルールによるアイテムレコメンドの例を通して,GraphXアプリケーションの実装方法が学べます。 SparkはScala,Java,Python,Rのプログラミングインタフェースを提供していますが,本書ではScalaで解説をします。

こんな方におすすめ

  • データ分析者,データサイエンティスト,インフラエンジニア

目次

第1章 Sparkの基礎

  • 1.1 Apache Sparkとは?
    • 1.1.1 SparkとMapReduce
    • 1.1.2 Sparkの実行環境
    • 1.1.3 Sparkの歴史
  • 1.2 Sparkのテクノロジースタック
    • 1.2.1 Spark Core
    • 1.2.2 Spark SQL
    • 1.2.3 Spark Streaming
    • 1.2.4 MLlib
    • 1.2.5 GraphX
  • 1.3 Sparkの利用者とそのメリット
    • 1.3.1 データサイエンティスト
    • 1.3.2 データエンジニア
    • 1.3.3 アプリケーションエンジニア

第2章 Sparkの導入

  • 2.1 実行環境の構築
    • 2.1.1 Sparkのダウンロードと展開
    • 2.1.2 主要なファイルやディレクトリの説明
  • 2.2 インタラクティブシェルの実行
  • 2.3 サンプルプログラム1:WordCount
  • 2.4 サンプルプログラム2:Filtering
  • 2.5 Sparkが動作する裏側
  • 2.6 スタンドアロンでのアプリケーションの実行
    • 2.6.1 プロジェクト構成
    • 2.6.2 サンプルアプリケーションのビルドと実行
    • 2.6.3 クラスの実行
  • 2.7 まとめ

第3章 RDD

  • 3.1 RDDの基本と構造
    • 3.1.1 分散コレクション
    • 3.1.2 イミュータブルな性質
  • 3.2 RDDの操作(基本)
    • 3.2.1 RDDの作成
    • 3.2.2 変換とアクション
    • 3.2.3 シャッフル
    • 3.2.4 遅延評価
    • 3.2.5 永続化
  • 3.3 DAGとRDDの関係
    • 3.3.1 DAGの可視化
  • 3.4 変換
    • 3.4.1 基本の変換
    • 3.4.2 RDDを引数にとる変換
  • 3.5 アクション
    • 3.5.1 基本のアクション
    • 3.5.2 集約のアクション
    • 3.5.3 算術演算のアクション
  • 3.6 RDDの操作(応用)
    • 3.6.1 ペアRDD(キー・バリュー形式のRDD)の操作
    • 3.6.2 RDDの結合
    • 3.6.3 RDDの永続化
    • 3.6.4 共有変数
  • 3.7 パーティション
    • 3.7.1 パーティション数の調整
    • 3.7.2 パーティショナの設定
    • 3.7.3 カスタムパーティショナ
  • 3.8 データのロードとセーブ
    • 3.8.1 データのロード
    • 3.8.2 データのセーブ
  • 3.9 まとめ

第4章 クラスタ構築と運用

  • 4.1 Sparkのアーキテクチャ
    • 4.1.1 Sparkのコンポーネント
    • 4.1.2 Sparkアプリケーション実行のしくみ
    • 4.1.3 SparkとHadoop
  • 4.2 Sparkクラスタの構築とアプリケーションのデプロイ
    • 4.2.1 Sparkの入手
    • 4.2.2 ローカルモード
    • 4.2.3 Spark Standaloneクラスタマネージャでのクラスタ構築
    • 4.2.4 Hadoop YARNによるクラスタ構築
    • 4.2.5 Apache Mesosによるクラスタ構築
    • 4.2.6 Amazon EC2上でのクラスタ構築
  • 4.3 Sparkアプリケーションの開発とデプロイ
    • 4.3.1 開発
    • 4.3.2 パッケージング
    • 4.3.3 デプロイ
  • 4.4 Sparkの運用
    • 4.4.1 ジョブのスケジューリング
    • 4.4.2 チューニング
    • 4.4.3 モニタリング
    • 4.4.4 Sparkの設定
    • 4.4.5 ハードウェア構成の選択
  • 4.5 まとめ

第5章 DataFrameとSpark SQL

  • 5.1 DataFrame APIとSpark SQL
    • 5.1.1 サポートしているデータソースとフォーマット
    • 5.1.2 DataFrameやSpark SQLで利用できるデータ型
    • 5.1.3 DataFrameのメリット
  • 5.2 データの準備
    • 5.2.1 データのダウンロード
    • 5.2.2 データの説明
  • 5.3 DataFrame APIを利用したデータ処理
    • 5.3.1 SQLContextの生成
    • 5.3.2 DataFrameの生成
    • 5.3.3 DataFrameの基本操作
    • 5.3.4 DataFrameの欠損値の扱い方
    • 5.3.5 DataFrameの書き込みと読み込み
    • 5.3.6 SQLクエリでDataFrameを操作
  • 5.4 パフォーマンスチューニング
    • 5.4.1 DataFrameのキャッシュ
    • 5.4.2 実行計画の確認
    • 5.4.3 パーティション数
  • 5.5 外部システムとの連携
    • 5.5.1 Apache Hiveとの連携
    • 5.5.2 JDBCによる連携
  • 5.6 Dataset API
    • 5.6.1 Dataset APIとは
    • 5.6.2 Datasetの生成
    • 5.6.3 DataFrameやRDDへの変換
    • 5.6.4 Datasetの基本操作
  • 5.7 DataFrame APIを利用した BAY AREA BikeShare の分析
    • 5.7.1 データクレンジング
    • 5.7.2 全体の利用状況の分析
    • 5.7.3 サンフランシスコ市内の利用状況の分析
    • 5.7.4 Googleマップ上に可視化
  • 5.8 まとめ

第6章 Spark Streaming

  • 6.1 Spark Streamingの特徴
    • 6.1.1 Spark Streamingのストリームデータ処理
    • 6.1.2 Spark Streamingのデータ構造【DstreamとRDDs 】
    • 6.1.3 Spark StreamingのCheckPointと耐障害性
    • 6.1.4 DStreamのStatefulな変換処理
    • 6.1.5 DStreamのWindow
    • 6.1.6 Spark Streamingの入力
  • 6.2 Spark Streamingの実行
    • 6.2.1 Spark Streamingのインタラクティブシェルでの実行
  • 6.3 Streamingアプリケーションの作成
    • 6.3.1 ディレクトリの作成
    • 6.3.2 ビルド
    • 6.3.3 Spark Streamingアプリケーションの終了
    • 6.3.4 Spark Streamingアプリケーションの耐障害性
  • 6.4 Spark Streamingの入力操作
    • 6.4.1 Kafka
    • 6.4.2 Twitter
  • 6.5 DStreamの変換操作
    • 6.5.1 DStreamの変換
    • 6.5.2 DStreamの結合
    • 6.5.3 DStreamのアクション
    • 6.5.4 DStreamのWindow操作
  • 6.6 DStreamの出力操作
  • 6.7 Spark Streamingのconfiguration
    • 6.7.1 Streamingで設定できる主要なconfオプション
  • 6.8 Spark Streamingの例
    • 6.8.1 Streamingを使ったアクセス集計処理の作成
    • 6.8.2 Twitterからの抽出・集計処理
  • 6.9 パフォーマンスチューニング
    • 6.9.1 Streamingで設定できる主要なコマンドオプション
    • 6.9.2 タスク数の制御
  • 6.10 まとめ

第7章 MLlib

  • 7.1 機械学習の基礎知識
    • 7.1.1 機械学習と身近での活用例
    • 7.1.2 機械学習の利用プロセスと特徴抽出
    • 7.1.3 教師なし学習
    • 7.1.4 教師あり学習
    • 7.1.5 予測モデルの評価
    • 7.1.6 過学習と汎化能力・正則化
    • 7.1.7 線形分離可能
  • 7.2 MLlibでの機械学習
    • 7.2.1 2つのAPIセット
    • 7.2.2 ML PipelineのAPI構成
    • 7.2.3 ベクトルと行列の表現
    • 7.2.4 提供している機械学習アルゴリズム
    • 7.2.5 特徴の抽出・変換・選択
    • 7.2.6 交差検証
    • 7.2.7 評価メトリクス
    • 7.2.8 学習済みモデルの永続化とエクスポート
  • 7.3 MLlibの利用例
    • 7.3.1 スパムメッセージの検出
    • 7.3.2 きのこの可食・有毒の識別
    • 7.3.3 住宅価格の予測
    • 7.3.4 好みの映画のレコメンド
  • 7.4 まとめ

第8章 GraphX

  • 8.1 GraphXの特徴
    • 8.1.1 GraphXの利点
  • 8.2 GraphXのデータ構造
    • 8.2.1 グラフの作成
    • 8.2.2 グラフの確認
    • 8.2.3 グラフの操作
  • 8.3 グラフアルゴリズム
    • 8.3.1 Graph Generators
    • 8.3.2 Triangle Counting
    • 8.3.3 PageRank
    • 8.3.4 Pregel API
  • 8.4 GraphXによるレコメンデーションシステムの事例
    • 8.4.1 ユーザの行動ログをグラフ化
    • 8.4.2 グラフのスケールフリー性を考慮した購入ログの生成
    • 8.4.3 アソシエーション・ルールによるアイテムレコメンドの実装例
  • 8.5 チューニング
    • 8.5.1 VertexRDD,EdgeRDDの永続化
    • 8.5.2 パーティショナの指定
    • 8.5.3 データの前処理
  • 8.6 まとめ

Appendix YARN

  • A.1 YARNのアーキテクチャ
    • A.1.1 ResourceManager
    • A.1.2 NodeManager
  • A.2 YARNの運用
    • A.2.1 YARNにおける障害や例外ケース
    • A.2.2 ResourceManager HA
  • A.3 YARNの設定とチューニング
  • A.4 Node Labeling
  • A.5 まとめ
  • 索引
  • 参考資料

著者プロフィール

下田倫大(しもだのりひろ)

株式会社ブレインパッドに所属。SNS企業にてHadoopを用いたソーシャルグラフの解析やレコメンドエンジン開発,広告商品の開発を行う。その過程でマーケティングデータの活用に興味を持ち2013年8月ブレインパッドに入社。同社が開発するプライベートDMP「Rtoaster」の外部DSP/DMP連携や,運用型広告最適化ツール「L2Mixer」の開発を担当。2015年7月より,プロダクトにとらわれず同社のビジネスを技術的側面からサポートする業務に従事している。最近の興味はアナリティクスとエンジニアリングの融合による価値創出と組織づくりについて考えること。本書の第1章,第2章,第3章の執筆を担当。
Twitter:@rindai87
facebook:https://www.facebook.com/rindai87


師岡一成(もろおかかずしげ)

株式会社ブレインパッドに所属。新卒入社したSIerで主に小売・流通業の基幹システムの構築に携わる。Hadoopやデータ分析に興味を持ち2012年に株式会社ブレインパッドに入社。Hadoopを用いたログ解析システムや,プライベートDMP「Rtoaster」の広告連携・セグメンテーションツールの開発を担当。現在は全社的な技術支援業務を行っている。本書の第1章,第2章,第3章の執筆を担当。
GitHub:ka2ush19e


今井雄太(いまいゆうた)

Hortonworksに所属。2011年に広告配信システムのレポート作成をHadoopを使ってみたのがビッグデータエコシステムとの出会い。2012年から約3年,AWSのソリューションアーキテクトとしてAmazon Elastic MapReduceやAmazon Kinesis,Amazon DynamoDBなどを主な担当。ゲームや広告のワークロードで必要となる分析や集計などをAWS上でいかに快適に実現するかというテーマのもとに活動。2015年にビッグデータつながりでHortonworksに転職,引き続きHadoopやSparkをより便利に利用するためのサービスを仕事にしています。本書の第4章,Appendixの執筆を担当。
Twitter:@imai_factory
facebook:https://www.facebook.com/imai.factory


石川有(いしかわゆう)

株式会社リクルートテクノロジーズ アドバンスドテクノロジーラボに所属。株式会社ミクシィ在籍時にHadoopやHiveなどの分散処理システムに興味を持ち,分析基盤構築からアプリケーション設計,データサイエンス業務まで幅広くこなす。現在は,Apache Sparkの特に機械学習コンポーネントMLlibの開発に従事。本書の第5章の執筆を担当。
GitHub:yu-iskw


田中裕一(たなかゆういち)

日本IBMに所属。Web系・広告系企業にて,Hadoop/Spark/KafkaなどHadoopエコシステムを利用した広告システム(DMP)・行動分析基盤・レコメンド基盤の全体アーキテクチャ設計やプログラミング,最適化,行動解析を担当。Spark/Hadoopエコシステムを筆頭にOSSを組み合わせた大規模なアーキテクチャの設計に従事。2016年にSpark/Hadoopを多様な業種に広げるため,活動の場をIBMに移す。最近はビッグデータを利用した新しい価値創造と,ビッグデータを意識したワークフローの統合・再構築について妄想してます。本書の第6章の執筆を担当。
facebook:https://www.facebook.com/tanaka.y.p
GitHub:yuichi-tanaka


小宮篤史(こみやあつし)

スマートニュース株式会社に所属。大学・大学院で計算機工学を学んだ後に新卒入社したSIerで,レコメンドエンジンの研究開発業務に従事。以来,Web系エンジニアとしてのキャリアを積む傍らで統計や機械学習を学ぶ。現在はスマートニュース株式会社にて,広告配信システムのエンジニアとして最適化や機械学習を用いた機能開発に従事する。本書の第7章の執筆を担当。
Twitter:@komiya_atsushi
GitHub:komiya-atsushi


加嵜長門(かさきながと)

株式会社DMM.comラボに所属。大学院やスタートアップ企業で,マルチメディアデータベースを対象とした検索やレコメンドアルゴリズムの研究を行う。現在はDMM.comラボにおいて,Sparkを用いた行動解析やレコメンド基盤の研究開発を行う。特にグラフDBやグラフ処理を活用したレコメンドアルゴリズムについて模索中。本書の第8章の執筆を担当。
GitHub:KasakiNagato