开发者学堂课程【E-MapReduce入门:EMR 产品使用入门】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/329/detail/3701
EMR 产品使用入门
内容介绍:
一、 E-MapReduce(EMR)
二、 EMR 组件介绍
三、 EMR 云上特征
四、 功能演示
五、 课程小结
一、E-MapReduce(EMR)
1、E-MapReduce 介绍
EMR 是构建在阿里云 ECS 上的的开源大数据平台。
早期的 EMR 主要集成 Hadoop、Spark、Hive、Flink 比较常见开源大数据, EMR 是 PaaS 产品出现在平台上。云上产品一般有 AS、IAS、PaaS、SAS。 PaaS 主要是ECS,提供的底盘架构属于二次产品。 RDS 是 SaaS 产品,定制的功能可能比较少,主要是用产品提供的功能。 EMR 是 PaaS 产品,所以 ECS 是用户资源, PaaS 产品是让用户去管理 ECS 。 六大集群类型: Hadoop 集群、 Kafka 集群、Zookeeper集群、Data Science集群, Druid集群、DataFlow 集群,早期的 Hadoop 集群为开源 PaaS 产品,现在已经发展成为一个基于开源大数据加AI的平台。
2、阿里云 E-MapReduce 发展历程
最开始提供云上 Hadoop 集群的能力。然后集群用户实验的不断增加, Hadoop 进程有很多作业,怎样去管理长度集群上的作业,对作业进行调度。对进行管理和调度之上有管控平台常用的一些指标、报警的功能,然后所有组件层面都支持高可用。
对接云上生态、认证授权、审计都在里面。 EMR 也逐渐向智能化、高性能化发展,体现在产品上面就可以直接进行操作,比如 EMR 的队列配置和弹性的基本控制、高性能,在底层上进行了很多优化像 Spark、Hive、jinduFS 都属于性能上的优化,就使资源达到极致的一个性能。 EMR 产品的已经逐渐的向大数据+ AI 一站式平台进行发展。
3、阿里云 E-MapReduce 平台架构
底层是基于 ECS和 ACK的,在 ECS 之上然后有 EMR Agent 负责去在管控上的一些操作通过 Agent 进行完成,里面包括了 EMR 支持的大部分的组件,因为产品不断的迭代,一些新的也不断的加进来。
数据集成上有 Sqoop、DataX、Flume、Logstash、SLS、Kafka。
存储上有 HDFS、jinduFS、OSS。
计算引擎非常多种多样,常见的 ER、Hive、Spark、Flink 等等,可以看到 EMR 提供的跟用户更加贴近的能力。
像 NoteBook、Jupyter、Zepplin、Hue、Spuerset 跟分析式打交道。还有作业调度 EMR-Flow 。
左边有认证授权 Kerberos Ranger,还有监控报警、智能运维,这
些开源的组件构建了一个丰富的大数据平台。
4、阿里云 E-MapReduce 集群架构
EMR 集群架构主要有以下几个,可以看到中间是一个集群,集群里面 EMR Header, Header 存放类似于管理这种节点,比如 HDFS 有Datanode 放在 EMR Header 之间。 EMR 还有一种 Task 节点, Task 节点相对于 Core 节点的区别就是上面没有存储长度数据的,所以可以更加灵活地进行申请和释放。
当自身资源不够的时候,可以直接用 Task 节点把计算能力快速扩展上去。
一个集群里面有三种经典的角色以外还有 EMR Gateway 这样的节点类型, EMR Gateway 是属于给终端用户使用的,终端用户可以通过 EMR Gateway 向集群要作业,配置都是打通的。大数据里面会涉及很多开发,比如还有一些资源消耗,这些作业的跑到 EMR Gateway 上面。
二、EMR 组件介绍
1、E-MapReduce 使用场景
使用的场景来看这些组件,首先一个大数据引擎、大数据平台要存放海量数据,所以海量数据存储主要是使用到了 HDFS、jingdoFS+OSS。然后包括数据的导入、抽取、转换可以使用JindoDistCP、Sqoop、Spark、Kafka,数据来了以后会有实时查询和离线分析的需求,需要使用 EMR 里面提供计算的查询组件,像 Hive、Spark、Presto、Impala 。
然后还有交互式分析的需求,比如可以在一个 Web UI 上直接输入查询得到结果。集群里面一样的资源 Knox,然后打通集群之内的页面的访问。
3、存储篇-海量数据如何存储
存储篇主要是解决海量数据是如何存储的。EMR 里面最主要的几种,首先是 Apache HDFS 是经过社区版本基础之上进行优化的版本,解决 HDFS 的一些问题,可以支持到一个100pb 的级别。JindoFS 是构建于 OSS 之上进行的数据湖加速, OSS 是一个数据湖的底层存储,JindoFS 是数据湖加速的方案,把 OSS 作为底层存储提升提供门面形式的访问,对接的计算达到非常好的查询和分析效率,OSS 提供了一个阿里云存储的服务。
4、Apache HDFS
首先 Apache HDFS 的组件结构,是一个 HDFS HA 集群的架构图。可以看到 HDFS 是 NameNode 提供源数据服务,下面开发很多 Datanode 去存储数据,通过 HDFS Client现象 NameNode 去请求,然后再去向 Datanode 进行读写。
大数据集群 HDFS 作为一个单点存在,所以 HDFS 一旦出现问题,会导致整个集群的存储都不能访问,因此 HDFS 里面作为 HA 高可用的架构,可以看到里面有两个 Node ,Node 之间的写作是经过 ZKFC 的组件通过 ZK 进行选举,选出 Active 的 Node 向客户端提供服务,然后 Standby 及时跟 Active 保持同步,一旦 Active 节点出现问题可以及时接管客户端的请求并继续管理 Node 。
Node 会写日志把日志写到 JN 上,图里面有三个 JN ,Standby 及时消费一个 JN 然后去做内存的同步。HDFS经过 EMR 的优化现在已经支持到100pb 资源,所以 HDFS 用起来是比较方便的,但是随着用户使用量的不断增加,可能在1pb以下不太需要调整,但是升到一定规模以后就要不断调整 HDFS 的各种参数,然后包括后期一旦升到 10pd 以后包括 HDFS 本身的心跳、瓶颈都暴露出来。所以也需要专家级别的调用。
这些问题在 EMR 中得到很好的改善,但是调用避免不了的,而且 NameNode 是有源数据让它使用GAM 作为存储,所以也会遭遇 GAM 的瓶颈,最大的 HDFS 一般存储4亿左右的源数据比较接近危机的瓶颈。
4、JindoFS+OSS
针对 HDFS 的问题开发了 JindoFS+OSS 存储。 JindoFS 是构建于 OSS之上,在集群里面有 Namespace Service 、Storage Service 组件, Namespace Service 依然管理数据,然后可以把元数信息及时同步到阿里云 OTS 服务上,可以做到快速的恢复。
HDFS 如果是一个大规模集群,集群可能是小时级别的,但是如果把数据同步到 OTS 上才能做到秒级最多十分钟级别的恢复。然 Storage 相当于 NDK 角色,然后进行数据缓存,然后数据都会存在 Switch 上,还有一份数据是写在 OSS 上面,本地的数据就不会丢失, HDFS 有副本的管理,会简化很多也会更加的弹性。
5、ETL 篇-数据从哪里来
EMR 组件提供 SQOOP、Kafka 作用是把其他数据源的数据导入过来,比如可以是远程的日志服务消费,然后比如数据已经存在于其它的集群或者存储上想把数据拷贝过来,就需要用分布式文件同步工具,对开源里面 DCP 进行了改良,然后有 JindoDistCP 工具主要是进行分布式同步。Apache Spark 里有 Spark Streaming、Delta 实时数仓解决了把一些数据进行实时同步。
6、JindoDistCP
简单易用的分布式文件拷贝工具;
支持 HDFS、OSS 以及其他数据源(S3)之间的数据迁移;
深度结合 OSS 对象存储的特性,实现 No-Rename 拷贝,大大缩短离线数据入湖迁移时间消耗。
开源的 DCP 会有很多限制,比如文件数量越多以后可能 DCP一开始要分片的时候被卡住,提上来以后其实 DCP 并不是很好用的。所以就做 JindoDistCP ,然后解决开源 DCP 对内存的消耗包括里边的长远问题进行优化,开发一种简单易用的分布式文件拷贝工具,主要来帮助一些客户解决 HDFS 和 OSS 还有其他数据源之间整个数据拷贝的功能。DCP 跟 OSS 进行一个深度的整合。
作业里边很多 OSS 对象存储会要大一点。 JindoDistCP 通过内部的设计做到 No-Rename 的拷贝。所以整个数据入湖的时间缩短了非常小。
7、查询分析篇-离线分析、实时查询
达成最核心的使用需求来自于查询分析,也是很多用户或者日常最常使用的功能和组件。
Hive 是 Hadoop 里面最早的 SQL 引擎,Hadoop 最早是 MR、 HDFS+YANG 的战略组合。然后编写 MR 作业对于非计算机出身的同学来说学习起来比较复杂。所以 Hive 是最早的一 SQL 解决方案,把 SQL 语句翻译成 MR 作业,可以在执行 SQL 时快速把集群的计算调度起来进行快速的查询分析。Spark SQL 跟 Hive SQL 基本上兼容,起参数非常的高。
Impala 是Cloudera 开发的 MPP 的SQL 引擎,效率非常高。Presto 是 Facebook 最开始制造的一个项目,后面也成为开源社区。Presto 是 Hive 的进化版本,可以说 Hive、MR 一个阶段一个阶段计算,也是发现速度要分钟级别的发挥,Facebook 内部也进行开发,然后出现 Presto 项目也是基于 IDTV 的架构开发,所以是 Hive 进化的一个版本。因为 Hive 最早,所以 Hive 最大的贡献是它的定义相当于源数据基础,所有的引擎基本都要打通 Hive 的数据需求。
(1)Hive
Hive 通过 HiveServer2 作为用户的终端,可以对接 Map 界面,然后把请求接收过来,内部通过对 SQL 的一个编译、优化、置换,MR 作业进行执行,去查询 EFS 或者数据湖的数据。
执行阶段现在不再是 MI 还不断的发展,后面有 Hive Spark 和 Hive on pid 两种情景, 相当于资源 MR 的性能有很大的优化。
(2)Spark SQL
Spark SQL 是基于 Spark 的原生的 API 上面进行分装,底层可以对接各种数据,通过 DataSource、DataFrame 提供可以兼容 Hive 的产品。
(3)Impala
Impala 主要是 MPP 架构,性能是比较快的,但是受限于内部语言,所有的跟大数据相关的,都通过 DNA 方式去实现的,虽然实现起来公司效益比较高,但是它支持的数据源基本是比较有限的。最开始的是 TAG 很长时间只有 TAG 的格式,后面社区使用 OKR 格式。
(4)Presto
Presto 是 Presto CLI 连接 Coordinator 把用户的消费请求接收过来,分发到 Presto Worker 上进行计算。Presto Worker 自己独占 D 盘,调动使用基本资源。
Hive、Spark 都可以跟集群进行资源对接,但是 Presto、Impala 其实是 worker 自己去管理内存使用,使进程去管理。 Presto 性能比较接近 Impala ,线上大数据分析基本是用 Spark 、Presto 进行比较多的产品。
8、交互篇& Web UI -提升效率,降低使用门槛
交互篇& Web UI, EMR 里提供 Web UI主要是为了提升操作效率,降低使用门槛,早期更多进行 SSH 提交作业、提交查询,在 SSH 窗口里看查询结果,这不是很方便的。
包括查询 Hadoop 资源使用,所以 Hadoop 里面 UI 的交互,主要 HUE、Knox 打通了集群内部所有另外的访问。
(1)HUE
HUE 是大数据里面主要负责做交互查询的产品。HUE 新的用法,
HUE 查询属于 exsocial 点击一下运行,然后把查询返回,比较方便。
(2)Knox
EMR 的页面,提供 HDFS 、YANG 原生页面的导人, Knox 进行实现的功能。
三、EMR 云上特性
1、集群管理篇
EMR 集群管理途径包括以下几个方面,首先服务管理是对 EMR 产品进行可视化集群管理控制,集群监控包括事件消息报警,指标监控,服务状态的基本自动分析,钉钉和短信报警,集中监控和报警。
作业管理 Flow 支持用户做调用,然后通过 DAG 的方式作业在上面提交,申请集群自动声控集群运行 DAG 湖得到常规调度。资源管理是 EMR 通过计算存储分离,可以做到计算资源和存储资源的弹性使用,同时可以按量使用和包月使用方式,进行灵活的选择。
(1)服务管理
服务管理 EMR 里面是 HDFS 配置,通过这修改配置保存分发到集群重启,相对日常的使用有一个可视化的交互,可视化的操作包括配置意识,很方便。
(2)集群监控
集群监控可以看到上面有很多资源统计、服务状态、详情。
(3)作业管理
作业管理可以有各种各样的作业进行编排,让他们有相互的父依赖子依赖 dad 模式串联起来。
(4)资源管理
资源管理, YANG 不太好用,EMR 对复杂操作进行开发YANG 资源通过交互式方式进行配置。
四、功能演示
蓝色标志可以快速创建 EMR 集群,EMR 集群处于包年包月的优惠中,相当于直接购买 ECS 是一样的,零折优惠。
1、创建集群
根据需要选择特定的版本和特定的组件,有六种集群类型。
2、选择硬件的配置
选择是否高可用,高可用会创建两个 Header, Header 做定期的维护或者升级还有集群的一些特殊状况,高可用可以保证所有 Worker 计算不受到影响。
硬件配置根据自己需求选择 Header 类型。
Core 节点带磁盘做存储的节点。
Care 节点可以选择大数据机型,D 系列机型相当于本地盘。
3、集群构完以后的页面
有 Header组,Core 组,进行存储的集群。有版本号,可以快速点进安全组加入在自己的 IP。
(1)EMR 集群管理功能
可以控制所有服务的运行状态,包括服务的启停,配置的修改,配置的管理。
页面包含了 HDFS 组件为例,监控数据有一些常用的 HDFS 数据,还包括组件和数量,控制服务的启动。
查看部署托补。
查询 NameNode 的部署节点,可以看到 Header 1是 Active 节点, Header 2是 Standby 节点,可以快速查看部署情况。
可以看到相关配置,直接进行配置。
比如找一个 replication 改成2,三副本改为两副本,不推荐在本地盘进行操作,本地盘默认三副本保证机型高可用,两副本可能很小概率发生,保存点击自动更新。
状态在历史操作里面,已经在所有节点里面进行执行
刷新所有节点已经执行完成,是一个配置的修改。
可以控制配置的启停,HDFS 都在操作里面,还有服务的重启。
DataNode 作为 Worker 节点,一把重启会造成数据的不可读,所以支持滚动重启的功能,设置180秒预值,集群在存储过程中整个集群可以稳定正常工作。
(2)集群资源管理
YARN 队列里 Capacity Scheduler 通过 XML 去配置的,文件配起来是十分繁琐的。
UI 页面,可以比较容易的 Capacity Scheduler 基本概念,可以快速创建队列。
比较安全的操作。
(3)主机列表
主机列表包含所有主机的信息,数据盘配置、系统盘配置、规格和内存。
(4)访问链接与端口
是 knox 配置,EMR 所有外部 UI 可以通过 knox 形式透出,以前访问集群是通过 SSH 建立一个通信,现在可以通过 knox 作为外部的网官直接点进去,没有安装HBase 、Zeplin,安装之后也会显示。
(5)弹性伸缩
云上最大特点是弹性,线下买了机器没有作业也要用上,云上可以更加弹性灵活的使用机器,做到按量计费。
(6)关联集群
使用 EMR 有很多集群,两个集群互反通过关联集群的功能,打通两个集群之间的访问。
(7)监控大盘
监控大盘是对于节点的监控,集群级别的监控。
主机监控包括总体 CPU 利用率、内存利用率、磁盘利用率和负载流量。
集群出现异常状态,告警与详情里面产生一些相关信息,主机状态里面提供一个主机级别的查看页面。
选一个机器点进去,里面包括机器的信息,还有主机快照功能,对排查问题非常有帮助,集群所有信息都是以快照的形式保存。
以时间为单位查看某一时间点内存没打满的情况,回到时间点看进程。
Presto 进程占据了比较大资源,对于排查问题非常有帮助。
一定时间的统计,把集群 CPU 状态、MM 状态、Traffic 状态、Disk 状态和 Other 状态进行以时间为单位的统计。
服务级别监控,以 HDFS 为例, HDFS 容量、块数量、文件数和操作耗时,也可以看到 HDFS 的储备状态,以时间单位进行切换包括 Heap 是否需要调整看的比较清楚,一个集群 RPC 调用队列打码情况下,集群基本上负载比较高,基本上作业无法进行,指标有助于排查问题。DataNode 包含了所有 DataNode 使用容量、空间、块数量,可以根据块数数量进行调优,对集群进行调整。
(8)数据开发
数据开发里面可以定制各种各样的作业,写好作业通过编辑功能把作业配上去。
可以在 FLOW 里面进行调动。
运行可以设置配置集群,选择长度集群或者选择集群模板运行 doop 图,运行完之后把集群释放掉可以做到按量收费,开销处于可控状态。
调动状态可以是定时任务。
有告警设置。
(9)运维结果
对失败、成功的结果进行查看。
整个查询提交日志进行查看,包括基础信息。
五、课程小结
了解 EMR 架构和使用形态
了解 EMR 内常用组件
了解 EMR 基本操作
了解如何进行问题排查