我正在使用一个管理spark, mr和tez应用程序的yarn集群。我想计算所有完成的应用程序从接受状态到运行状态所花费的平均时间。问题是:
- 是否有更简单的方法来做到这一点,而不是解析的日志每个单个过去的应用程序并减去时间戳
- yarn是否已经提供了类似的度量(基本上是估计应用程序运行前的平均等待时间)
谢谢!
对于每个YARN应用程序,您都可以跟踪应用程序ID。通过使用此应用程序ID对Timeline Server (Port 8188)
和JobHistory Server (Port 19888)
进行REST调用,可以计算出所需的时间。
每个应用程序都有一个默认名称,格式为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>
你会得到一个XML或JSON响应(它的)与字段submitTime
和startTime
。它们的单位是epoch毫秒。
http://<IP of your cluster-manager>:8188/ws/v1/timeline/TEZ_DAG_ID
你会得到很大的回应。对于每个DAG ID,您需要查看DAG的Primary Identifiers
,您将找到与每个DAG关联的应用程序ID。只需获取应用程序的submitTime
和startTime
,并取其差值。
可能对你有帮助的事情:
- 安装JSONView扩展,如果你使用Chrome,这可以帮助你通过你的REST调用的输出。
- 如果你正在使用一个由管理器管理的集群,如Ambari或Cloudera manager,你可以去TEZ的Web UI,并找到你的TEZ应用程序的更多细节。
- 对于MR作业,您可以通过在浏览器中输入
http://<IP of your cluster-manager>:19888
访问历史服务器并查看应用程序数据来做类似的事情。
如何获得spark作业的提交时间?
我尝试了http::18080/api/v1/applications api,但它不提供提交时间