开发者学堂课程【企业运维训练营之大数据 EMR 原理与实践:视频-《 EMR 集群运维与排障》】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/1242/detail/18464
EMR 集群运维与排障
七、运行作业异常排查
同时在我们数据开发过程中,我们也是会遇到运行作业的异常排查,这里我提供了一个案例,常见的就是我们把任务提交到我们的 YARN 上面来进行运行。
如果说一旦出现异常,比如这个异常我们可以通过这个日志通过 YARN UI 来看到具体任务失败,然后具体的日志来进行分析。有两种,一种是通过 YARM UI 的方式来获取具体的日志,或者是通过 YARN ID的方式来获取日志来进行排查。通过日志的定位就会发现这个是很简单的demo ,就是我查询的表不存在、被删掉了导致了任务的报错。这个流程其实和组件排查起来也是有类似的,就是说我提交的 YARN 我可以获取 YARN 的appID,对于运维同学分管一个ID来获取到具体的日志,通过获取日志来分析到具体日志中报错的信息到底是什么,最终来调整具体的任务或者是 SQL来进行规避这个错误,这个是运行作为排查的一个大致流程。以上是涉及到 EMR 的管控的介绍以及组件合作排查的介绍。
八、EMR 集群弹性伸缩
对于 EMR 来说,除此之外我们还是提供了一个集群的弹性伸缩的功能。那为什么这里要讲一下弹性伸缩,或者是对于我们有什么重大的用处?我先说说一下背景,就是包括 EMR 弹性伸缩,是我们的另一个云产品叫 ECS 弹性伸缩。它的应用场景主要是什么?比如我们一些大型的网站,或者是大型的服务是多台机器部署的,多台机器如果说有晚高峰,比如说8点的高峰到10点的高峰,我不可能一下子把所有的地区都扩容到满足晚高峰的方式,所以这里就有了弹性伸缩。
对于弹性伸缩可以配置定时的扩容,对于用户来说是节省成本的,同时是满足了用户的业务需求的。因此在 EMR 弹性伸缩中也是运行了这一点,因为在很多公司的数据计算过程中,它很多的比如说数据计算大多在凌晨,因是为离散数据,凌晨的时刻高峰我的集群可能本来就有10个节点,但是10个节点是不满足计算资源的,所以我要扩容。如果说手动的扩容,每天都要定时自己手动扩容这个很麻烦,所以提供了 EMR 自动的一个弹性伸缩来实现自动扩容的。具体的实现逻辑就是 EMR 提供两个指标,一个是根据定时来伸缩,一个根据指标,比如说集群的负载一样的资源的剩余量来进行负载,根据指标来开始伸缩,这是第一步。第一步有可能是根据资源的使用量来监控,还有就是时间定时来进行伸缩;第二步执行完之后开始创建一个伸缩活动,这个伸缩活动就主要是来执行下面的所有包含弹性扩缩容过程中所有的操作;第三步就是获取我们配置的一个伸缩规则、伸缩配置等等这些信息,开始进行一个伸缩,比如扩容一次要加多少台 ECS 、创建什么类型的 ECS 等等这些信息;第四步就是执行这个伸缩活动,创建对应的实例,并在对应的创建出来 EMR 节点上部署我们 EMR 节点的服务,启动服务,同时把这个节点加入到我们的集群中;第五步就是一系列完成之后,就是完成了整个弹性伸缩,同时启动冷却伸缩组,这个这里是 EMR 弹性伸缩的一个大致流程和背景。
那具体 EMR 的实现具体实现就是有两种,一种是按时间伸缩,用 ESS 的定时任务来进行伸缩;按负载伸缩就是链路比较长,一个是我们集群服务要采集指标,把这个指标传到我们sls里面,然后触发云监控,因为有些指标和云监控是相通的,包括刚才告警的东西,这些指标都是一致的,触发之后会回到我们的 EMR 接口,然后调用 ESS 的接口来进行那个操作,同时在这个弹性伸缩过程中也体现了优雅下线。为什么会体现优雅下线的操作。这种情况主要是用在弹性缩容的过程中,比如说我们这个节点正在跑任务,如果说立马把它下掉,那个任务肯定会是失败的。至少来说这个 task 比如 Spark task 的任务,在把这个节点下掉之后 task 肯定会失败,所以提出了一个优雅下线的功能。优雅下线功能是我设置之后,比如说我设置10分钟优雅等待下线,那在开始执行之后,我这个节点是不接受所有其他的任务,我就等待10分钟,把这个节点上所有的任务跑完之后,再把这个节点进行下线。那这样对于用户的任务是比较人性化的,因为等10分钟可能每一个任务都跑完了。还有一种情况也是很多用户不明白的,就是我等了10分钟任务没结束该怎么办?这是优雅下线的另一个机制,就是说没下线的话,我会把这个任务强制结束掉,然后你需要在你的任务中配置同事的一个机制,把当前这个 task节点分配到其他节点进行运行。所以它等待时长结束之后就会主动的把这个节点下掉,也可能会导致任务的失败,所以要依赖于具体的代码或者是业务端去增加从事的机制的。另外弹性告警也是提供了一个弹性扩缩容的告警方式,能及时的通知我们弹性伸缩的状态。这里我给大家演示一下在这里的使用。
回到我们的控制台,在节点管理这里,我这边已经创建了一个 task 组,创建的时候因为弹性伸缩就是这两种方式,产站式和按量付费。因为你用完之后会随时释放的,告警肯定是不合适的。我这里就设计了一个弹性伸缩组,可以看一下弹性伸缩扩缩容是怎么设置的,按时间设置、按负载设计。
我可以测试一下负载设计,这指标比较多,有 YARN 资源的指标,主要是 YARN 资源的指标伸缩出来 task 主要是计算节点,所以根据这些指标可以设置。这里我可以设计一个使用的内存来作为指标,5分钟、什么名字,比如说大于100就触发一个扩容。冷却时间就是在这个准确时间内,我扩充完之后,在这个冷却时间内不允许下次的扩缩容动作的,需要等待冷却时间后进行执行。这里就可以进行了,如果说我的集群出现匹配到设计的记录,就可以进行一个弹性扩容的操作。
这里还是有一个问题,就是说扩缩容我是否会支持多个扩缩容的请求?这也是用户反馈常遇到的一个问题。比如说我设置了一个弹性扩缩容是扩容的状态,同时也是设置了一个缩容的状态。比如按时间或者是按负载缩容。如果说上面是按时间来扩容,但下面是按负载缩容,那就会假如在这个时间点,我执行了扩容的操作,但是这个时间点它的集群的指标是符合缩容的操作的,就会产生冲突的。假如说扩容先开始的,那这时候缩容再去请求的话,就是按照这个指标去缩容的话就会出现了异常,就是缩容会失败,这也是很多用户在使用过程中出现一个问题,这两个不能是冲突的,就在同一时间扩缩容,只能存在一个伸缩活动。
好的,以上就是对 EMR 弹性伸缩的重点的介绍,那么在我们企业过程中,在节约成本同时满足也有大批海量数据的计算的情况下, EMR 弹性伸缩是很有必要的。
九、总结
以上是整个本次课程的介绍,现在进行这个课程的回顾。
首先管控平台我们在开始之前提了一个问题:我们 EMR 提供了哪些便利的运维工具?从管控平台、从监控和告警这里进行讲解,其实是大家可以有一个很清晰的理解的,比如说我们 EMR 提供哪些功能,以及开源组件的UI是怎么使用、哪些关注重点。然后就是我们的 EMR 提供了哪些监控服务,以及对于这些监控指标,通过告警的方式来通及时的通知到我们的运营同学。第二个问题就是如果说一旦组件服务出现异常或者是任务出现异常,那我按照哪个流程或者严格意义上的标准来进行排查,我能找到具体的报错来进行快速的恢复,这个也是有进行讲解的。首先比如说组件、任务的,我们可以告警来通知到这个我们集群的服务的异常。然后第二步就是根据这个异常来实时的看一下,找到这个组件的启动或者是停止的日志,或者是运行任务的日志,来通过这个日志来获取具体的报错信息。第三步就是通过分析这个报错信息,结合我们一些常见的 FQ 或者是网上开源的一些报错的一个警示来进行快速的调参或者修改配置来进行快速的恢复。这两个部分可以总结起来覆盖到我们课程开始之前的一个问题。第三部分主要是介绍了 EMR 弹性伸缩。
以上是整个我的课程的讲解,下次课程的预告主要是集中在我们的数据开发方面。
数据开发我们重点介绍一下 DataWorks ,它是全面的一个很强大的数据治理和数据集成的平台,那在EMR上面如何使用 DataWorks,更好的使用DataWorks进行全链路的数据湖开发。下节会讲到主要是涉及到DataWorks我在 EMR 提供了哪些产品优势,有了这种产品优势、产品能力,相对于其他的平台,基于 HADOOP 集群的开发,有哪些产品优势,我们会讲解到。最后是一个实验,就是DataWorks产品的演示,进行数据分析、数据计算的一个演示 demo。
好的,感谢大家来听此次的一个课程培训,本次的课程先到这里。