Amazon EMR の Spark ウェブ UI から Apache Spark の履歴イベントまたはログを表示できません。
簡単な説明
Amazon EMR の Spark 履歴サーバーは、以下を使用して表示できます。
- 永続的なアプリケーションユーザーインターフェイスへのクラスター外アクセス (EMR 5.25.0 以降)。
- SSH 接続経由で Web プロキシを設定して、クラスター上のアプリケーションのユーザーインターフェイスを作成します。
解決方法
クラスター外の永続的な Spark 履歴サーバーまたは UI を使用して Spark 履歴イベントを表示できない
Spark ヒストリサーバーの永続イベントには、以下の条件がある EMR クラスターではアクセスできません。
- 複数のマスターノード。
- EMR クラスターは AWS Lake Formation と統合されています。
- デフォルトディレクトリが HDFS から Amazon Simple Storage Service (Amazon S3) などの別のファイルシステムに変更されました。
詳細については、「永続アプリケーションのユーザーインターフェイスを表示する-考慮事項と制限事項」を参照してください。
**注:**永続的な Spark 履歴サーバー は、負荷テストや、並行して実行されている何千もの Spark アプリケーションの表示には適していません。負荷テストを行ったり、多数のアプリケーションを表示したりするには、クラスター上の Spark 履歴サーバーを使用します。
クラスター上の Spark 履歴サーバーまたは UI を使用して Spark 履歴イベントを表示できない
6.3* と 5.30 より前の Amazon EMR リリースの S3 バケットに Spark イベントを保存すると、クラスター上の Spark 履歴サーバーイベントにアクセスできなくなります。これらの Amazon EMR バージョンの Spark 履歴サーバーには、S3 バケットへのアクセスに必要な emrfs-hadoop アセンブリ JAR ファイルがありません。この JAR ファイルがないと、Spark 履歴サーバーのイベントにアクセスしようとすると、次のエラーが表示されます。
INFO FsHistoryProvider: History server ui acls disabled; users with admin permissions: ; groups with admin permissions
Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException: Class com.amazon.ws.emr.hadoop.fs.EmrFileSystem not found
このエラーを回避するには、次のクラスター構成を使用してください。この設定により、必要な emrfs-hadoop-assembly JAR ファイルが Spark 履歴サーバーのクラスパスに追加されます。
[
{
"classification": "spark-defaults",
"configurations": [],
"properties": {
"spark.eventLog.dir": "s3://<yourbucket>/",
"spark.history.fs.logDirectory": "s3://<yourbucket>/"
}
},
{
"classification": "spark-env",
"configurations": [
{
"classification": "export",
"properties": {
"SPARK_DAEMON_CLASSPATH": "$(ls /usr/share/aws/emr/emrfs/lib/emrfs-hadoop-assembly-*)"
}
}
],
"properties": {}
}
]
EMR 6.x リリース (6.3 まで) では、emrfs-hadoop-assembly を使用しないでクラスターの起動時に Spark イベントログディレクトリを S3 に設定すると、クラスターが終了します。クラスターの実行後に変更を加えると、構成の変更が元に戻る可能性があります。
注: 必要な JAR ファイルがデフォルトで /usr/lib/spark/jars/ フォルダに追加されるため、この回避策は、6.3 と 5.30 以降の Amazon EMR リリースでは必要ありません。
Spark イベントが S3 に書き込まれると、Spark 履歴サーバーには不完全なアプリケーションリスト内のアプリケーションが表示されないことに注意してください。また、Spark コンテキストが不適切に閉じられた場合、イベントログは S3 に正しくアップロードされません。
プライベートサブネットにあるクラスターの Spark 履歴イベントを表示できない
クラスターにプライベートサブネットを使用する場合は、プライベートサブネットの Amazon Virtual Private Cloud (Amazon VPC) エンドポイントポリシーが正しいことを確認してください。VPC エンドポイントポリシーには、S3 のリソースリストに arn: aws: s3::: prod.MyRegion.AppInfo.src/* を含める必要があります。詳細については、「プライベートサブネットの最低限の Amazon S3 ポリシー」を参照してください。
Spark UI で転送中の暗号化を有効にすると、「NET: ERR_CERT_COMMON_NAME_INVALID」というエラーが表示される
このエラーは、ブラウザの証明書検証の問題が原因です。Mozilla Firefoxを使用している場合は、リスクを受け入れて証明書を引き続き使用するオプションが表示されます。Google Chrome では、警告ページに thisisunsafe と入力すると、Chrome が証明書の検証をスキップします。