概要
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のホストのリストが必要なんだろう・・・って思ったけど、なくても動くぽい・・・。
ローカルで動かすときは不要なんだけど、分散環境で実行してみると、やっぱり設定されて無いと動かなかった。分散環境で動かすときにいくつかハマったポイントがあったので、あとでまとめる。