Amazon EMR ノートブックで Apache Spark アプリケーションを実行できません
簡単な説明
EMR ノートブックから実行される Spark アプリケーションは、次の例外を除いて起動できない場合があります。
The code failed because of a fatal error:
Session 4 did not start up in 60 seconds.
解決方法
EMR ノートブックで Spark アプリケーションを実行する際の、一般的なトラブルシューティング手順は次のとおりです。
クラスター上のリソースを確認する
Jupyter が Spark コンテキストを作成するために、Spark がクラスターに十分な利用可能リソースを持っていることを確認します。Amazon CloudWatch メトリクスまたはリソースマネージャーを使用して、利用可能なリソースを確認できます。
Sparkmagic ライブラリが正しく設定されていることを確認します。
Jupyter 管理者に連絡し、Sparkmagic ライブラリが正しく設定されていることを確認します。
ノートブックカーネルを再起動する
1. EMR コンソールを開き、[ノートブック] を選択します。
2. ノートブックリストからノートブックを選択し、[JupyterLab で開く] または [Jupyter で開く] を選択します。新しいブラウザタブが開き、JupyterLab または Jupyter Notebook エディタが表示されます。
3. カーネルメニューから、[カーネルを再起動] を選択します。
JupyterLab の Spark セッションのタイムアウト時間を延長する
Spark セッションのタイムアウト時間を長くするには、次の操作を行います。
1. EMR コンソールを開き、[ノートブック] を選択します。
2. ノートブックリストからノートブックを選択します。
3. EMR ノートブックの Jupyter Web ユーザーインターフェイスにアクセスします。
4. EMR ノートブックターミナルを開きます。
5. 次のコマンドを使用して、config.json ファイルを開きます。
vi /home/notebook/.sparkmagic/config.json
5. config.json ファイルの livy_session_startup_timeout_seconds: xxx オプションを追加または更新します。
6. すべてのカーネルを再起動します。
注: JupyterHub アプリケーションが EMR プライマリインスタンスにインストールされている場合は、次の手順を実行して Spark セッションのタイムアウト時間を長くしてください。
1. 次のコマンドを実行します。
vi /etc/jupyter/conf/config.json
2. livy_session_startup_timeout_seconds:60 オプションを任意の値に更新してから、JupyterHub コンテナを再起動します。
Spark ドライバーメモリーを調整する
Jupyter Notebook アプリケーションが使用する Spark ドライバーのメモリを調整して、リソース割り当てを制御します。詳しくは、「Amazon EMR ノートブックで Spark 設定を変更する方法を教えてください。」を参照してください。
Apache Livy サービスが正常であることを確認する
プライマリノードインスタンスで実行されている Livy サーバーのステータスを確認します
1. 次のコマンドを使用して、livy-server のステータスを確認します。
sudo systemctl status livy-server
2. ステータスがダウンである場合は、次のコマンドを使用して livy-server を再起動します。
sudo systemctl start livy-server
Livy サーバーのメモリを増やす
デフォルトでは、ノートブッククライアントは Livy サーバーへの接続を 90 秒間試みます。Livy サーバーが 90 秒以内に応答しない場合、クライアントはタイムアウトを生成します。Livy サーバーが応答しない最も一般的な理由は、十分なリソースが不足していることです。この問題を修正するには、Livy サーバーのメモリを増やします。
1. SSH を使用してプライマリノードインスタンスに接続します。
2. ファイル /etc/livy/conf/livy-env.sh に次のプロパティを追加します。
export LIVY_SERVER_JAVA_OPTS="-Xmx8g" (option to your value)
3. 変更を有効にするには、Livy サーバーを再起動します。
sudo systemctl stop livy-server
sudo systemctl start livy-server
Livy でクライアントモードの代わりにクラスターモードを使う
Spark アプリケーションはクライアントモードでノートブックに送信され、Spark ドライバーは Livy サーバーのサブプロセスとして実行されます。サブプロセスとして実行すると、プライマリノードのリソースが不足する可能性があります。リソース不足が原因で Livy が失敗するのを防ぐために、デプロイモードをクラスターモードに変更します。クラスターモードで実行されるドライバーは、プライマリノードではなく、コアノードとタスクノードのアプリケーションプライマリで実行されます。
クラスターモードを使用するには、次の操作を行います。
1. SSH を使用してプライマリノードに接続します。
2. /etc/livy/conf/livy.conf ファイルに次のパラメータを追加します。
livy.spark.deploy-mode cluster
3. 変更を有効にするには、Livy サーバーを再起動します。
sudo systemctl stop livy-server
sudo systemctl start livy-server