LoginSignup
19
19

More than 5 years have passed since last update.

Amazon EC2上でApache Sparkを動かす

Last updated at Posted at 2014-06-11

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

スクリーンショット 2014-06-12 2.25.20.png

起動しましたが、コンソール上にエラーが出ています。

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

ターミネートされない。。。

とりあえず、手動で停止してみました。
続きは今度。

19
19
1

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
19
19