More Related Content Similar to Ec2へのspark導入とi pythonnotebookの連携 Similar to Ec2へのspark導入とi pythonnotebookの連携 (20) Ec2へのspark導入とi pythonnotebookの連携2. Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved.
自己紹介
• 府川 翔大
• 2013年入社(3年目)
• データ分析エンジニア
• データ分析基盤の構築
• 機械学習を用いて予測モデルの構築
• HiveのバッチをSparkに一部移行中
3. Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved.
概要
EMRでSparkを動かす場合、Terminateをするとデータが削除されるため、
環境を維持するにはサーバを起動したままにする必要があり、コストがかか
る。
そこでEC2上でSparkを動かすようにすると、サーバを停止しても環境は保
持されるので、必要なときに起動し使わない時は停止することで低コストで
Sparkの検証・運用を行なうことが出来る。
更にiPythonNotebookを使うことで、Web上からPySparkを使えるため、
データ量の多い分析も手軽に行なうことが出来る。
4. Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved.
アジェンダ
• Spark編
• Sparkのダウンロード
• AWSの設定
• Sparkの環境構築
• 起動、ログイン、停止について
• セキュリティグループの設定
• サーバ監視について
• iPythonNotebook編
• プロファイルの作成と設定ファイルの編集
• 起動とアクセス
• ファイル読み込み(S3、HDFS、ローカル)
• まとめ
6. Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved.
Sparkのダウンロード
GitHubのファイルを使用するため必要に応じてgitコマンドのインストールをす
る。
sudo yum install -y git
リポジトリをcloneする。今回はSpark1.2系を使用。
git clone git://github.com/apache/spark.git -b branch-1.2
7. Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved.
AWSの設定
アクセスキーとシークレットキーの設定をする。
【botoを使用する場合】
vi ~/.boto
[Credentials]
aws_access_key_id=<AWS_ACCESS_KEY_ID>
aws_secret_access_key=<AWS_SECRET_ACCESS_KEY>
【環境変数を使う場合】
export AWS_ACCESS_KEY_ID=<AWS_ACCESS_KEY_ID>
export
AWS_SECRET_ACCESS_KEY=<AWS_SECRET_ACCESS_KEY>
8. Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved.
Sparkの環境構築
以下のコマンドを打つと、Sparkの環境が構築される。
~/spark/ec2/spark-ec2 -k <KEYPAIR> -i <KEY_FILE> --region=ap-
northeast-1 --copy-aws-credentials launch <CLUSTER_NAME>
デフォルトではmaster(m1.large)1台、slave(m1.large)1台の計2台で構成さ
れる。また「--copy-aws-credentials」をつけることで、先ほど設定したアクセ
スキーやシークレットキーの情報が引き継がれる。
その他オプションに関しては以下を参考。
http://spark.apache.org/docs/1.3.0/ec2-scripts.html
9. Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved.
起動、ログイン、停止コマンド
【起動】
~/spark/ec2/spark-ec2 -k <KEYPAIR> -i <KEY_FILE> --region=ap-
northeast-1 start <CLUSTER_NAME>
【ログイン】
~/spark/ec2/spark-ec2 -k <KEYPAIR> -i <KEY_FILE> --region=ap-
northeast-1 login <CLUSTER_NAME>
【停止】
~/spark/ec2/spark-ec2 --region=ap-northeast-1 stop
<CLUSTER_NAME>
10. Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved.
サーバ監視について
Web UIとGangliaはデフォルトでインストールされているため、以下へアクセ
スすることで見ることが出来る。
Web UI
http://<MASTER_PUBLIC_DNS>:8080
Ganglia
http://<MASTER_PUBLIC_DNS>:5080/ganglia
11. Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved.
セキュリティグループの設定
デフォルトのセキュリティグループのままでは、iPythonNotebookへのアクセ
スとローカルファイルの参照が行えないので
8888(iPythonNotebookへのアクセス用)と
9000(ローカルファイルの読み込み用)
の2つのポートを開けておく。
13. Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved.
設定ファイルの編集(1)
プロファイルの作成
ipython notebook --pylab inline --profile=myserver
iPythonNotebookの設定ファイルを編集
vi ~/.ipython/profile_myserver/ipython_notebook_config.py
c = get_config()
c.NotebookApp.ip = '*' # もしくはマスターのローカルIP
c.NotebooksApp.open_browser = False
14. Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved.
設定ファイルの編集(2)
vi ~/.ipython/profile_myserver/startup/00-myserver-setup.py
import os
import sys
os.environ['SPARK_HOME'] = '/root/spark/'
CLUSTER_URL = open('/root/spark-ec2/cluster-url').read().strip()
spark_home = os.environ.get('SPARK_HOME', None)
if not spark_home:
raise ValueError('SPARK_HOME environment variable is not set')
sys.path.insert(0, os.path.join(spark_home, 'python'))
sys.path.insert(0, os.path.join(spark_home, 'python/lib/py4j-0.8.2.1-
src.zip'))
execfile(os.path.join(spark_home, 'python/pyspark/shell.py'))
execfile(os.path.join(spark_home, 'conf/spark-env.sh'))
15. Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved.
起動とアクセス
起動
ipython notebook --pylab inline --profile=myserver
iPythonNotebookへのアクセス
http://<MASTER_PUBLIC_DNS>:8888
16. Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved.
ファイル読み込みについて(S3)
ファイル単体はもちろんのこと、フォルダを丸ごと読み込むことも出来る。
s3_file = sc.textFile("s3n://<BUCKET>/<DIR>”)
s3_file = sc.textFile("s3n://<BUCKET>/<DIR>/<FILE>")
17. Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved.
ファイル読み込みについて(HDFS)
ファイルパスだけを書いた場合はHDFSからの読み込みになる。
hdfs_file = sc.textFile("<FILE>")
複数のファイルシステムからファイルを読み込む場合は、明記しておいたほう
がわかりやすい。
hdfs_file = sc.textFile("hdfs://<FILE>")
18. Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved.
ファイル読み込みについて(ローカル)
ローカルのファイルを読み込むときは「file://」をつける。
local_file = sc.textFile(“file://<FILE>")
また9000番ポートを使用するため、ポートが開いていないとエラーになる。
19. Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved.
まとめ
EC2上にSpark環境を構築することで、サーバを停止しても環境が保持され
るので、必要なときに起動し使わない時に停止をすれば低コストでSparkを
検証・運用を行なうことが出来る。
更にiPythonNotebookを使うことで、Web上からPySparkを使えるため、大
量のデータでもSparkを利用し手軽に分析をすることが出来る。
20. Copyright 2015 CYBIRD Co., Ltd. All Rights Reserved.
http://www.cybird.co.jp/recruit/
エントリーしてね!
エンジニア募集中!