开发者学堂课程【企业运维训练营之大数据 EMR 原理与实践:视频-《 EMR 集群运维与排障》】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/1242/detail/18464
EMR 集群运维与排障
内容介绍:
一、课程内容目标及要求
二、 EMR 管控平台介绍
三、 EMR开源组件管理平台
四、 EMR 监控与告警介绍
五、 EMR 诊断工具
六、组件异常排排查
七、运行作业异常排查
八、 EMR 集群弹性伸缩
九、总结
我们开始今天的课程,这个课程是我们企业大数据企业训练营的第三讲: EMR 的集群运维和排障。首先来做一下自我介绍,我是来自于阿里云专家服务的大克,目前是负责大数据全线产品技术支持的工作。接下来我们开始今天的课程。
一、课程内容目标及要求
首先在开始之前回顾一下昨晚第二章节课讲的一些内容:主要是 EMR 一些组件的介绍,像 HDFS 、 Hive 、 Hue 、 Spark 等这些开源的组件,以及自研的金融MS数据存储的组件。前面讲到了涉及到组件的技术原理,包括怎么使用。会发现对 EMR 的运维同学来说,经常会遇到的问题主要有两个。第一个就是自研组件异常的情况下,怎么快速的进行排障,恢复组件的正常工作;另外就是对于组件的运维,如何快速的基于 EMR 提供的一些相关工具,包括管控以及组件的一些开云的 UI 进行深入的了解后,使集群可以更好的运维工作。所以带着这个问题,来开始今天的课程。
本节的训练营我会从以下几个课程内容方面来展开:首先是 EMR 管控的管控平台的详细介绍,因为对运维或者是开发的同学来说,首先了解我们的产品,就是对 EMR 管控的详细了解。这样的话,在日常集群的运维过程中,就可以很熟悉的或者是很快速的对集群进行管理;第二个就是 EMR 提供的一些基于各个组件以及具体的底层的像 ECS 服务器的一些监控、包括告警这些内容,这样的话对于我们日常的运维过程中可以实时监控,或者是了解到集群的状态;第三方面主要是 EMR 提供的一个弹性伸缩的功能,这一点是在很多企业在使用 EMR 的过程中是经常使用到的。因为伴随着企业的数据的增长,计算数据的任务越来越大,但具体成本包括可运维方面一些考虑,所以需要在任务大的时候能做到快速的一个扩容,来支持一些数据的分析和计算等等这些需求,所以第三方面我会在我会重点介绍一下 EMR的弹性伸缩。
通过这次的课程培训,我们可以熟悉我们的管控平台,以及对 EMR 集群整个全链路的一个排查的思路和实践。
这样的话,带着我们的目标来进入今天的课程。详细展开来讲,我这里分了六部分:第一部分主要是 EMR 管控平台的介绍。这个是很基础的一个平台,在第一节课程的时候,我们的同事也是简单的介绍了 EMR 管控平台所体现的一些功能,这里我会详细介绍,结合在支持用户过程中遇到的一些案例,包括整个控制台应该重点关注哪些内容来进行讲解;第二个是 EMR 开源组件的一些 UI 的介绍。因为在整个排障过程中,除了 EMR 平台的一些介绍,开源组件介绍也是在运维过程中经常遇到的,比如 YARN UI 、 YARN Recourse UI ,这样就可以通过这个实时的来关注在 YARN 上提交的的任务以及运行的状态。还有比如说 HDFS 的 UI ,在上节课我们也大致介绍过 IDBX 的 UI 能帮助我们看到明确的哪些信息,或者需要关注哪些信息,本节也会主要的介绍;第三方面主要是在 EMR 监控和告警这方面的内容的介绍,。EMR 监控提供了丰富的监控的监控项,能确保包括组件本身的节点、服务器的以及运行任务,通过这些监控以及配合告警的一个方式联动,就可以将任务组件状态以及节点的信息实时同步通知到我们的运维同学,一旦出现异常,我们的运维同学可以快速的介入来排查。在了解到以上三面之后,我下面会重点带着问题来介绍一下,比如说 EMR 组件异常的一些排查思路和最佳方案。通过这个方案,可以快速的了解一旦出现组件异常的情况下,需要关注哪些信息,然后获取哪些信息,快速通过分析,快速恢复组件的过程。接下来,组件的服务异常是一个重要的指标,除此之外还是涉及到 EMR 任务运行的异常排查,那大数据的集群主要是跑任务。对于有跑到 YARN 上的一个任务如何进行排查,会重点介绍一下排查思路;最后会介绍一下 EMR 弹性伸缩。刚才说了为什么需要弹性伸缩,那如何配置弹性伸缩,如何更好的规划弹性伸缩?第六节会展开来讲。
通过这六节的分享、说明,可以归纳出两个问题:一个是对于 EMR 产品如何快速的上手、熟悉我们的运维工具,包括管控平台和开源组件的 UI 来展开今天的课程;还有就是组件异常时排查的最佳方案。主要是带着两个这个问题,来开始今天的课程。
二、EMR 管控平台介绍
EMR 管控平台提供了很丰富的管理工具,然后相对于开源 HADOOP 的自建集群,比如说你本地的 RDC 自建了一个 HADOOP 集群,其实你所依赖的所有配置项都是通过手动的命令或者启动来实现的,那基于开源的组件也是提供了 UI ,但它是不具备来运维的一个工具的,它只是提供了监控或者是可查看任务运行的机制,所以 EMR 管控是我们自研的一个平台,包含了更多的信息,主要包含的内容可以从具体的控制台来详细讲来讲一下。
在我自己搭建的一个测试集群中:
首先第一点的基础信息里面要关注哪些东西?第一个就是软件信息,这里为什么要关注这里?因为很多用户上云之前,是有本地的 RTC HADOOP 集群的,无缝上云的一个需求,就要确定云上的版本、开源组件的版本和本地版本的兼容,这样的话才会最小的出现由于版本问题导致的不兼容的情况或者报错等这些信息,所以这个是很关键的一个信息。
在集群服务里面,会展示出来你的集群所加载的所有涉及到的开源组件或者是自研组件的运行状态。比如可以看一下 HDFS 组件,它是有具体的 DataNode 以及 NameNode 信息,管控平台可以对这些组件进行重启、停止等这些操作,同时在集群上也有监控组件实时的获取这些组件的信息情况,配置页是所有的组件其实都一样的,和开源的提供的配置上也是一样的,像提供 HDFS site 的这个 xml 的文件,用户就可以在这里修改一些配置项,根据自定义的需求来修改这个配置,或者是新增一些配置也是可以的。这里的集群服务重点关注一下我的集群状态是否正常,或者是某集群组件的某个服务是否正常,来判断集群的状态。
在节点管理里面,主要是加载了一些服务器的列表。
之前上节课也给大家说过,主要分为三个节点,一个是 Master 的节点,就是管理节点;还有第二部分就是 core节点,这里主要是一些 DotaNode 、 nomain manager部署的一些节点,像 HIVE Server、 Spark history 这些都是部署在Master的节点,数据存储的节点和具体资源管理的节点都是部署在 core节点;那还有一种是 Task 节点,这种是面对计算场景下的一个节点组,为什么这么说?因为在越来越多的企业使用过程中,它数据在增长,但是相对于数据的增长,他们的计算任务的增长是指数式的增长,所以它一方面更多的需要是计算资源,而不是存储资源,数据增长比较慢,但是数据计算任务比较快,所以这部分 Task 节点可以扩容出来,那这个节点就是单独的配,比如说磁盘相对来说很小,但是给的内核和计算资源都很大。这是节点管理的一个介绍。
健康检查的介绍,这是 EMR 作为2.0推出的一个全新的功能。这个功能主要是干什么的?相对传统的 EMR 的 HADOOP 集群,它是没有一个全局统筹来分析集群健康状态的功能的,这个就能使 EMR 包括进行健康检查,这里就是主要来体现这个功能的,后面会展开来说。
访问链接和端口就是提供了一些开源组件的 UI 访问方式,访问控制台的方式,以及对应自研的一些组件的访问方式。
集训监控,是刚开始就有体现的。为什么这里的集训监控我会重点的来介绍?因为在很多案例的场景下,会通过集群监控的一些指标发现集群非健康的状态的,然后来实时调节对应组件的一些配置信息,比如说内存、 CPU 来快速恢复集群的服务的,这个后面也会展开来说。
脚本服务一眼看上去不是太好理解,为什么需要脚本服务?就是很多用户在场景下对 EMR 的集群,它不单单是跑一些离散计算的任务,可能还部署了一些自定义配合离散计算的一些服务接口,或者是离散计算的一些脚本等等这些这些需求。如果说没有这个脚本操作或,是怎么操作的,那就需要我们的运维同学手动的登录机器项,然后比如说安装一个软件来达到我所需要的一个环境变量,这种操作是十分繁琐的。假如说我一次扩容五十台或者十台的一个 ECS 机器,我还要一个一个上去登录来安装,那这是很繁琐的。所以这里提供了一些脚本的操作,可以将自己比如说安装第三方依赖的软件写进脚本,在扩容的时候进行执行,在服务器开出来之后,然后在具体的组件安装之前,把这些你所依赖的环境一次性的自动化的部署部署上去,脚本功能主要是体现在这。
日志管理是所有的组件的管理。上节课也重点介绍过,日志管理也是在我们的服务器上采集的。一种是上服务器上看,或者是你在这里通过 excel 的方式看都是可以的。
以上是整个管控页面的介绍,重点要关注的哪些指标,后面我也会展开的来讲的。
有了这么多管控提供的功能,所以相对于一些相对自建 HADOOP 集群,你可以看出来他的权限控制在应用上都有很大程度的提高。这些是自研的一个 EMR 管理平台,除此之外,集群开源组件也是集成了很多自带的开源组件的一些 UI 的支持。比如这里的 HDFS 、 YARN 、 Spark 、 Hue 、 HBASE 的 UI,接下来重点介绍一下以下三个 UI :比如 HDFS WebUI
回到集群控制页面,可以从访问链接与端口这里进入具体的 HDFS UI。那我们要关注哪些信息?带着这个疑问,进入到我们的控制台。
首先可以从之前集群的基础信息看出它是一个高可用集群,所以从 HDFS 的 Overview 里面可以看到集群的一些信息以及高可用的信息:安全是关的 Safemode 也是关的,然后这里可以看到 Jourmal 的节点信息等等,然后 NameNode Storage 主要是有两个存储需要关注,一个是DFS IMAGE ,一个文件存储 EDTS 的存储目录,这两个目录是 NameNode 的启动必须要加载文件的一个指标。
DataNode的节点要关注哪些东西?主要包含了一就是节点的数量;二就是每个节点数据的分布。因为在日常的的运维管理中,比如说我要加一个节点进来,存储节点就是 core节点,有 DataNode 节点进来之后,将来如果说数据存在不均衡的一个情况。
这里列出来的数据比较少,但是也是可以显示、来体现的。比如其实两个节点它会存储量比较大,然后另一个节点就存储量比较小。这个其实是很简单可以造出来的。在实际应用中,很多用户的数据会达到几十T,某些节点几十T的情况下新上一个节点,从0开始那这个数据是十分不均衡的,所以可以借助于这个页面,一方面看一下节点状态,一方面看一下每个节点的数据分布,来通过 HDFS 的方式提供的命令proc ECS 的方式来进行一个数据的均衡,然后从这个页面可以看到进行数据均衡的状态,最终达到所有的节点数据量在10%差值的状态。这里数据均衡也是存在几点问题的需要注意,比如在数据均衡的时候要设置它的并发,因为并发量以及转移数据块的速度。因为在我们的云上计算中,如果说你在业务的高峰期去做个数据的均衡的话,会导致整个磁盘的读写 IO 很大。所以我们建议在加节点之后,数据的均衡一般在业务的低峰期来进行开始。
然后可以关注一下这个 Startup Progr ECS ,这个是刚才我讲到的就是 DataNode 的启动过程是先加载 fsimgae 相当一个快照,快照存的是什么?就是存的所有的数据在 DataNode 上位置的一个映射。然后同时加载 edits , edits 记录是什么?就是收集在写入 HDFS 的时候,我会将这个数据块存在哪个节点哪个 DataNode ,具体的目录是什么都放在 edits 这个文件中。这种情况下会有什么问题呢?我们常见到的包括很多用户反馈过来的时候,用户的整个集群的数据量是十分巨大的,每个节点的数据可以达到三五十T的数据,然后同时在频繁的读和写的过程,那一旦 NameNode 挂掉,比如说它的磁盘有问题,或者是网络有问题导致 NameNode 挂掉,在拉起的时候就很慢。为什么是慢的过程?首先 fsimage 是个可以快速加载的,因为这个是快照,存储信息不多,但是如果说在挂掉之前会有大量的 edits,就是数据的写入, HDFS 会产生大量的 edits ,那他需要把所有的在挂掉之前把 edits 都加一遍,这个过程中十分巨大的耗时,可能在小时级或者是天级的一个级别,才把这些 edits 来加载进来,然后 NameNode 才是真正的启启动进来。所以在日常运维中 fsimage 设置的生成的时间,要根据业务量来进行调整的,如果写的确实很频繁,这个可以调低一点,让 Jourmal 是 Jourmal Node,如果是不高可用的Second Node来合成 fsimage 的频率快一些,减少 edits 的数量,这样才能在一旦出现 NameNode 异常的情况下,可以尽快的将 NameNode 拉起来,让整个集群恢复正常。
其他的就是 Browse the file system 就是网页版的查询,IDM工具在之前的课程也介绍到了。
刚才我讲到的这个案例,其实就是数据不均衡的情况下所进行的操作以及操作中可能需要注意的点,比如说 Balancer 的线程以及网速控制的这些信息,以上是 HDFS WebUI 的一个说明和关注点。
接下来看一下 YARN WebUI 。