Spark クラスタを 10分 で構築して GraphX を試してみる
ローカルモードで動かした後の次のステップ
前提条件
- OS: Mac or Linux
- JDK: 7+
インストール
- Downloads | Apache Spark
- 既に構築済みの Hadoop クラスタがあれば、それに応じたパッケージタイプを選択。
- 「Pre-built for Hadoop 2.6 and later」あたりを選べば無難。
- Scala 2.11 を使いたい場合はソースからのビルドが必要。
- パッケージを選択した場合、ダウンロードしたファイルを展開すればすぐに使える。
- Spark 一式は /usr/local/share/spark として使う。(以降、適当に読み替えること)
- log4j.properties ファイルを作成して、不要な INFO ログを抑止する。
実行例
# ### ダウンロードと展開、移動 # curl -O http://d3kbcqa49mib13.cloudfront.net/spark-1.4.1-bin-hadoop2.6.tgz # tar zxf ./spark-1.4.1-bin-hadoop2.6.tgz # mv -i ./spark-1.4.1-bin-hadoop2.6 /usr/local/share/spark-1.4.1 # # ### シンボリックリンクを作成 # ln -s /usr/local/share/spark-1.4.1 /usr/local/share/spark # # ### ロギング設定 # cd /usr/local/share/spark # cp -pi ./conf/log4j.properties.template ./conf/log4j.properties # vi ./conf/log4j.properties # diff ./conf/log4j.properties.template ./conf/log4j.properties 2c2 < log4j.rootCategory=INFO, console --- > log4j.rootCategory=WARN, console
起動
Hadoop, HDFS が使えなくても Spark の利用は可能。
クラスタの管理サービスにはいくつか選択肢がある。
- Amazon EC2
- Standalone Deploy Mode
- Apache Mesos
- Hadoop YARN
今回は、一番簡単な Standalone Deploy Mode を試す。
- マスター起動
# /usr/local/share/spark/sbin/start-master.sh
- スレーブ起動
# /usr/local/share/spark/sbin/start-slave.sh "spark://マスターのIPアドレス:7077"
マスターのIPアドレスの箇所はホスト名でもよいが、localhost, 127.0.0.1 はデフォルトで接続が拒否されている模様。
マスターとの同居も可。
動作確認
build.sbt
必要最低限のものだけ。
name := "your-app-name" version := "0.1.0" scalaVersion := "2.10.4" libraryDependencies ++= Seq( "org.apache.spark" %% "spark-core" % "1.4.1", "org.apache.spark" %% "spark-graphx" % "1.4.1" )
データ
@teppei_tosa さんのチュートリアルに従う。
1 2 2 3 3 1
ソースコード
import org.apache.spark._ import org.apache.spark.SparkContext import org.apache.spark.SparkContext._ import org.apache.spark.graphx._ import org.apache.spark.rdd.RDD object Main { def main(args: Array[String]) = { val conf = new SparkConf().setMaster("spark://MASTER_IP:7077").setAppName("My Application") val sc = new SparkContext(conf) val g = GraphLoader.edgeListFile(sc, "path/to/edge_list.txt").cache() g.vertices.collect().foreach(println(_)) g.edges.collect().foreach(println(_)) sc.stop() } }
実行
$ sbt run (snip) (3,1) (1,1) (2,1) (snip) Edge(1,2,1) Edge(2,3,1) Edge(3,1,1)
INFO ログが大量に出て見にくいが、無事グラフの情報が画面に出力された。
0 件のコメント:
コメントを投稿