为什么我无法在 Amazon EMR 中查看来自 Spark Web UI 的 Apache Spark 历史事件或日志?

2 分钟阅读
0

我无法在 Amazon EMR 中查看来自 Spark Web UI 的 Apache Spark 历史事件或日志。

简短描述

可以使用以下方式查看 Amazon EMR 上的 Spark History Server:

  • 在集群外访问持久性应用程序用户界面(从 EMR 5.25.0 开始)。
  • 通过 SSH 连接设置 Web 代理,实现集群内访问应用程序用户界面。

解决方案

我无法使用集群外的持久性 Spark History Server 或 UI 查看自己的 Spark 历史事件

在具有以下条件的 EMR 集群上无法访问持久的 Spark History Server 事件:

  • 多个主节点。
  • 与 AWS Lake Formation 集成的 EMR 集群。
  • 默认目录已从 HDFS 更改为其他文件系统,例如 Amazon Simple Storage Service (Amazon S3)。

有关更多信息,请参阅查看持久性应用程序用户界面 - 注意事项和限制

**注意:**持久性的 Spark History Server 不适合进行负载测试或查看数千个并行运行的 Spark 应用程序。要进行负载测试或查看许多应用程序,请使用集群内的 Spark History Server。

我无法使用集群内的 Spark History Server 或 UI 查看自己的 Spark 历史事件

如果您在 6.3* 和 5.30 之前的 Amazon EMR 版本上将 Spark 事件保存在 S3 存储桶中,则无法访问集群内 Spark History Server 事件。这些 Amazon EMR 版本中的 Spark History Server 没有访问 S3 存储桶所需的 emrfs-hadoop-assembly JAR 文件。如果没有此 JAR 文件,在尝试访问 Spark History Server 事件时会收到以下错误:

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 History Server 的 classpath 中。

[
  {
    "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 会导致集群终止。在集群运行后进行更改可能会导致配置更改恢复。

**注意:**对于 6.3 和 5.30 之后的 Amazon EMR 版本,无需使用此解决方案,因为默认情况下,所需的 JAR 文件已添加到 /usr/lib/spark/jars/ 文件夹中。

请记住,将 Spark 事件写入 S3 时,Spark History Server 不会在不完整的应用程序列表中显示应用程序。此外,如果 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 就会跳过证书验证。


AWS 官方
AWS 官方已更新 1 年前