1. ホーム >
  2. ブログ ~人材育成最前線~ >
  3. 【今求められる人材】夏の思い出はApache Sparkとともに... "Spark the season in the sun!" その1

【今求められる人材】夏の思い出はApache Sparkとともに... "Spark the season in the sun!" その1

[2014年9月11日]

こんにちは、富士通ラーニングメディアの田中です。このブログには3回目の登場です。これまで、「項目反応理論(IRT)を活用したテスト品質向上の取り組み」や「検索トレンドから読み解くデータサイエンス、データサイエンティスト」というコラムを執筆しました。

これまでのコラムでは、データを分析して、結果から新しい価値を発見する、という観点で当社の取り組みやトレンドを紹介しましたが、今回は新しいビッグデータ技術として注目される、データを分析するための「環境」であるApache Spark(以下、Spark)について取り上げます。

 

講師画像

プロフィール:田中 健太

ビッグデータ、クラウドおよびシステム基盤関連の研修を担当。
組版ソフトTeXや、統計解析ソフトRなど、OSS関連のコミュニティ活動を学生時代から続けています。
また、趣味で南関東4場はもちろん、金沢、高知、荒尾、帯広ばんえいと、日本各地の競馬場を巡っています。めざせ、国内全15場踏破!

   

イメージ図

 図1: SparkプロジェクトのWebサイト(https://spark.apache.org/

コラムのタイトルのように、今年の夏は、新しい講習会を開発するためにSparkの検証に明け暮れていました。ここでは、その成果の一部をご紹介します。......夏の過ごし方がそれでいいのか! というツッコミはなしでお願いします。そして、「夏休みの宿題」として書いた文章がとても長くなってしまいましたので、今回と次回、2回に分けてお送りします。

 

<Apache Sparkとは?>

さて、今回のテーマであるApache Sparkとは何でしょうか。SparkプロジェクトのWebサイトには次のように書いてあります。

"Apache Spark is a fast and general engine for large-scale data processing. "
訳: Apache Sparkは大規模データ処理のための高速で汎用的なエンジンです

つまり、「ビッグデータ」を処理するための環境と言えます。大量で多種多様なデータを複数のサーバで分散並列処理し、高速なバッチ処理や新たな知識の発見などを実現します。ビッグデータの分散並列処理というと、Apache Hadoop (以下、Hadoop)をイメージする方が多いと思いますが、Sparkは、同様にApache Software Foundation(ASF) の支援のもとで開発されている、「ネクストHadoop」(※Sparkプロジェクトが公式に「ネクストHadoop」と名乗っているわけではなく、執筆者の見解です)の技術です。

歴史的には、Sparkは2009年からカリフォルニア大学バークレイ校(UCB)のAMPLab(Algorithms, Machines and People Lab) でBDAS(Berkeley Data Analytics Stack) を構成する一部として開発が開始され、2010年にオープンソース化されました。その後、ASFにソースコードが寄贈され、"Apache"の名を冠して提供されています。Sparkを含むビッグデータ処理環境の全体像であるBDASについては、AMPLabのWebページを参照してください。

 

イメージ図

 図2: AMPLab BDASのアーキテクチャー(AMPLab Webページを参考に当社にて作成)

 

HadoopとSparkの共通点と相違点(の一部)を以下にまとめます。

■共通点

  • ASFのトップレベルプロジェクトである(Sparkは14年3月に昇格)
  • 管理サーバと処理サーバからなるクラスタ構成を取る ※Sparkでは、管理サーバをクラスタマネージャ、処理サーバをワーカーノードと呼びます
  • 分散ファイルシステム(HDFS)からデータを読み込める
  • MapReduceプログラミングモデルを利用できる
  • クラウド環境で実行できる ※HadoopはAmazon Elastic MapReduceというサービスが提供されています。Sparkは後述するようにAmazon EC2にデプロイするスクリプトが付属します
  • SQLで検索するためのインタフェースや機械学習ライブラリなどHadoop / Sparkを活用するための関連プロジェクトが充実している

■相違点

  • Sparkはデータをメモリにキャッシュして"インメモリコンピューティング"ができる ※Hadoopでもベンダーが販売する拡張機能を利用すればインメモリコンピューティングができるようです
  • 各ノードに読み込まれたデータは障害耐性に優れるRDDs(Resilient Distributed Datasets)という形式で保持され、分散配置される
  • Scala、Pythonに対応したシェルによるインタラクティブ操作ができる
  • Javaに加え、Scala、Pythonによるバッチ処理ができる
  • TwitterやApache Flume(ログ監視ソフトウェア)などのストリームデータにネイティブ対応している

ここからは、上述の相違点からいくつかを取り上げて、私が調査したことをまとめます。

<インメモリコンピューティングとは>

インメモリコンピューティング(In-memory computing)は、データやプログラムをサーバのメモリに配置して処理を行う技術です。メモリにデータを配置することで、ループ処理など繰り返しデータにアクセスする際のディスクI/Oのボトルネックを解消できます。

HadoopのMapReduceモデルにおいて繰り返し処理を行う場合、最初にHDFSから大規模データが読み出されます。データは分割され、各ノードで実行するタスクとともにサーバに転送されます。そして、1回目のMapReduceタスクが実行されます。Hadoopでは、いちどMapReduceタスクが終了すると、データは各ノードから削除されます(もちろん分散ファイルシステム上には残ります)。加えて、タスクを実行するJVM(Java仮想マシン)も終了します。そして、2回目のMapReduceタスクが始まる際には、またHDFSからの読み込みと各ノードへの配置、JVMの起動などが行われます。このため、Hadoopによる繰り返し処理はボトルネックとなる部分が多く、期待するパフォーマンスは得られません。

一方Sparkでは、分割されたデータを各ノードのメモリ上にキャッシュできます。これにより、ディスクアクセスによる性能低下を防ぎます。また、そもそもMapReduceモデルを使わないプログラミングができるため、タスクのたびにJVMが起動・終了することもありません。

 

イメージ図

 図3: Resilient Distributed Datasets (RDDs) の概念

このように、Sparkではインメモリコンピューティングが可能なため、同じデータに対して少しずつパラメータ(数値)を変えて繰り返しアクセスし、最適解を見つけ出す機械学習などの手法において、Hadoopに対する優位性があります

 

<Sparkで利用できるプログラム言語>

Hadoopが標準でサポートしているのはJavaのみです。Hadoop Streamingという仕組みを用いて様々なプログラム言語やソフトウェアと連携することもできますが、基本的にはJavaでMapReduceジョブを記述します。

Sparkは、Javaの他にScalaとPythonに対応しています。それぞれの言語に対応するAPIが提供されており、容易にデータ処理プログラムを開発できます。

<Sparkにおけるインタラクティブ処理>

Hadoopは、標準ではバッチ処理のみに対応しています。一連のデータ処理のうち、一部だけを変更して結果を確認したいという場合にも、ジョブを作成し、時間をかけて処理を実行する必要があります。

Sparkでは、ScalaとPythonにそれぞれ対応した"シェル"が提供されます。1行ずつ対話的にコマンド(プログラム)を入力していくことで、その都度結果を確認できます。これにより、柔軟にパラメータを変更しながら、トライアンドエラーで分析を行えます

 

イメージ図

 図4: Sparkにおけるインタラクティブ処理の例(Scalaシェル)

 

 <第1回のまとめ>

ここまで、Apache Sparkの概要を紹介しました。次回は、Sparkの関連プロジェクトや、Sparkクラスタをクラウド(Amazon EC2)上に構築する手順などを紹介します。今回の内容をまとめると、以下のようになります。

  • Apache Sparkはインメモリコンピューティングが可能な分散並列処理フレームワークである
  • Scala、Java、Pythonに対応している
  • インタラクティブ処理とバッチ処理の両方が可能

ご参考までに。。

☆コラムでご紹介した「Apache Spark」の概要を、豊富な実習で体験できるコースです。

→ 体験!Apache Spark 

☆そのほか、新しいビッグデータ技術として注目のコースをはじめ、データ活用のための技術や、 データ分析する方法論など、当社がご提供するビッグデータ関連コース

→ ビッグデータ関連研修コースのご紹介

 

では、次回またお会いしましょう。

月別アーカイブ