LoginSignup
0
0

More than 5 years have passed since last update.

hadoop上で動作する分散グラフ分析器 sotera/distributed-graph-analytics を動かしてみる

Last updated at Posted at 2016-03-27

概要

Hadoopなどの分散処理基盤でlouvain法を実行するためのソースコードをあさっていたところ、Sotera defence社のdistributed-graph-analyticsというのを見つけたので、調査する。
https://github.com/Sotera/distributed-graph-analytics

用語

distributed-graph-analytics(以下dga):Sotera defence社の分散グラフ分析フレームワークで、GiraphやGraphXなどの分散グラフ分析フレームワークを使用してlouvain法やページランクなどのアルゴリズムを実行できる。

Giraph: Hadoop上でグラフ分析を行うためのフレームワーク
GraphX:Spark上でグラフ分析を行うためのフレームワーク
louvain法:高速なグラフクラスタリング手法。分散処理も可能。

環境

OS/ライブラリなど バージョン
CentOS 7.0
sotera/distributed-graph-analytics 0.0.1
Java 1.8.0_45
Gradle 2.12
CDH 5.0

導入手順

giraph-dga(hadoop使用)とgraphx-dga(spark使用)の2つがある。
自分が所属してる会社でsparkが利用できたか不明なので、
hadoop上で処理を行うgiraph-dgaを動かしてみることにする。

CDH5のインストール

下記を参考にして疑似分散環境のhadoopをインストールした。
http://www.task-notes.com/entry/20150608/1433732400
Zookeeperが入らなかったのでyumでインストールして起動した。
(Zookeeperが無いとgiraph-dgaのジョブを走らせても0%で止まってしまう・・・)

ビルドツールのインストール

gradleというビルドツールを使用しているようなので、インストールしてビルドする。
https://services.gradle.org/distributions/gradle-2.12-bin.zip

git clone https://github.com/Sotera/distributed-graph-analytics.git
cd distributed-graph-analytics
gradle clean dist
cp -r dga-giraph/build/dist /var/lib/hadoop-hdfs

ジョブの実行

下記hdfsユーザで実行。example.csvをダウンロードする。

wget http://sotera.github.io/distributed-graph-analytics/data/example.csv 
cat example.csv
1,2
1,3
1,4
1,5
1,6
2,3
2,4
・・・
#入力ファイルの形式は
#srcノード番号 destノード番号
#・・・

hdfsにputして、ジョブを実行。

hadoop fs -put example.csv /user/hdfs/input
hadoop fs -chmod 777 /user/hdfs
# org.apache.hadoop.security.AccessControlException: Permission denied:になったのでやっつけで回避・・・
cd /var/lib/hadoop-hdfs/dist
bin/dga-yarn-giraph louvain "/user/hdfs/input/example.csv" "/user/hdfs/output"

完了すると/user/hdfs/outputに結果が出力される。

hadoop fs -cat /user/hdfs/output/giraph_0/part-m-00001
10      12      0       12:1,6:1
12      12      0       12:1
15      17      0       17:1,19:1
17      17      0       17:1
19      19      0       17:1,19:1
1       2       0       2:4,6:1
2       2       0       2:4
3       2       0       2:4,19:1
4       2       0       2:4
5       2       0       2:4
6       6       0       2:1,6:1
8       6       0       12:1,6:1
20      19      0       2:1,19:1

#出力フォーマット
#ノードのid communityId internalWeight  communityEdgeList
#参考→ https://github.com/Sotera/distributed-graph-analytics/blob/fa2a72e3bcee1c6e5db2551d2258b94d85e16a60/dga-giraph/src/main/java/com/soteradefense/dga/io/formats/LouvainVertexOutputFormat.java

その他

なんかサンプルのコンフィグファイル(dist/conf/dga-config.xml)にzookeeperのホストを指定する部分があって、ジョブのコンフィグになんでzookeeperのホストのリストが必要なんだろう・・・って思ったけど、なくても動くぽい・・・。
ローカルで動かすときは不要なんだけど、分散環境で実行してみると、やっぱり設定されて無いと動かなかった。分散環境で動かすときにいくつかハマったポイントがあったので、あとでまとめる。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0