本当に基本的なことをしたいので、EMRコンソールからSparkクラスターを起動し、Sparkパッケージに依存するPythonスクリプトを実行します(たとえば、 、 矢印 )。これを行う最も簡単な方法は何ですか?
最も簡単な方法は、インストールコマンドを含むbashスクリプトを作成し、それをS3にコピーし、コンソールからbootstrapアクションを設定してスクリプトを指すようにすることです。
これが私が本番で使用している例です。
s3://mybucket/bootstrap/install_python_modules.sh
#!/bin/bash -xe
# Non-standard and non-Amazon Machine Image Python modules:
Sudo pip install -U \
awscli \
boto \
ciso8601 \
ujson \
workalendar
Sudo yum install -y python-psycopg2
つまり、プラットフォームに応じて、pipでパッケージをインストールする2つの方法があります。まず、必要なものをインストールしてからSparkステップを実行できます。最も簡単なのはemr-4.0.0と 'command-runner.jar'を使用することです:
from boto.emr.step import JarStep
>>> pip_step=JarStep(name="Command Runner",
... jar="command-runner.jar",
... action_on_failure="CONTINUE",
... step_args=['Sudo','pip','install','arrow']
... )
>>> spark_step=JarStep(name="Spark with Command Runner",
... jar="command-runner.jar",
... step_args=["spark-submit","/usr/lib/spark/examples/src/main/python/pi.py"]
... action_on_failure="CONTINUE"
)
>>> step_list=conn.add_jobflow_steps(emr.jobflowid, [pip_step,spark_step])
2.xおよび3.xでは、script-runner.jarを同様の方法で使用しますが、 scriptrunner に完全なURIを指定する必要があります。
編集:申し訳ありませんが、私はあなたがコンソールを介してこれをやりたいとは思わなかった。コンソールにも同じ手順を追加できます。最初のステップは、上記と同じ引数を持つカスタマーJARです。 2番目のステップはsparkステップです。これがお役に立てば幸いです!
Python 2(EMRのデフォルト))またはPython 3を使用しているかどうかに応じて、pip installコマンドは異なるはずです。 noli's answer 、シェルスクリプトを作成し、S3のバケットにアップロードして、 ブートストラップアクション として使用する必要があります。
Python 2(Jupyterの場合:pysparkカーネルのデフォルトとして使用)):
#!/bin/bash -xe
Sudo pip install your_package
Python 3(Jupyterの場合:Python 3 andpyspark3kernel)のデフォルトとして使用):
#!/bin/bash -xe
Sudo pip-3.4 install your_package