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

neh*_*cky 2 apache-spark google-cloud-dataproc

我理解从Dataproc集群访问Spark Job Driver OutputHadoop Jobs以及Google Cloud Logging中的Dataproc Spark作业输出有答案.谢谢你们.

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

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

在Spark shell会话期间,虽然我可以将会话视为不完整的应用程序,但当我在REPL中执行命令时,UI不会在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
Run Code Online (Sandbox Code Playgroud)

我能够将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
Run Code Online (Sandbox Code Playgroud)

但这导致任何作业,阶段存储选项卡中都没有信息:请参阅Spark作业历史UI屏幕抓取(空白).

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

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

Pat*_*lay 5

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

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

    一个.转到YARN ResourceMangers的Web UI ,如此处所述

    湾 找到你的应用程序(它可能在顶部,RUNNING,并命名为PySparkShell)

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

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

    通常,我总是建议通过ResourceManager的WebUI查看Spark和MapReduce作业,因为它有指向当前运行和已完成作业历史的链接.

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