我正在使用 yarn 集群管理 spark、mr 和 tez 应用程序。我想计算所有已完成应用程序从接受状态到运行状态所用的平均时间。我的问题是:
- 有没有比解析日志更简单的方法 每个过去的应用程序和减去时间戳
- yarn 是否已经提供了类似的指标(基本上是用来估算应用程序运行前的平均等待时间)
谢谢!
最佳答案
对于每个 YARN 应用程序,您都可以跟踪应用程序 ID。通过对 Timeline Server (Port 8188)
进行 REST 调用和 JobHistory Server (Port 19888)
通过使用此应用程序 ID,您可以计算出所需的时间。
对于先生
每个应用程序都有一个默认名称,格式为 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>
您将获得包含字段 submitTime
的 XML 或 JSON 响应(它是)和 startTime
.它们以纪元毫秒为单位。不同之处在于所需的值。
对于TEZ
对于 TEZ,监控是根据与每个应用程序关联的有向无环图完成的。因此,您需要直观地进行以下 REST 调用:
http://<IP of your cluster-manager>:8188/ws/v1/timeline/TEZ_DAG_ID
你会得到很大的回应。对于每个 DAG ID,您需要查看 Primary Identifiers
的 DAG,您将找到与每个 DAG 关联的应用程序 ID。只需获取 submitTime
和 startTime
申请并取差。
可能对您有帮助的事情:
- 如果您使用 Chrome,请安装 JSONView 扩展,这可以帮助您查看 REST 调用的输出。
- 如果您使用的集群由 Ambari 或 Cloudera Manager 等管理器管理,您可以转到 TEZ Web UI 并更详细地了解您的 TEZ 应用程序的详细信息。
- 对于 MR Jobs,您可以通过在浏览器中输入
http://<IP of your cluster-manager>:19888
来访问历史服务器来做类似的事情。并从那里查看应用程序数据。
关于hadoop - 应用程序接受和运行状态之间耗时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40411260/