2

我知道有从 Dataproc 集群访问 Spark作业驱动程序输出Hadoop 作业的答案,以及Google Cloud Logging 中 Dataproc Spark 作业的输出。谢谢这些。

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

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

在 Spark shell 会话期间,虽然我可以将会话视为不完整的应用程序,但当我在 REPL 中执行命令时,UI 没有跨JobsStagesTasks选项卡提供此类信息。这可以很容易地复制,如:

# 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选项卡中没有任何信息:请参阅 Spark Job History UI screen grab (blank)

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

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

4

1 回答 1

6

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

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

    一种。转到此处记录的 YARN ResourceMangers 的 Web UI

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

    C。单击 Tracking UI 下最后一列中的 ApplicationMaster。

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

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

  2. 您可以使用类似的东西将 shell 的输出捕获到本地日志中spark-shell |& tee -a shell.log。如果您只想要日志记录(而不是打印语句),您还可以使用 log4j 配置本地文件 log

于 2016-01-13T23:59:50.363 回答