KATOエンジニヤリング開発日誌

「アウトプット無きエンジニアにインプットもチャンスも無い」の精神で書いています

「詳解 Apache Spark」の第1章と第2章を読んだ

大規模データ分析基盤であるSparkについて興味が湧いてきたので、「詳解 Apache Spark」を読み始めました。

詳解 Apache Spark

詳解 Apache Spark

今回は第1章と第2章を読んだまとめです。

第1章 Sparkの基礎

Apache Sparkとは

  • Sparkはオンメモリでの分散処理に特化している。
    • メモリに乗り切らないような大規模なデータの場合はディスクを利用するなどして問題なく動作するようになっている。
  • Sparkはデータセットとして「RDD(Resilient Distributed Dataset)」を、プログラミングモデルとして「DAG(Directed Acyclic Graph)」の2つをコアアイデアとして実装されている。
  • MapReduceが普及しているのになぜSparkに注目が集まったのか?
    • MapReduceがバッチ処理に特化した仕組みに対し、Sparkはバッチ処理以外にも対話的な処理や繰り返し処理、ストリーミング処理といった多様なデータ処理パターンに対応できる仕組みを持っている。
  • Sparkの実行環境
    • Spark自体はScalaで実装されているが、Python、Java、Rに対してAPIが提供されているので、これらの言語で大規模データ処理のタスクに取り組むこともできる。
    • SparkのデータソースへのアクセスはHadoopが提供するHDFS(Hadoop Distributed File System)、AWSのS3、Google Cloud PlatformのGCSなどの多種多様に考慮されている。
  • Sparkのテクノロジースタックは下記の通り
    • Spark Core
      • SparkのコアとなるRDD、メモリ管理やタスクスケジューリングなど基本となる機能が提供されているコンポーネント
    • Spark SQL
      • 構造化データを操作するための処理が提供されているコンポーネント。
    • Spark Streaming
      • ストリーミングデータ処理を実現するためのコンポーネント。
      • Sparkが採用しているストリームデータのデータ構造は「DStream」と呼ばれるもので、厳密にはRDDと異なるがRDDとほぼ同等に扱うことができる。
    • MLlib
      • Sparkで実装された機械学習のライブラリ。
    • GraphX
      • グラフを生成・操作するためのグラフ演算処理のライブラリ。

第2章 Sparkの導入

Sparkが動作する裏側

Sparkアプリケーションはドライバプログラム(Driver Program)によって全体の処理を制御している。ドライバプログラムは実際に分散処理を実行するワーカノード(Worker Node)上のエグゼキュータ(Executor)を管理している。このエグゼキュータがドライバプログラムに書かれた処理を実行する。

ドライバプログラムはSparkContextオブジェクトを通じてSparkにアクセスしている。

f:id:masayuki_kato:20171003213503j:plain