大数据平台任务监控
写在前面
监控的概念
监控是收集和分析数据以确定业务应用程序的性能,运行状况和可用性及其依赖的资源的行为。 有效的监控策略可帮助用户了解应用程序组件的详细进程,还可以通过主动通知关键问题来避免错误发生,以便在问题发生之前解决问题。
宏观上看,监控的内容可以总结为下图:
Ref: https://www.digitalocean.com/community/tutorials/an-introduction-to-metrics-monitoring-and-alerting
大数据平台的开源监控工具
大数据平台的大部分通用的监控内容可以通过以下方式获取:
Yarn、Cloudera Manager 等集成组件的监控页面。
开源组件的REST API
- MapReduce REST APIs: MapReduce Application Master REST API’s、MapReduce History Server REST API’s
- YARN REST APIs:ResourceManager REST API’s、NodeManager REST API’s
- Spark REST APIs
Spark REST APIs踩坑说明:Spark REST APIs文档中有如下说明,For the history server, they would typically be accessible at http://<server-url>:18080/api/v1, and for a running application, at http://localhost:4040/api/v1.
意为历史任务的REST API在Spark History Server上http://server-url:18080/api/v1 接入, 正在运行的任务的REST API在Spark Drive 节点上http://localhost:4040/api/v1 接入。 实际操作过程中有以下几点需要注意:
a.历史任务监控端口: CDH会对默认的端口进行修改,其中就包括Spark History Server端口,由18080改为18088,需要注意。
b. 正在运行的任务监控地址和端口:用Yarn提交Spark任务时,Spark Driver是由Yarn决定的,所以要拿到正在运行的任务的REST API需要先从Yarn的日志中找到Driver节点,而且4040端口也会被Yarn配置为随机端口,需要注意。
通过Yarn的日志拿到了地址和端口组成链接host:port/api/v1/applications,但是通过浏览器查看该链接会发生跳转,跳转后就无法在跳转的链接中输入REST信息,反复修改比较麻烦,可以使用Postman等工具进行监控。
开源监控工具的局限
- 权限管理困难。
不同业务部门对不同的业务内容进行监控、进行不同级别的监控是大型平台系统监控的需求,依靠开源的组件难以实现。虽然一些第三方提供了一些权限管理的产品,但其力度难以满足大多数大型企业的要求。使用开源产品的商业发行版,也是一种办法,不过始终是不如企业原生系统在这方面的支持。(参考企业数据分析工作的任务、工具及挑战) - 具体业务的状态监控,需要对开源监控工具的功能进行补充。
下图是我列举的一些具体的监控内容。以其中交互式进度获取为例,Hive执行查询任务时,如果查询引擎是MapReduce且查询任务比较复杂时,一个查询任务会被划分成多个application(具体划分方法与hive任务划分stage有关,可以用Hive Explain命令查看),此时查看单个application的进度是没有意义的,因为用户希望获取的是整个查询任务的进度。因此需要在开源工具的基础上做二次开发。
开发监控组件例子
考虑到上述局限,个性化的监控组件是大数据平台常见的需求,开发监控组件是大数据平台软件开发的一个重要环节。不同的应用场景有不同的需求,需要对监控组件的开发思路也各有不同。这里提供些个获取REST API内容并消费的经典样例(Spring REST Client with RestTemplate: Consume RESTful Web Service Example for XML and JSON、How to read XML file in Java – (DOM Parser)),读者可根据需求对REST API上的内容进行组装或二次开发。
赞 (0)