Spark on EMR 始めました & やめました
Amazon EMRのオプションにSparkが追加されたとのこと。
New – Apache Spark on Amazon EMR | AWS Official Blog
以下の書籍に参考に早速試してみたが色々ハマったのでメモしとく。

- 作者: Nick Pentreath
- 出版社/メーカー: Packt Publishing
- 発売日: 2015/02/20
- メディア: Kindle版
- この商品を含むブログを見る
セキュリティグループの作成
ipython notebook改めJupyterからPySparkを使用したいため、Jupyter用のポートをオープンする。
AWSのコンソールからEC2を選択する
〜個のセキュリティグループを選択する
セキュリティグループの作成を選択する
必要事項を記入して"作成"
EMRのクラスター作成
以下の通り変更してEMRのクラスターを作成する。
- ソフトウェア構成
- Hive, Pig, Hueは構築時間短縮のため外す
- Sparkは上記ブログにある通り引数に"-x"を指定する
- ハードウェア構成
- セキュリティ
- EC2キーペアを選択する
- マスターインスタンスの追加のセキュリティグループに先ほど作成したJupyterのセキュリティグループを設定する
クラスター作成が完了すればsshでマスターインスタンスに接続できるようになる。
ssh hadoop@マスターインスタンスのホスト名 -i ~/mykeypair.pem
Python 2.6から2.7へスイッチ
JupyterをインストールするにはPython 2.7以上が必要。
EMRには2.6.9, 2.7.9両方インストールされているがデフォルトでは2.6系が使用されるので2.7系を使用するように切り替える。
$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.6 20 \ > --slave /usr/bin/pip pip /usr/bin/pip-2.6 $ sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 10 \ > --slave /usr/bin/pip pip /usr/bin/pip-2.7 $ sudo update-alternatives --config python alternative python (/usr/bin/python を提供) には 2 個の選択肢があります。 選択肢 パス 優先度 状態 ------------------------------------------------------------ * 0 /usr/bin/python2.6 20 自動モード 1 /usr/bin/python2.6 20 手動モード 2 /usr/bin/python2.7 10 手動モード 現在の選択 [*] を保持するには Enter、さもなければ選択肢の番号のキーを押してください: 2 update-alternatives: /usr/bin/python (python) を提供するために 手動モード で /usr/bin/python2.7 を使います
Jupyterのインストール
以下のコマンドを実行し、Jupyterをインストールする。
$ sudo pip install ipython[all]
Jupyterの設定
以下を参考にJupyterの設定を行なう。
How-to: Use IPython Notebook with Apache Spark | Cloudera Engineering Blog
- プロファイルの作成
$ ipython profile create pyspark [ProfileCreate] Generating default config file: u'/home/hadoop/.ipython/profile_pyspark/ipython_config.py' [ProfileCreate] Generating default config file: u'/home/hadoop/.ipython/profile_pyspark/ipython_kernel_config.py' [ProfileCreate] Generating default config file: u'/home/hadoop/.ipython/profile_pyspark/ipython_console_config.py' [ProfileCreate] Generating default config file: u'/home/hadoop/.ipython/profile_pyspark/ipython_notebook_config.py' [ProfileCreate] Generating default config file: u'/home/hadoop/.ipython/profile_pyspark/ipython_nbconvert_config.py'
2. パスワードファイルの作成
$ python -c 'from IPython.lib import passwd; print passwd()' > ~/.ipython/profile_pyspark/nbpasswd.txt Enter password: Verify password:
3. プロファイルの編集
$ vi ~/.ipython/profile_pyspark/startup/00-pyspark-setup.py
$ vi ~/.ipython/profile_pyspark/ipython_notebook_config.py
編集内容は以下の通り。
- ポートやpy4jのパスなどをClouderaの内容からEMR用に変更している
- 00-pyspark-setup.pyはClouderaのものをそのままコピペするとインデントがおかしくて動かないので注意
これで以下のコマンドを実行するとJupyterが起動する。
$ ipython notebook --profile=pyspark
ブラウザからhttp://[マスターインスタンスのIP]:9999にアクセスするとログイン画面が表示される
ログインするとこのような感じに。
"New"から"Python 2"を選択するとこのような画面に遷移する。
Machine Learning with Spark
冒頭の書籍ではMovieLensのデータセットを使ってレコメンドシステムを構築していく。 以下のコマンドを実行してデータのダウンロード・HDFSへの格納を行なう。
$ wget http://files.grouplens.org/datasets/movielens/ml-100k.zip
$ unzip ml-100k.zip
$ hadoop fs -put ml-100k /
準備が整ったのでJupyterでサンプルコードを実行するとエラーに。。。
ipython - "ImportError: No module named" when trying to run Python script - Stack Overflowと同じ原因のようでipython_notebook_config.pyにc.NotebookManager.notebook_dirを設定すれば良さそうだけどこの時点でAWSの利用料が20$超えたので断念した。。。
- Jupyterではなくコンソールで上記コマンドを実行すると正常に処理されるので、黒い画面でも良い人は問題ないかも
- EMR、個人て試すには高い。。。皆さんはSparkをどのような環境で試されてるんだろう?