Amazon EMR ノートブックでの実行に失敗する Apache Spark アプリケーションをトラブルシューティングしたいと考えています。
簡単な説明
Amazon EMR ノートブックで実行される Spark アプリケーションは、次のエラーで起動に失敗する場合があります。
"The code failed because of a fatal error: Session 4 did not start up in 60 seconds."
解決策
クラスター上のリソースを確認する
Jupyter が Spark コンテキストを作成できるよう、クラスター内に Spark 用の十分な空きリソースがあることを確認します。利用可能なリソースを確認するには、Amazon CloudWatch メトリクスまたはリソースマネージャーを使用します。
Sparkmagic ライブラリが正しく設定されていることを確認する
Jupyter 管理者に問い合わせて、Sparkmagic ライブラリが正しく設定されていることを確認します。
ノートブックカーネルを再起動する
次の手順を実行します。
- Amazon EMR コンソールを開きます。
- ナビゲーションバーで、[ワークスペース (ノートブック)] を選択します。
- [ワークスペース (ノートブック)] リストからワークスペースを選択し、[クイック起動] を選択します。または、リストからワークスペースを選択して [アタッチ] を選択し、[JupyterLab で起動] または [Jupyter で起動] を選択します。
- [カーネル] を選択し、[カーネルの再起動] を選択します。
JupyterLab の Spark セッションタイムアウト期間を延長する
次の手順を実行します。
-
Amazon EMR コンソールを開きます。
-
ナビゲーションバーで、[ワークスペース (ノートブック)] を選択します。
-
[ワークスペース (ノートブック)] リストからワークスペースを選択し、[クイック起動] を選択します。新しいブラウザタブで JupyterLab エディタが開きます。
-
ノートブックターミナルを開きます。
-
次のコマンドを実行して config.json ファイルを開きます。
vi /home/notebook/.sparkmagic/config.json
注: JupyterHub アプリケーションを Amazon EMR プライマリインスタンスにインストールした場合は、次のコマンドを実行します。
vi /etc/jupyter/conf/config.json
-
config.json ファイルの livy_session_startup_timeout_seconds: ### オプションを追加または更新します。
-
すべてのカーネルを再起動します。
注: JupyterHub アプリケーションを Amazon EMR プライマリインスタンスにインストールした場合は、JupyterHub コンテナを再起動してください。
Spark ドライバーメモリを調整する
Jupyter Notebook アプリケーションが使用する Spark ドライバーメモリを変更して、リソース割り当てを制御します。詳細については、「How do I modify the Spark configuration in my Amazon EMR Studio Workspace?」(Amazon EMR Studio ワークスペースで Spark 設定を変更する方法を教えてください) を参照してください。
Livy サービスが正常であることを確認する
プライマリノードインスタンスで実行されている Livy サーバーの状態を確認する
次の手順を実行します。
-
livy-server の状態を確認するには、次のコマンドを実行します。
sudo systemctl status livy-server
-
サーバーのステータスが down の場合は、次のコマンドを実行して livy-server を再起動します。
sudo systemctl start livy-server
Livy サーバーのメモリを増やす
デフォルトでは、ノートブッククライアントは Apache Livy サーバーへの接続を 90 秒間試みます。Livy サーバーが 90 秒以内に応答しない場合、クライアントはタイムアウトになります。Livy サーバーが応答しない最も一般的な理由は、リソース不足です。この問題を解決するには、Livy サーバーのメモリを増やします。
次の手順を実行します。
-
SSH を使用してプライマリノードインスタンスに接続します。
-
/etc/livy/conf/livy-env.sh ファイルに次のプロパティを追加します。
export LIVY_SERVER_JAVA_OPTS="-Xmx8g" (option to your value)
-
Livy サーバーを再起動します。
sudo systemctl stop livy-server; sudo systemctl start livy-server
Livy でクライアントモードの代わりにクラスターモードを使用する
ノートブックで Spark アプリケーションをクライアントモードで送信すると、Spark ドライバーは Livy サーバーのサブプロセスとして実行されます。サブプロセスを実行すると、プライマリノードのリソースが不足する可能性があります。リソース不足による Livy の障害を防ぐには、デプロイモードをクラスターモードに変更します。Spark アプリケーションをクラスターモードで実行すると、ドライバーはプライマリノードではなくコアノードとタスクノードで実行されます。
次の手順を実行します。
-
SSH を使用してプライマリノードに接続します。
-
/etc/livy/conf/livy.conf ファイルに次のパラメータを追加します。
livy.spark.deploy-mode cluster
-
Livy サーバーを再起動します。
sudo systemctl stop livy-server; sudo systemctl start livy-server