Apache SparkをEC2上で動かす
Apache Spark 1.0 がリリースされました。
EC2上で動かすScriptが用意されているとのことなので早速試してみました。
Apache Spark インストール
Clouderaのリポジトリにまだ1.0が上がっていないため手動でインストールすることにします。
Clouderaのリポジトリからインストールする場合
sudo yum install http://archive.cloudera.com/cdh5/one-click-install/redhat/6/x86_64/cloudera-cdh-5-0.x86_64.rpm
sudo rpm --import http://archive.cloudera.com/cdh5/redhat/6/x86_64/cdh/RPM-GPG-KEY-cloudera
sudo yum install spark-core spark-master spark-worker spark-history-server spark-python
※このリポジトリではSparkのバージョンは0.9.0なので注意
手動でインストールする
wget http://d3kbcqa49mib13.cloudfront.net/spark-1.0.0-bin-hadoop2.tgz
tar xzvf spark-1.0.0-bin-hadoop2.tgz
動作確認
参考サイト:
Spark Overview - Spark 1.0.0 Documentation
Sparkのインストールディレクトリへ移動し、下記コマンドを実行する。
./bin/run-example SparkPi 10
ログが出力され、結果が表示されました。
Pi is roughly 3.142832
インタラクティブシェルを試してみる
参考サイト:
Quick Start - Spark 1.0.0 Documentation
Apache Spark ドキュメント和訳 - Quick Start - Qiita
./bin/spark-shell
...
...
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 1.0.0
/_/
Using Scala version 2.10.4 (OpenJDK 64-Bit Server VM, Java 1.7.0_55)
Type in expressions to have them evaluated.
...
...
Spark context available as sc.
scala>
scala> val textFile = sc.textFile("README.md")
textFile: org.apache.spark.rdd.RDD[String] = MappedRDD[1] at textFile at <console>:12
scala> textFile.count()
res0: Long = 127
scala> textFile.first()
res1: String = # Apache Spark
他にもサンプルやQuickStartがあるので試してみてください。
spark-ec2 script
参考にしたサイト:
Running Spark on EC2 - Spark 1.0.0 Documentation
Apache Spark ドキュメント和訳 - Apache Spark on AWS EC2 - Qiita
事前作業
Key Pairを作成しておく必要があります。
今回は、spark-demo.pemを作成しました。
環境変数を設定
export AWS_ACCESS_KEY_ID=XXXXXXXX
export AWS_SECRET_ACCESS_KEY=YYYYYYYY
※本番では、- IAM roles for EC2 instancesを使うことになるかと思います。
クラスタを起動する
ec2ディレクトリへ移動する
cd spark-1.0.0-bin-hadoop2/ec2
以下のコマンドを実行する
./spark-ec2 -k spark-demo -i spark-demo.pem -s 2 launch spark-demo --instance-type t1.micro --region ap-northeast-1
起動しましたが、コンソール上にエラーが出ています。
Setting up security groups...
Creating security group spark-demo-master
Creating security group spark-demo-slaves
Searching for existing cluster spark-demo...
Spark AMI: ami-c7bfd4c6
Launching instances...
Launched 2 slaves in ap-northeast-1c, regid = r-713a2977
Launched master in ap-northeast-1c, regid = r-c7392ac1
Waiting for instances to start up...
Waiting 120 more seconds...
Generating cluster's SSH key on master...
ssh: connect to host ec2-xx-xxx-xx-xxx.ap-northeast-1.compute.amazonaws.com port 22: Connection refused
Error executing remote command, retrying after 30 seconds: Command '['ssh', '-o', 'StrictHostKeyChecking=no', '-i', 'spark-demo.pem', '-t', '-t', u'root@ec2-xx-xxx-xx-xxx.ap-northeast-1.compute.amazonaws.com', "\n [ -f ~/.ssh/id_rsa ] ||\n (ssh-keygen -q -t rsa -N '' -f ~/.ssh/id_rsa &&\n cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys)\n "]' returned non-zero exit status 255
ssh: connect to host ec2-xx-xxx-xx-xxx.ap-northeast-1.compute.amazonaws.com port 22: Connection refused
Error executing remote command, retrying after 30 seconds: Command '['ssh', '-o', 'StrictHostKeyChecking=no', '-i', 'spark-demo.pem', '-t', '-t', u'root@ec2-xx-xxx-xx-xxx.ap-northeast-1.compute.amazonaws.com', "\n [ -f ~/.ssh/id_rsa ] ||\n (ssh-keygen -q -t rsa -N '' -f ~/.ssh/id_rsa &&\n cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys)\n "]' returned non-zero exit status 255
ssh: connect to host ec2-xx-xxx-xx-xxx.ap-northeast-1.compute.amazonaws.com port 22: Connection refused
Error executing remote command, retrying after 30 seconds: Command '['ssh', '-o', 'StrictHostKeyChecking=no', '-i', 'spark-demo.pem', '-t', '-t', u'root@ec2-xx-xxx-xx-xxx.ap-northeast-1.compute.amazonaws.com', "\n [ -f ~/.ssh/id_rsa ] ||\n (ssh-keygen -q -t rsa -N '' -f ~/.ssh/id_rsa &&\n cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys)\n "]' returned non-zero exit status 255
ssh: connect to host ec2-xx-xxx-xx-xxx.ap-northeast-1.compute.amazonaws.com port 22: Connection refused
Error executing remote command, retrying after 30 seconds: Command '['ssh', '-o', 'StrictHostKeyChecking=no', '-i', 'spark-demo.pem', '-t', '-t', u'root@ec2-xx-xxx-xx-xxx.ap-northeast-1.compute.amazonaws.com', "\n [ -f ~/.ssh/id_rsa ] ||\n (ssh-keygen -q -t rsa -N '' -f ~/.ssh/id_rsa &&\n cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys)\n "]' returned non-zero exit status 255
Warning: Permanently added 'ec2-xx-xxx-xx-xxx.ap-northeast-1.compute.amazonaws.com,xx-xxx-xx-xxx' (ECDSA) to the list of known hosts.
Connection to ec2-xx-xxx-xx-xxx.ap-northeast-1.compute.amazonaws.com closed.
Traceback (most recent call last):
File "./spark_ec2.py", line 823, in <module>
main()
File "./spark_ec2.py", line 815, in main
real_main()
File "./spark_ec2.py", line 700, in real_main
setup_cluster(conn, master_nodes, slave_nodes, opts, True)
File "./spark_ec2.py", line 430, in setup_cluster
dot_ssh_tar = ssh_read(master, opts, ['tar', 'c', '.ssh'])
File "./spark_ec2.py", line 637, in ssh_read
return subprocess.check_output(
AttributeError: 'module' object has no attribute 'check_output'
下記コマンドでSSHを使用してクラスタにログインを行う
./spark-ec2 -k <keypair> -i <key-file> login <cluster-name>
ダメですね。。。
クラスタを停止してみる。
./spark-ec2 stop spark-demo
止まらない・・・
クラスタを破棄してみる。
./spark-ec2 destroy spark-demo
ターミネートされない。。。
とりあえず、手動で停止してみました。
続きは今度。