监控 Dataproc 集群上的 Spark-Shell 或 PySpark-Shell 会话

Monitoring Spark-Shell or PySpark-Shell sessions on Dataproc cluster

我知道访问 Spark Job Driver Output and from a Dataproc cluster, along with 有答案。感谢这些。

但是,我也有兴趣查看 不完整 Spark 应用程序的日志,例如交互式 pyspark-shellspark-shell 会话——两者都是:

  1. 使用相同的网络界面,可能还有
  2. 访问原始会话输出(本地 fs 或 hdfs 上的日志文件?)

在 Spark shell 会话期间,虽然我可以将会话视为 不完整的应用程序 ,但 UI 在整个 [=当我在 REPL 中执行命令时,33=]Jobs、StagesTasks 选项卡。这可以很容易地复制,如:

# Launch Dataproc cluster
>> gcloud beta dataproc clusters create $DATAPROC_CLUSTER_NAME

# SSH to master node:
>> gcloud compute ssh "root@$DATAPROC_CLUSTER_NAME-m"

# Launch a Spark shell (e.g., Python) 
>> pyspark

我能够将 Spark 会话视为一个不完整的应用程序(如上所述),并且可以执行基本的 Spark 作业(使用 collect 操作),例如:

>>> rdd = sc.parallelize([1, 2, 3, 4, 5, 6])
>>> rdd2 = rdd.map(lambda x: x + 1)
>>> rdd2.collect()
[2, 3, 4, 5, 6, 7]
>>> rdd2.persist()
PythonRDD[1] at collect at <stdin>:1

但这会导致 JobsStagesStorage 中没有任何信息] 选项卡:see Spark Job History UI screen grab (blank).

要强调的是:当通过 Dataproc API 提交作业时,这些选项卡 会显示 所有预期的作业历史记录。

关于在何处可以从 Spark shell 会话访问此类输出/作业历史记录的任何提示?提前谢谢了。 :)

Dataproc 仅为 Dataproc 作业提供驱动程序输出,即通过 API(通常通过 Cloud SDK 或开发者控制台)提交的驱动程序。要 运行 spark-shell,您必须通过 ssh 进入集群并 运行 您自己 shell,这不会被跟踪为作业。然而,它仍然在 Web UIs 中被跟踪,您可以自己捕获控制台输出。

  1. Spark History Server 仅在应用程序完成时更新。对于实时 Spark Web UI:

    一个。转到 YARN ResourceMangers 的网站 UI as documented here

    b。找到您的应用程序(它可能在顶部,运行,并命名为 PySparkShell)

    c。单击跟踪下最后一列中的 ApplicationMaster UI。

    d。您应该会看到您的应用程序的实时 Spark Web UI。

    一般来说,我总是建议通过 ResourceManager 的 WebUI 查看 Spark 和 MapReduce 作业,因为它具有指向当前 运行ning 和已完成作业历史记录的链接。

  2. 您可以使用 spark-shell |& tee -a shell.log 之类的方法将 shell 的输出捕获到本地日志中。如果你只想要日志记录(而不是打印语句),你也可以 use log4j to configure a local file log.