第1回“Learning Spark”読書会 に参加しました

2015.03.02

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

2/28(土)に行われた第1回“Learning Spark”読書会に参加してきました。当日は、大きく分けて

  • 事前アンケート結果のご紹介
  • ``Introduction to Data Analysis with Spark'' -Apache Sparkによるデータ分析への招待-
  • ``Downloading Spark and Getting Started'' -Sparkを導入し、使ってみよう-
  • 懇親会


の流れで進みました。本記事では、セッションを聞かせて頂き、私自身が注目したポイントを挙げたと思います。

※気になったポイントの羅列となるため、発表者様の発言そのものや、セッション資料(後述するslideshare上の資料)の文言そのままとなっているところが多いかと思います。予め引用させて頂いていることをお断りしておきます。

事前アンケート結果のご紹介

主催者様である@data_sciesotist様による、事前アンケートの結果についての発表でした。

  • 2014、2015年にSparkを知った人が多い
  • (大体)20:50位の割合で、使ったことがない人が多い(正確な数値が発表されていましたが、メモできませんでした)


とのことでした。私も今年に入ってからApache Sparkは知りましたし、実務でも使ったことはありませんので、このアンケート結果には納得できました。

``Introduction to Data Analysis with Spark'' -Apache Sparkによるデータ分析への招待-

引き続き@data_sciesotist様による、Learning Sparkの第一章についてのセッションでした。以下にセッション資料のslideshareが公開されているので、詳細はそちらを参照してください。
第1回 ``Learning Spark'' 読書会 導入 ``Learning Spark読書会について''
第1回 ``Learning Spark'' 読書会 第1章 ``Introduction to Data Analysis with Spark''

本の紹介

  • Learning Spark
  • Apache Sparkについての日本語の本はまだないと思う、とのこと。
  • 全部で11章。
  • 第一回の読書会では、1章、2章について扱う。

Sparkとは何か

  • 高速・汎用の分散処理プラットフォームである。
  • インタラクティブ処理やストリーム処理に対応。
  • インメモリで高速な処理が可能。
  • バッチ処理、反復処理、インタラクティブ処理、ストリームを組み合わせ「データ分析パイプライン」を作れることが売り。
  • Python,Java,Scalaに対応。APIがあるので、自作プログラムから呼び出すことも可能。ただしPythonは7倍ほど遅い、という話も懇親会前に出た。

私個人としては、ストリーム処理や、バッチ処理でHadoopを組むほどの規模ではないが逐次実行が難しい規模の場合などにSparkは使えるのではないかと期待しています。

A Unified Stack

  • Sparkは密接に関連するコンポーネントから構成される(Spark SQL、Streaming、機械学習、GraphX)。
  • それらを組み合わせて使うことが出来る。
  • 使用する人の役割によって、使用する機能が変わってくる。例えばアナリスト→SQLでの検索、データサイエンティスト→Pythonシェル、一般従業員→バッチ、のように。

構成要素(1)Spark Core

  • スケジュール、メモリ管理、障害復旧、ストレージとのやりとりを担当。
  • RDDsについて。読み込んだデータをRDDという単位で扱う。
  • RDDはコレクションで、複数ノードにまたがって配置され、並列で処理される。

構成要素(2)Spark SQL

  • データをSQLライクな文法を使用して検索できる。
  • Hive, Parquet, JSONなどに対応。
  • BI ToolからSpark SQLを呼び出して、ビックデータを検索できる。

構成要素(3)Spark Streaming

  • ストリームを扱う。
  • ノードが落ちた場合も自動的に復旧してくれる。
  • 基本機能として耐障害性が提供されている。

構成要素(4) MLib

  • 機械学習の機能を提供する。
  • 分類、会期、クラスタリング、協調フィルタリング(レコメンド)のアルゴリズムを提供。

構成要素(5)GraphX

  • 「グラフ」を扱うためのパッケージ

構成要素(6)クラスタ管理

  • スケールアウト可能
  • Spark単体でもクラスタ化が可能。
  • YARN、Apache Mesosなどのクラスタマネージャ上でもクラスタ化が可能。

Data Science Tasks

  • やることは、データを分析してモデル化すること。
  • Spark SQL、機械学習(MLib)、Rとの組み合わせを使用。
  • アドホックな分析には、Scalaシェル、Pythonシェルを使用。

Data Processing Applications

  • アドホック分析からアプリケーションへの実装。
  • 多くのエンジニアができる(ただし高いスキルが必要)。

Storage Layers for Spark

  • ローカル,HDFS,S3,Cassandra,Hive,Hbaseなど。

``Downloading Spark and Getting Started'' -Sparkを導入し、使ってみよう-

@data_sciesotist様による、Learning Sparkの第二章の前半についてのセッションでした。以下にセッション資料のslideshareが公開されているので、詳細はそちらを参照してください。
第1回 ``Learning Spark'' 読書会 第2章 ``Downloading Spark and Getting Started''

Downloading Spark(1)

  • 動かしてみるだけなら、コンパイル済みバイナリをダウンロードするのがいい。
  • Windowsでは「Hadoop 2.4 and later」と書かれたものは動かない(主催者様談)。
  • WindowsでSparkを使う場合、スペースを含まないフォルダ名にする。

EC2へのデプロイ

  • spark-ec2 というスクリプトが標準であり、EC2にデプロイできる。
  • Bash+PythonなのでLinuxで動かすのが楽。
  • m3.largeインスタンス5台など、クラスタリングする環境を作ることができる。
  • ソースを持ってきて、上記のスクリプトを実行すると、セキュリティグループの作成〜インスタンスの作成などができる。
  • デフォルトはアメリカのリージョン。オプションにてリージョン、ソーンを指定できる。指定したインスタンスタイプが無いとエラーとなる。
  • 質疑応答で、destroyが上手く行かないケースがあったとの話がでました。これについては上手く行く・行かないは当たりはずれが有る。クラスタをキチンと作りたいときは、手動でインスタンスをつくる、との回答でした。

Spark Shellのデモ

  • conf/log4j.propertiesに出力される情報は設定可能。
  • Spark shellを立ち上げるとWeb UIも立ち上がる。 ブラウザにてlocalhost:4040にてアクセス可。
  • クラスタで使う場合にも提供される。(ポートは8080番)
  • クラスタを1つしか立ち上げないと、Scala Shellも一つしか立ち上がらない。
  • 複数ユーザで使いたいときなどは、複数のクラスタを立ち上げる必要がある。

まとめ

私自身がApache Sparkを触り始めたばかりなので、新しく知ることも沢山あり楽しかったです。主催者の@data_sciesotist様、参加者の皆様、ありがとうございました。