グラフ問題とバルク同期並列の常識をGiraphで体得:ビッグデータ処理の常識をJavaで身につける(5)(3/3 ページ)
Hadoopをはじめ、Java言語を使って構築されることが多い「ビッグデータ」処理のためのフレームワーク/ライブラリを紹介しながら、大量データを活用するための技術の常識を身に付けていく連載
処理コード
GiraphはGithubからソースコードをダウンロードできます。
GiraphにはSSSP問題のサンプルコード「src/main/java/org/apache/giraph/examples/SimpleShortestPathsVertex.java」が付属します。以下、コードの本質部分(BSPのsuperstepにおけるConcurrent Computation処理)を抜粋します(GiraphのWikiも参照ください)。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
- 前Superstepで送信されたメッセージ(隣接都市よりの最短時間の候補)が引数
- メッセージ内の最短時間の最小値を見つける。新たな最短時間の候補
- 【2】での最小値がいままでの最短時間より小さいときに【4】の処理を実施
- 始点からの最短時間を更新し、隣接都市に次のメッセージを送信する(この都市の現在の最短時間+隣接都市への時間)
このように、GiraphでSSSP問題を解決するための実装コードは、非常に簡単です。
Giraphの何が優れているのか
GiraphはPregelの実装なので、SSSP問題を解決するには「compute()」処理に十数行のコードを記述するだけで行えます。このcompute()処理は、「org.apache.hadoop.mapred.MapTask#run」の中で繰り返し実行され、以下のような特徴を持ちます。
- MapReduceの繰り返しではなく、1回のMap処理内で完結
- メッセージの送受信はHadoopのRPC機能を用いるのでHDFSアクセスが不要
- Superstepの繰り返しの収束判断はGiraphが行う
このため、MapReduceでの単純な解決方法と比較しますと、その欠点がすべて解決され、大規模なグラフ問題も効率的に取り扱えることになります。
Giraphのサンプルを動かしてみよう
Giraphに付属のSSSP問題のサンプルコードを稼働させる手順を示します。
まず、「hadoop-1.0.0」の実行間環境を整えて、Hadoopを稼働させます(手順は省略します)。次に、Giraphのソースコードを入手し(ここでは、Subversionを使用)、Mavenを用いてコンパイルします。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
都市のグラフ構造を表すデータは、以下のようなJSON形式で用意します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
この際に都市名は、数値で表現するので、次のようなデータになります(最短時間の<vertex value>の初期値は、ここでは有り得ない最大値として、仮に「10000」を用いています)。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
このデータをディレクトリ「shortestPathsInputGraph」内のファイルに保存し、HDFSにコピーします。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
SSSP問題のサンプルSimpleShortestPathsVertexを実行します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
実行結果はディレクトリ「shortestPathsOutputGraph」に出力されるので、その内容を確認します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
次のように、<vertex value>の欄に最短時間が求まった結果が得られます。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
実業務のグラフ問題はGiraphで解決
本稿では、グラフ問題を効率的に解くためのソリューションとしてHadoop上で稼働するGiraphを紹介しましたが、いかがでしたでしょうか。
グラフ問題は机上レベルでは何も工夫しない単純なMapReduceでも解決できますが、処理効率を考えると、実業務への適応は困難です。グラフ問題を解決するのに、問題の特性にマッチした専用のソリューションGiraphを試してみてはいかがでしょうか。
著者紹介
木村幸敏(きむら ゆきとし)
大規模案件での性能問題にかかわり、アプリのボトルネック特定/解消にかかわる。
また各種FWの適用による生産性向上に取り組む。
TIS先端技術センターでは、採れたての検証成果や知見などをWebサイトで発信中
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- 次世代Hadoopの特徴は、MapReduce 2とGiraph
Hadoopの父に聞く、HadoopとClouderaの現在・未来 - テキストマイニングで始める実践Hadoop活用
- Javaで覚えるIT技術者の40の常識
新人プログラマ/SEは覚えておきたい“まとめ” - 実践! Rで学ぶ統計解析の基礎