12
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

EC2のサーバ単体で Apache Spark を動かす方法

Posted at

概要

分かってしまえば簡単なのだけど、クラスタだの、Docker だのの情報に振り回されてハマってしまったので、開発目的や評価目的で Spark を動かすのは簡単なんだよ、というのを書いておく。

サーバ仕様

  • t2.large (Memory 8GB)
  • Amazon Linux

t2.micro + docker-spark のメモリエラーで悩まされたので、どこかで読んだ「Hadoop, Spark の最低スペックはメモリ8GB」という情報を元に t2.large を借りた。Memory 1GB だと厳しいけど、評価だけなら 2 ~ 4GB でも十分かもしれない。

Spark のインストール

Spark 自体は Hadoop に依存しているけど、事前に Hadoop をインストールする必要はない。Spark Overview にある情報をもとに、ダウンロードページ から Pre-built for Hadoop 2.6 and later をダウンロードして、展開すれば OK。

$ cd /usr/local/src
$ sudo wget http://ftp.riken.jp/net/apache/spark/spark-1.4.0/spark-1.4.0-bin-hadoop2.6.tgz
$ sudo tar zxvf spark-1.4.0-bin-hadoop2.6.tgz
$ cd spark-1.4.0-bin-hadoop2.6

展開したディレクトリの中に入れば、あとは自由にコマンドを実行できる。(必要に応じて、ディレクトリを /usr/local/spark などに移動しよう)

Spark を動かす

単体のサーバで Spark を動かす方法は、主に下記の2通り。(local-cluster というモードもあるけど、一般的でないので、ここでは無視)

  • local モードで動かす方法
  • standalone のクラスタで動かす方法

local モードで動かす場合

$ ./bin/run-example SparkPi 10
$ ./bin/spark-shell --master "local[2]" 
scala> sc.parallelize(1 to 1000).count()
$ ./bin/pyspark --master "local[2]"
>>> sc.parallelize(range(1000)).count() 

などなど。

コマンドの --master 引数に local[*] 等を渡せば良い。カッコ内の数字は利用するスレッドの数で、*を与えると CPU core 数のスレッドが立ち上がる。マルチスレッド特有の振る舞いもあるので、2以上の値で実行するのが良いと思う。

なお、--master 引数の詳細は SparkContext: マスターURLが詳しい。

standalone モードで動かす

詳細は Spark Standalone Mode を参照。下記のように master, slave を起動する。

$ sudo ./sbin/start-master.sh
$ sudo ./sbin/start-slave.sh "spark://ip-10-0-1-42:7077"

start-slave.sh の引数には、master の URL を与える必要があるので注意。ps aux | grep javaなどとプロセスを確認すれば、master がどういう名前で立ち上がっているかを確認できる。

あとは、spark-shellpyspark の起動時の引数に master url を渡せば、クラスタを使って演算することができる。

$ ./bin/spark-shell --master "spark://ip-10-0-1-42:7077"
scala> sc.parallelize(1 to 1000).count()

なお、サーバの 8080 ポートにブラウザでアクセスすると、下記のようなクラスタの詳細が見られるはず。spark-shell でコマンドを実行したりすると、worker への分配処理などが見れて楽しい。

Kobito.h8cqee.png

まとめ

というわけで、ダウンロードして展開すれば、単体のサーバで Spark や Spark のクラスタ機能を試せます。

実際に大規模なデータ処理が必要になったら、 spark-ec2 で EC2 でクラスタを立てたり、EMR で動かしたりしてみようと思います。

12
9
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
12
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?