开发者学堂课程【企业运维训练营之大数据 EMR 原理与实践:视频-《E-MapReduce 组件介绍》】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/1242/detail/18443
视频-《E-MapReduce 组件介绍》
内容介绍
一、温故知新
二、本讲
一、温故知新
同学们对于大数据的发展史以及EMR集群整体的架构基础功能进行了相关分享,不知道是不是还有印象。
大家对于独特历史,比如知名度比较高的Hive的出仓,可能现在有一定的了解。上次跟大家一起学习且总结了一下,大家看看上周学习的怎么样,检测一下学习的成果。
一共总结了五个部分,第一部分是大数据的发展史,简单的做一个总结,就是从Google的论文,Google三篇论文的提出以及nash搜索引擎的实现,会从my Produce的计算框架到Circle转换到My preduce程序的数仓的组件Have或者是PK,在此之后也会有纯内存计算的,比如Spark或者一种机器分析或者实施分析查询的计算引擎,比如出仓做一些批处理,从批处理到流处理以及到流批一体的新秀的Flink。再到本讲的主角EMR,可以说是一个层层递进高速发展的趋势。
第二部分讲到了EMR的产品架构,这块涉及的比较多,EMR的产品架构大概会分成五个部分。
第一部分是批处理,批处理主要是两个,一个变数仓的组件,一个是Have,一个是PK以及Spark,实现了一个比较常用的或者是解释性比较好的一个C口到一个My preduce或者是一个底层计算框架的一个转换,可以用C口去做一个分布式的计算。
第二块是流处理,流处理有三个比较主要的组件,大家应该都还有印象,第一个是Storm,第二个是spark streaming,第三个是Flink,Flink跟Storm的一个区别是第二部分。
第三部分是偏分析的ad hoc的一个用来做交互式分析的一个查询。逐渐就会涉及到click house、crystal这种比较常见的就是业务人员比如说在一个宽表上去进行一个多维度,进行一个指标的计算以及一些相关的业务分析。
第四部分是一个事务型的在线服务引擎,像h base。
第五部分是本讲主角EMR,这块主要讲到了他跟开源Hadoop生态就是Hadoop全家桶的一个对比,分成几部分,首先在成本、性能易用性、弹性、安全性、可靠性以及售后的服务支持等方面都有明显的不同和优势,第三部分是EMR中的一些基础概念,会涉及到基础地狱,我的这个集群部署在哪个地域,可能趋势是什么样的,网络、交换机,可能还会涉及到一些CPU的数量、存储的一个大小、他的安全组、整体集群、它是一个付费类型、节点的类型以及集群的类型。
第四部分是运维,EMR运维就是集群运维的功能,会涉及到哪几部分呢,主要涉及到了集群的查看,我们要上到集群上去查看,比如所有的节点的资源的情况,资源的情况可能还会根据业务涉及到一些伸缩,还有比如说用户管理、监控告警、日志分析。
第五块是EMR开发的功能,这一部分主要是与另一款data works的一个深度集成就是官网上所提到的这种Artwork的一个方案,他的旨在帮助我们在一个可视化的UI界面上进行高效的一个代码开发,以及一些相关的调度或者监控告警的一个配置,会在第四部分同学们做一个比较详细的分享,整体上一讲有这五个部分,大家对EMR有一个整体的了解以后那其实我们就言归正传了,这次直播的正传那本次的话其实为大家讲解的就是EMR产品中,基于我们非常常见的一个离线数据分析的一个场景,那在使用过程中会高度依赖的一系列组件的相关介绍。
二、本讲
本次的训练营包括如下几个组件的讲解。这个是本讲的一个目录。大家可以看到列出了七个。
这个PPT也是刚打开,大家可能也会有所预习,屏幕上的这些可能同学们会在平时的工作或者学习当中或多或少的都对这个上面的词,或者说对阿帕奇或者是阿帕奇下面哈顿都有一些了解,那我们就本次就是一起来看一下这些组件,然后在离线分析场景中所使用到的功能和他们的特点,这七个部分,其实可以再进行一个比较细的划分,那其实可以分成两部分,前五部分其实是一个开源的组件,然后后两部分的话其实是我们云上的一个组件。可以根据这个特点,把他们画成两部分。
首先按照顺序来说,开源组件的这一部分为大家带来的主要就是离线大数据分析的这个场景中目前在业界或者是使用的比较多比较普遍或者比较典型的五个组件,这块首先会从基础开始说,做计算肯定有数据,HDFS其实就是一个大数据的一个分布式存储系统,有了存储之后会介绍have ,have是嫁在HDFS上的一个数仓。他跟pic其实是做了一个非常伟大的一个工程,那就是把C口转化成一个分布式计算的框架,在分布式计算框架上去进行计算。
第三部分的话其实是WUI的提供的一个组件,它其实提供了一个可视化的界面去提交CPU任务或则类似于Spark任务,同时他也可以做数据分析。
第四部分基于数据分析为主,它的通用性比较强,相对于汉语来说他会相对因为它基因内存计算会快一点的一个Spark以及支持这个联邦机器查询的分布式的MPP架构的一个计算引擎Crystal。
自然这一块其实我们带来了两个自然组件的介绍,首先就是jinndoFS这个其实在上一讲中,最后同学有提问,就是他和这个OSS hdfs的关系。这部分因为我们的班主任,后来也有过相关的反馈,这一次临时加了一节来做一个简单的介绍这块。最后一块就是刚才我也在就是介绍了上一讲也会提到的一个就是my aunt works的这么一个深度的集成。
1、HDFS
整体就是这七个部分,现在就是按流程进入这个咱们整体讲解的一个环节,首先就是HDFS。大家不管在介绍什么东西的时候都会先从按照一个逻辑从底层往上曾去说,HDFS就相当于海陆生态一个比较重要的一个底座,它处于一个比较底层的位置,对于大数据领域来说,底座优先说到的肯定就是数据的存储。就是这个叫re dis tribute system的这么一个HDFS的一个H加法就是它的一个简称,可以看到它的起源,我们也在上一讲中有所提到,谷歌在零四年的论文google file system的一个工程化的实现。HDFS主要解决就是它的功能,它主要解决了海量的数据的分布式存储、管理以及来自上层,比如说计算引擎或者是程序对于数据或者文件的一个读写请求的应答。这块主要是他的起源和功能。作为大数据领域里边分布式计算的重要的底座,那同学们可能会有些疑问就是HDFS相比于传统的这种小型机的存储它有什么好处,HDFS有什么功能特点。
这个时候可能会比较常问的一个问题,从这两个问题入手,进行一个简单的介绍,首先的就是分布式意味着它有一个很好的扩展性,那对于传统的比如说led的这种。如果对比数据库来说呢,就像Oracle或者像地铺的那种小熊机或者说我们普遍教的这种刀片机来说的话,它的磁盘就相对于这种小型机的一个磁盘扩展来说,HDFS只需要横向的扩展节点即可,在一个数据量比较就体量比较大的一个情况下,这个其实它就意味着一个低成本,这个低成本其实可能同学们有些就是无法理解他这个是一个怎么说法呢,那他其实是这样的,就是因为如果只有一台机器,数据量小的时候我去对这个服务器或者说我们所说的这个节点去做一个把叉的一个挂载磁盘就很方便也很便宜,但数据量大了,这个单一机器的资源扩展的费用是陡增的,它是非常不划算的。同时我们看到这个特点的第一行还有一个高可用的HDFS的一个多节点,他一个方便的扩展的这么一个特点,同时它在多点上也会有冗余存储的一个策略,他其实保证了我们数据的高可用。比如说我截某个节点因为一些不可抗力导致了数据的丢失,其他节点上还有同样的一份数据做复制,同时对外提供读写请求那这块其实就是它的高可用。
同时作为一个比较成熟的分布式文件系统,HDFS对外提供了种类Shell的命令来去做文件的管理。类似于常使用的Linux,Linux在文件系统里,我们可能会做一些类似于Mac dll创建一个文件夹,或者是Copy这种CPMV命令,那它其实也是跟这个非常类似的。这种的话就会让我们非常方便理解快速上手,同时就是针对于主流的一些编程语言,比如说Java,那他其实也提供了一个丰富的非常丰富的一个API来完成了我们日常的读写以及对数据或者文件的一个管理的需求。读写以及对文件数据管理的一个需求,其实对于多数同学来说以及就是本次设定的这个离线分析的这么一个场景下,这个部分就是第二的这个部分。
他其实应该是一个使用最为常见和频繁的一个部分,所以这部分的话,一会儿我们会在EMR的一个测试环境中做一个展示这块儿的话,其实我们可以简单的理解为就像右边这个图一样,我们不管是通过shell命令还是说通过Java的一段代码,其实他都是创建了一个Client。这个Client通过HTTP请求的方式去请求HDFS的集群。这个Client会根据给他输入的指令先去跟HDFS集群的老大,也就是它的name node,这个负责元数据管理的节点去进行交互,在这个过程中首先要进行健全,健全之后会返回能不能创建文件夹能不能读取文件夹,如果能读取能创建你要去哪里读取文件,我们获得到他反馈的信息之后,如果是读取或者是写入文件,那么我们还会跟右边的DataNote去做一个交互,去在订餐app中或者是存储或者是读取文件。
可能有的同学会说,像这种比较好用的文件存储系统,那我们就是说Shell的就是说Linux的就是说这种Java的就是我们所说的这种黑屏加变成代码的一个模式,而我呢就是比如说我是一个比较偏业务分析的工作,那我有没有一个可视化的白屏界面,可以通过拖拉拽的方式,然后去做,比如说我要做我比如说我是人力数据,或者说我是财务数据对数据或者文件,通过这个可视化的百分界面去做一些文件夹的创建做一些数据的归档,那其实肯定是可以的,这我们一会儿也会去跟大家一起看一下它的一个白天界面是什么样的。第四点就是文件的权限管理,这昨天也有同学去问整个EMR集群的数据安全相关的问题,这块儿的话,其实,HDFS作为其中的一个组件,它其实也是考很好的考虑到了这个数据安全的问题。
这部分其实HDFS提供了两种方案,第一个是类似Linux,这种优质的user group以及Other的权限体系,是这样的就是比较基础的这种map reduce的程序,那我们比如说通过Java去实现一个简单的Word会把Java编译好后的一个大包通过一个命令的方式在不管是在或者是通过其他方式跑起来,那这个大包在做的时候就是在进行计算的时候,它会将大包从他的主节点发送到他的一个数据节点上,它的原则是尽量让计算向数据靠拢,因为移动一个炸包就是几十兆,用更新版本的一些功能,或者说我们发现新版本的功能上有一些医术,我们需要去对这些问题去进行一个bug的时候,我们可能也会涉及一些这种组件的更新,这个滚动更新和升级其实可以保证整个HDFS的服务,对于外界的服务是不会断的,它整体对于外界来说是无感的。那我们就简单的来看一下,简单的创建一个集群,然后这个集群到服务里边也是有HDFS的,然后我们刚才所提到的这种类似Shell或者是比如说Java的一些代码去达到一些上传数据或者是归档数据操作文件夹的一个方式,我们一会儿都来看一下这块儿我们先来看一下这一页PPT。
首先就是HDFS刚才提到的两个基础操作,那我们就在这边做了一个图片的展示,基于少这端的面料就是这种HDFSDFS。如果是创建文件夹是Maker,如果复制是CP,第二种的话对应我们右边的这一侧它就是一个java SDK去操作,做相同的操作跟生命是一样的,先从本地做集群的登录,可以看到集群上有HDF4服务的部署的,我们这边去做一个集成的登录,登录到集群的header节点上,可以看到这边就是已经登录到EMR节点上了,然后我们看一下,现在他的这个基础上的服务是比较多的,现在他那弄的就是我们HDFS的一个主节点是在这上的那我们来看一下EMR其实跟我们的内容是一样的,我们可以看一下现在的这个文件系统根目录下都有哪些文件夹,我之前也是做了一些就是这个分享的准备,所以有一些文件夹不是系统直接创建的是我创建的,比如说这个Monday2、Monday3、培训这个还有我的名字,这种孙玉峰的这种文件夹都是后面我再创建的,像TMPR或者是这种flow agent创建的m mo gen flow都是创建好的。其实可以做一个创建,先创建一个叫Tuesday的一个文件夹,用来放数据,简单的伪造一点数据,保存一下,做一个上传。我们会用put命令,把本地的一个文件上传到我们HDFS集群中,然后用他高可用的一个就是冗余存储的方式高可用的一个对外提供服务的方式,去把数据做一个存储我们就放到刚才这个下面。可以看到这个现在下面已经有了一个数据。
我们这边再就是看完这种Shell的方式,我们再看一下这个Java类的我这边也是简单的写了一个就是我们测试的一个脚本这边用g unit做了文件系统的文件系统创建和关闭,中间做了一个创建目录的操作,然后这边其实也是改一下,比如说我创建一个Monday4的一个目录,可以通过这种方式去把它提交到集群上了。这边显示就是已经执行完了,那我们利用这个Shell这边再做一下验证。这个是刚才的情况,可以看到现在的情况相比刚才是多了一个目录。
其实在这个下面创建了一个file system的一个对象,我们其实还是可以做其他的一些事的,比如说list files,他这个提供了很多的方式,可以去调用这些方式来达到对于文件操作系统的使用的目的,这边的话就暂时先用这个来简单的演示一下。
时间关系,刚才提到了一个白屏工具,其实这块,我也是就是一开始就直接打开了,可以看到在这里边是由HDFS的一个路径的在这创建或者是上传或下载数据。
这个界面就是刚才所说白屏的界面,我们的目录文件夹都在这儿,然后我们可以去做一些上传下载和更改文件。当我们将一个数据存储在HDFS之后,我们的最终目的是使用,比如说上传的一些数据或者是里边已经存在的一些数据,然后据业务需求,基于这些数据去进行相关的一个指标的计算,然后在相应的维度下得到一些业务的指标或者结果。现在这种存储的方式,虽然可视化程度很好,可扩展很可靠,但是我们怎么用。我们最终目的还是要把它用起来,那么我们能用传统的数据库的Soho来计算吗,其实大家在上一讲中也有过一些了解。