Spark中有什么方法可以保持每个阶段的运行时间?

时间:2019-07-25 11:46:32

标签: performance apache-spark hadoop

我正在测量具有不同资源配置的Spark作业的运行时间,需要比较每个阶段的运行时间。我只有在作业运行时才能在UI中看到它们。 我在Hadoop集群上运行我的工作,并使用Yarn作为资源管理器。

有什么办法可以保持每个阶段的运行时间?他们有日志吗?

更新:

我阅读了注释中提到的监视文档,并添加了以下几行,但是它不起作用:

spark-defaults.conf 中:

spark.eventLog.enabled   true
spark.eventLog.dir    hdfs:///[nameNode]:8020/[PathToSparkEventLogDir]
spark.history.fs.logDirectory 
  hdfs:///[nameNode]:8020/[PathTosparkLogDirectory]

spark-env.sh 中:

export SPARK_PUBLIC_DNS=[nameNode]
SPARK_HISTORY_OPTS="-Dspark.eventLog.enabled=true"
SPARK_HISTORY_OPTS="$SPARK_HISTORY_OPTS -Dspark.history.fs.logDirectory=$sparkHistoryDir"
SPARK_HISTORY_OPTS="$SPARK_HISTORY_OPTS -Dspark.history.provider=org.apache.spark.deploy.history.FsHistoryProvider"
SPARK_HISTORY_OPTS="$SPARK_HISTORY_OPTS -Dspark.history.fs.cleaner.enabled=true"
SPARK_HISTORY_OPTS="$SPARK_HISTORY_OPTS -Dspark.history.fs.cleaner.interval=7d"

它查找 / tmp / spark-events / 文件夹,当我创建它并启动历史记录服务器时,它不显示任何完整或不完整的应用程序。

注意,我也尝试了不带端口号的 logDirectory 值,但是它不起作用。

2 个答案:

答案 0 :(得分:0)

如果您正在运行Spark History Server,则最简单的非UI方式来获取有关已完成应用程序的详细信息的方法是通过History Server的REST API。具体来说,对于阶段信息,以下请求将以JSON格式返回所有阶段的摘要。

$ curl http://<history_server_host>:<port>/api/v1/applications/<application_id>/stages/

请注意,对于集群模式下的Spark应用程序,<application_id>之后应紧跟<attempt_number>,然后才是{/ 1},如.../application_12345678_9012/1/stages所示,否则您会得到一个错误,指出<application_id>不存在。

答案 1 :(得分:0)

我可以运行Spark History Server,并通过应用以下命令来查看已完成和未完成的应用程序的历史记录:

  1. conf / spark-env.sh
  2. 中设置公共DNS值
export SPARK_PUBLIC_DNS= NameNode-IP
  1. 在我的Java代码中将这些属性添加到SparkConf:
SparkConf conf = new SparkConf()
                .set("spark.eventLog.enabled", "true")
                .set("spark.eventLog.dir", "hdfs:///user/[user-path]/sparkEventLog")
                .set("spark.history.fs.logDirectory", "hdfs:///user/[user-path]/sparkEventLog")
  1. 创建包含以下行的属性文件( spark / conf / history.properties
spark.eventLog.enabled  true
spark.eventLog.dir      hdfs:///user/[user-path]/sparkEventLog
spark.history.fs.logDirectory   hdfs:///user/[user-path]/sparkEventLog
  1. 启动历史记录服务器:
./sbin/start-history-server.sh --properties-file ./conf/history.properties

注意:属性 eventLog.dir eventLog.dir 应该具有保存值。