spark(graphx)로 동작하는 분산 그래프 분석기 sotera-DGA를 동작시킨다

목적



Hadoop이나 spark등의 분산 처리 기반으로 louvain법을 실행하기 위한 소스 코드를 접하고 있었는데, Sotera defence사의 distributed-graph-analytics라고 하는 것을 발견했으므로, 조사합니다.
전회 hadoop(giraph)로 움직였으므로, 이번은 spark(graphx)로 움직여 보겠습니다.
htps : // 기주 b. 코 m / 소테라 / ㄱ st 리부테 dg et al ph-Ana ly chi cs

개요



sotera-DGA의 spark(graphx)판에서 louvain법을 사용하여 karate 클럽의 데이터를 클러스터링해 보겠습니다.
spark의 데이터 입출력처에는 hadoop(의사 분산 환경)의 HDFS를 지정합니다.

환경




OS/라이브러리 등
버전


CentOS
7.0

sotera/distributed-graph-analytics
0.0.1

자바
1.8.0_45

Gradle
2.12

스파크
1.6.2

CDH
5.0


절차



Hadoop (CDH5) 및 gradle 설치



아래와 같이
ぃ tp // 이 m/k_이시/있어 ms/6에아 2d4세세090에47b374아#%에7%94%아8%에8%아%9에

spark install



ぃ tp // 코 m / 냄새 c0310 / ms / d708639b9 4d92b6d79
참고로 spark-1.6.2를 설치했습니다.

spark 시작


sudo /usr/local/lib/spark/sbin/start-master.sh
sudo /usr/local/lib/spark/sbin/start-slaves.sh

karate 클럽 데이터 생성 및 배치 등



아래와 같습니다.
ぃ tp // m/k_이시/있어 ms/1586에서 190아 877d4b2697 %에 5% 82% 99
/user/hdfs/input/karate.txt 에 karate 클럽 데이터를 배치합니다.

spark 작업 submit



실행 파라미터의 읽어들이는 부분에 버그가 있어, 그대로라면 CLASS NOT FOUND가 되어 동작하지 않습니다.
htps : // 기주 b. 코 m / 소테라 / ぢ st ribute dg et al ph ana ly chi cs / issue s / 89
준비되어 있는 기동 스크립트는, 기동에 필요한 복수의 jar 파일을 하나하나 지정하면서 submit 하게 되어 있습니다만, 아래와 같이 라이브러리를 하나의 jar에 정리해 submit 하면 움직였습니다 .
htps : // 기주 b. 코 m / 켄 57 / ㄱ st 리부테 dg 등 ph - 아나 ly cs / 갑 t / 691 에 287 에 1f041d7 ab5522 3d8cfb1b74718bf353
# ビルド
cd distributed-graph-analytics
gradle fatJar
cp dga-graphx/build/libs/dga-graphx-0.1.jar /var/lib/hadoop-hdfs/

# hdfsユーザになる
sudo su - hdfs
export HADOOP_CONF_DIR=/etc/hadoop
spark-submit --executor-cores 2 --num-executors 2 --executor-memory 1G --driver-memory 1G --class com.soteradefense.dga.graphx.DGARunner --master yarn-client dga-graphx-0.1.jar louvain -i /user/hdfs/input/karate.txt -o /user/hdfs/output -s /usr/local/lib/spark -n NameGoesHere -m spark://vm-cluster:7077 --ca hdfs.url="hdfs://vm-cluster:8020/" --ca parallelism=2 --ca spark.master.url="spark://vm-cluster:7077" --ca spark.home="/usr/local/lib/spark/"

아무래도 hadoop의 의사 분산 모드를 사용하면 yarn-cluster 모드에서 spark 작업을 제출할 수 없기 때문에 yarn-client 모드로 제출합니다.

실행 결과



출력되는 파일의 형식은 이런 느낌입니다.
(34,{community:23,communitySigmaTot:96,internalWeight:0,nodeWeight:34})
(4,{community:4,communitySigmaTot:58,internalWeight:0,nodeWeight:12})
...
(16,{community:23,communitySigmaTot:96,internalWeight:0,nodeWeight:4})

실행 결과를 그림으로 하면 이런 느낌이군요.


실행 결과는 giraph 때 의 조금 다른 느낌이 되고 있습니다.
모듈러티 Q는 0.402로 giraph의 파라미터 조정 후 0.419보다 조금 낮네요.
선택적 매개변수를 괴롭혀도 결과는 변경되지 않았습니다.
아무래도, 계산 방법 자체가 조금 달라질 것 같은 느낌이 듭니다. . .

알고리즘의 설명을 읽은 느낌, louvain법의 노드의 선택과 그래프 상태의 업데이트를 동시 병행으로 하고 있기 때문에, 직렬의 알고리즘에 가까운 결과를 얻을 수는 있어도, 같은 결과는 되지 않는다고 하는 것 ···(요조사)
htps : // 기주 b. 코 m / 소테라 / ㄱ st 리부테 dg 등 ph 아나 ly 치 cs / t ree / 마s r / d가 - g 등 phx

giraph 쪽에는 이런 일을 쓰지 않았지만, 어쩐지 방침이 다른 것일까. . .

요약



현재 매개 변수로드 부분에 버그가 있거나 프로젝트 업데이트가 잠시 멈추고 있으므로 참고로 만 1에서 직접 작성하는 것이 좋을 것 같습니다.
scala라면 gradle이 아니라 sbt 사용하고 싶다.

좋은 웹페이지 즐겨찾기