【问题标题】:Elapsed time between application accepted and running states应用程序接受状态和运行状态之间经过的时间
【发布时间】:2017-03-17 14:43:54
【问题描述】:

我正在使用一个管理 spark、mr 和 tez 应用程序的纱线集群。我想计算所有完成的应用程序从接受状态到运行状态的平均时间。我的问题是:

  • 有比解析日志更简单的方法吗? 每个过去的应用程序并减去时间戳
  • yarn 是否已经提供了类似的指标(基本上是用来估计应用程序运行前的平均等待时间)

谢谢!

【问题讨论】:

  • 我不是这方面的专家,但我很快查看了 RMAppImpl 中的代码。似乎衡量从 ACCEPTED 到 RUNNING 所用时间的唯一方法确实是依赖“State change from”日志语句。您可能想探索历史服务器 REST API 提供的内容。它不存储如此细粒度的信息,但也许 job.submitTime 和 min(taskAttempt.startTime) 之间的差异是一个足够好的近似值。

标签: hadoop apache-spark hadoop-yarn hadoop2


【解决方案1】:

对于每个 YARN 应用程序,您都可以跟踪应用程序 ID。通过使用此应用程序 ID 对 Timeline Server (Port 8188)JobHistory Server (Port 19888) 进行 REST 调用,您可以计算出所需的时间。

对于 MR

每个应用程序都有一个默认名称,格式为application_<epoch time at the submission>_<4-digit index number>。将开头的application_ 替换为job_,您将获得作业ID。现在使用以下 URL 格式对 HistoryServer 进行 REST 调用:

http://<IP of your cluster-manager>:19888/ws/v1/history/mapreduce/jobs/<Job ID>

您将获得带有 submitTimestartTime 字段的 XML 或 JSON 响应。它们以纪元毫秒为单位。差值就是要求的值。

对于 TEZ

对于 TEZ,监控是根据与每个应用程序关联的有向无环图来完成的。因此,您需要直观地进行以下 REST 调用:

http://<IP of your cluster-manager>:8188/ws/v1/timeline/TEZ_DAG_ID

你会得到很大的反响。对于每个 DAG ID,您需要查看 DAG 的 Primary Identifiers,您将找到与每个 DAG 关联的应用程序 ID。只需获取应用程序的 submitTimestartTime 并获取差异。

可能对您有帮助的事情:

  1. 如果您使用 Chrome,请安装 JSONView 扩展,这可以帮助您检查 REST 调用的输出。
  2. 如果您使用由 Ambari 或 Cloudera Manager 等管理器管理的集群,您可以转到 TEZ Web UI 并更详细地了解您的 TEZ 应用程序的详细信息。
  3. 对于 MR Jobs,您可以通过在浏览器中输入 http://&lt;IP of your cluster-manager&gt;:19888 并从那里查看应用程序数据来访问历史服务器来执行类似的操作。

【讨论】:

    【解决方案2】:

    我们如何获得 spark 作业的提交时间?

    我尝试了 http::18080/api/v1/applications api,但它没有提供提交时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多