LoginSignup
7
8

More than 5 years have passed since last update.

EMR上のJupyter4.xからPySparkを使ってみた

Last updated at Posted at 2015-10-23

Amazon EMRで立ち上げたSparkクラスタにJupyterを入れて
その上でPySparkを使う際に、詰まった点の対処法まとめ。

EMR立ち上げ

今回は検証用で

アプリケーション : All Applications: Hadoop 2.6.0, Hive 1.0.0, Hue 3.7.1, Mahout 0.11.0, Pig 0.14.0, and Spark 1.5.0
インスタンスタイプ : m3.xlarge
インスタンス数 : 1台
アクセス権限 : デフォルト

を用意。

Hueを入れる場合は、Hueが8888ポートを使用するため
Jupyterが8888ポート(デフォルト)を使用できなくなる。
その場合は、PCからアクセスできるように
セキュリティグループで穴をあける。

Python2.6 -> Python2.7へ

EMRで起動したEC2は、Pythonのバージョンが2.6.9なので、2.7に変更する。
元々2.7はインストールされているため、リンク先を変えるだけ。

sudo unlink /usr/bin/python
sudo ln -s /usr/bin/python2.7 /usr/bin/python

pip2.6 -> pip2.7へ

pipはアップグレードをして、リンク先を変更。

sudo pip install -U pip
sudo ln -s /usr/bin/pip-2.7 /usr/bin/pip

Jupyterのインストール

現在(2015年10月)だと、Jupyter4.0.6がインストールされる。

sudo pip install jupyter

Jupyterの起動

jupyter-notebook

プロファイルの作成について

テンプレート設定ファイルを作成(出力先は~/.jupyter/jupyter_notebook_config.py)

jupyter notebook --generate-config
~/.jupyter/jupyter_notebook_config.py
c = get_config()

c.NotebookApp.ip = '*'
c.NotebookApp.open_browser = False
c.NotebookApp.port = 8888

Hueを入れた場合は、c.NotebookApp.portに
セキュリティグループであけた8888以外のポートを設定。

profileというものはJupyter4.Xから、なくなったみたい?
configオプションを使えば、設定ファイルを指定できる。
例)

jupyter-notebook --config='~/.ipython/profile_nbservers/ipython_config.py'

環境変数のJUPYTER_CONFIG_DIRにディレクトリパスを指定すれば
そのディレクトリ内のjupyter_notebook_config.pyを読み込むようになる。

Jupyter上でSparkを使えるようにする

spark.masterをyarnからlocalに変更。
(これをしないと、SparkContextが止まってしまっていた)

/usr/lib/spark/conf/spark-defaults.conf
# spark.master yarn
spark.master local

前は、~/.ipython/profile_<profile名>/startup/00-<profile名>-setup.pyで
Sparkの準備をしていたものの、それもできなくなったため
Jupyter Notebook上で以下のコマンドを実行している。

export SPARK_HOME='/usr/lib/spark'
import os
import sys

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'))

ファイルにして読み込みでも良いかも。

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