Amazon Elastic MapReduce(以下简称EMR)是集齐数据接入、存储、计算、交互式查询、机器学习等一系列开源社区组件封装的云上托管大数据平台,用户可以基于EMR迅速建立一套大数据集群,用于大规模数据处理、分析,使用时可根据实际业务所需灵活调配计算资源,一定程度上降低底层基础设施运维成本。Amazon是最早将大数据管理平台上云的云厂商,查询其官网发行版本记录,能检索到的最古老版本EMR-4.2.0发布日期为2015年11月18日,当时大数据领域最火的三家Hadoop发行厂商:Cloudera、Hortonwoks、MapR,三分天下,互为掎角,世事难料的是几年后的今天惟Cloudera一家尚存。
入门
1、EMR集群单元构成
Amazon官网介绍EMR部署模式有:EC2、EKS、Outposts、Serverless这几种,后两者目前尚未在国内上线,而当前阶段EMR On EKS模式有使用场景限制(仅支持Spark应用)。
EMR集群由三个组类构成:MASTER、CORE、TASK,典型的EMR集群实例组架构如下图所示:
2、上手管理EMR集群
部署
EMR控制台提供两种部署模式:快速、高级,快速选项模式用户可根据提供的模板,简单配置后即可构建集群,高级选项模式则提供给用户更多自主选择,支持从软件、硬件、集群设置、安全性四大方面自定义配置构建集群。
集群配置
自定义配置支持集群全局范围和实例组范围,参数项变更操作支持json或表格两种格式编辑,这里要注意的是EMR控制台页面<集群配置>只允许在集群构建初始化阶段定义,集群上线后即不可被修改,EMR控制台在5.21.0及之后的版本支持实例组级别(运行中)服务配置项修改,具体配置项分发支持可检索参考官网发行版<配置分类>说明。
监控
EMR原生提供部分指标并集成至Amazon CloudWatch,用户可在控制台查看或到CloudWatch检索,常用指标基本已提供,若指标项不足以满足需求,可基于Prometheus+Grafana套件自行实现指标采集与监控告警。
安全性
用户在构建EMR集群前,建议事先定义创建好VPC网络、安全组及IAM角色,部署过程中引用这些安全性定义,当集群构建完毕后,所有EC2实例的安全访问即可实现受控,避免集群出现访问安全方面隐患。
进阶
1、更优雅便捷地构建集群
集群克隆
当集群出现故障或人为手动终止且该集群上存在许多用户自定义配置项时,在EMR控制台页面有个克隆功能,可通过此功能镜像方式创建新集群,新集群构建时会自动同步旧集群用户自定义配置项,避免配置项丢失或遗漏。
高级API
除EMR控制台外,用户还可基于Amazon CLI、Amazon SDK、Amazon WEB API三种更高级定义的方式创建集群,先以JSON格式定义好集群模板,一键POST提交后静待十分钟,一个新鲜出炉的集群即已创建完毕。
2、集群环境初始化
一个EMR集群要上线,并不止于构建完毕,还需对集群环境做初始化工作,通常初始化操作分两步:操作系统及平台组件环境。
操作系统
EMR底层EC2实例所引用的系统映像已由后台针对大数据场景做针对性系统参数优化,因此,一般情况下用户无需再做定制化修改,只要初始化系统时区、Prometheus node_exporter服务、dnsmasq、Docker(若有网段定义冲突)等基础服务设施即可。
平台组件
泛指HDFS/YARN/SPARK之类组件配置项,EMR初始化生成的组件配置项大多为默认值或者通用化模板配置,部分场景会存在不适用问题,因此建议用户务必按照集群运行环境所需进行修改。
3、自定义AMI
若用户需在EMR集群范围集成较多复杂组件,却又不想花费太多精力在部署运维上,可尝试使用自定义AMI映像方案。
4、监控告警完善
标签定义
具体是指对EC2实例和EMR平台服务打标签,便于之后告警项治理。打标签应成为一种习惯,从管理角度其价值不言而喻。
集群EC2实例指标采集
集群平台组件指标采集
EMR所提供的组件指标不能完全满足我司实际指标监控需求,作为管理员可自行开发exporter服务将组件指标采集后汇聚到监控中心,依托于监控中心实现平台组件服务监控覆盖和告警能力,也可以将这些指标推送至Amazon CloudWatch服务进行告警实现。
5、scale规则使用
在没有scale机制的自建Hadoop集群,不可避免地会碰到计算资源问题(不足或未用满),一种典型的做法是将计算引擎运行在K8S上,与业务平台错峰使用,以提高整体资源利用率。在EMR上用户可基于cluster或InstanceGroup两个层面定义scaling规则,规则触发后即进行集群节点扩缩容操作。
scale一般是应用在需动态伸缩的Core/Task节点,Core相对而言伸缩偏稳定保守一些,建议按比例固定。因此scale着重应用于Task节点并分别按OnDemand&Spot机型灵活配比,scale配置时支持多种指标定义,用户可择其一或多指标组合形成多层次弹性伸缩规则。
6、bootStrap
一个EMR集群从触发创建请求到上线会大致经历这几个阶段:
对于EMR初阶用户而言,上述阶段能感知到只有首尾阶段,其余部分基本像盲盒,对于中间过程执行情况一概不知。事实上这里列举的各个阶段皆有脉络可循:
申请EC2实例。从EMR管理控制台InstanceGroup入口可跳转到EC2实例控制台,那里可以观测到EC2实例运行情况。
初始化系统。包含两部分:选择AMI系统映像启动EC2实例及系统环境初始化,这部分可查看操作系统日志获知执行情况。
执行userData。在EMR集群中较少定义,通常是在单独启动EC2实例场景应用,在操作系统初始化完毕之后执行用于自动化修改系统运行环境。
执行bootStrap。EMR集群中对EC2实例启动后的初始化操作,与userData功效类似,执行结果可在/emr挂载点bootStrap-actions目录中获悉,以controller、stderr、stdout三个文本文件记录执行过程信息。
安装集群组件及集群组件配置。在bootStrap执行成功后,EMR内部以puppet任务方式执行集群组件安装及配置初始化,甚至于HDFS HA构建,详细执行过程信息可在如下路径获取,S3上传会有一定滞后。
当上述阶段步骤执行全无问题后,即确认为集群节点服务部署正常,最后状态变更上线。
7、CORE NodeLabel
EMR集群上线时会设定一些资源调度策略,该策略会最终影响计算任务调度分布。
8、集群使用 RDS
优点:
开箱即用,基本免运维,原生支持高可用;
EMR后台已对JDBC相关兼容性做适配。
缺点:
版本升级需重启RDS服务,诸如安全补丁之类升级会较频繁;
需单独监测底层是否发生A-Z切换,若有集群需重启相关组件服务,确保连接有效;
高版本RDS与EMR兼容性适配不佳,建议RDS不要超过7版本。
9、集群存储使用
既已使用了EMR,那么选择Amazon S3作为主数据存储就是自然而然的选择,一者存算分离是使用趋势,二者EBS与S3相比存储成本不在一个量级。在EMR体系中,CORE节点作为主数据存储节点,承载着分布式文件系统角色。
节省成本:小规模场景使用综合成本节省比较明显,当规模达到PB级时,EC2、EMR、S3、网络流量四者成本累计则未必,所以需要进一步进行架构优化,以获取最佳性价比。
监控方面:集群缺乏组件服务状态如健康程度、HA状态等类指标查看,可根据需要利用exporter采集。
集群部署&管理:基于快速构建集群设计思想,导致部署操作集成度较高,若过程出现异常,只能重新执行构建操作,无法断点连续操作,个别场景下集群验证有明显等待时间成本;EMR组件只提供initctl/systemd系统进程管理方式,不支持按组件/进程级别进行启/停。
扩展伸缩:EMR scale机制不支持以CPU vCore指标作为弹性伸缩规则,在混合计算业务场景scale伸缩某些时刻会不符合预期。
安全性:依托于VPC子网、安全组、IAM Role等多重机制提供安全性保障。
免责声明:市场有风险,选择需谨慎!此文仅供参考,不作买卖依据。