大数据处理技术ppt讲课稿.docx
- 文档编号:8730997
- 上传时间:2023-05-14
- 格式:DOCX
- 页数:30
- 大小:5.95MB
大数据处理技术ppt讲课稿.docx
《大数据处理技术ppt讲课稿.docx》由会员分享,可在线阅读,更多相关《大数据处理技术ppt讲课稿.docx(30页珍藏版)》请在冰点文库上搜索。
大数据处理技术ppt讲课稿
大数据处理技术ppt讲课稿
科信办刘伟
第一节Mapreduce编程模型:
1.技术背景:
分布式并行计算是大数据(pb)处理的有效方法,编写正确高效的大规模并行分布式程序是计算机工程领域的难题:
分布式并行计算是大数据(pb)处理的有效方法,编写正确高效的大规模并行分布式程序是计算机工程领域的难题。
并行计算的模型、计算任务分发、计算机结果合并、计算节点的通讯、计算节点的负载均衡、计算机节点容错处理、节点文件的管理等方面都要考虑。
谷歌的关于mapreduce论文里这么形容他们遇到的难题:
由于输入的数据量巨大,因此要想在可接受的时间内完成运算,只有将这些计算分布在成百上千的主机上。
如何处理并行计算、如何分发数据、如何处理错误?
所有这些问题综合在一起,需要大量的代码处理,因此也使得原本简单的运算变得难以处理,普通程序员无法进行大数据处理。
为了解决上述复杂的问题,谷歌设计一个新的抽象模型,使用这个抽象模型,普通程序员只要表述他们想要执行的简单运算即可,而不必关心并行计算、容错、数据分布、负载均衡等复杂的细节,这些问题都被封装了,交个了后台程序来处理。
这个模型就是mapreduce。
谷歌2004年公布的mapreduce编程模型,在工业、学术界产生巨大影响,以至于谈大数据必谈mapreduce。
学术界和工业界就此开始了漫漫的追赶之路。
这期间,工业界试图做的事情就是要实现一个能够媲美或者比Googlemapreduce更好的系统,多年的努力下来,Hadoop(开源)脱颖而出,成为外界实现MapReduce计算模型事实上的标准,围绕着Hadoop,已经形成了一个庞大的生态系统
2.mapreduce的概念:
MapReduce是一个编程模型,一个处理和生成超大数据集的算法模型的相关实现。
简单的一句话解释MapReduce就是“任务的分解与结果的汇总”。
MapReduce从它名字上来看就大致可以看出个缘由,两个动词Map和Reduce,“Map(展开)”就是将一个任务分解成为多个任务,“Reduce”就是将分解后多任务处理的结果汇总起来,得出最后的分析结果。
mapreduce成功的最大因素是它简单的编程模型。
程序员只要按照这个框架的要求,设计map和reduce函数,剩下的工作,如分布式存储、节点调度、负载均衡、节点通讯、容错处理和故障恢复都由mapreduce框架(比如hadoop)自动完成,设计的程序有很高的扩展性。
所以,站在计算的两端来看,与我们通常熟悉的串行计算没有任何差别,所有的复杂性都在中间隐藏了。
它让那些没有多少并行计算和分布式处理经验的开发人员也可以开发并行应用,开发人员只需要实现map 和reduce 两个接口函数,即可完成TB级数据的计算,这也就是MapReduce的价值所在,通过简化编程模型,降低了开发并行应用的入门门槛,并行计算就可以得到更广泛的应用。
3.mapreduce的编程模型原理
开发人员用两个函数表达这个计算:
Map和Reduce,首先创建一个Map函数处理一个基于key/valuepair的数据集合,输出中间的基于key/valuepair的数据集合,然后再创建一个Reduce函数用来合并所有的具有相同中间key值的中间value值,就完成了大数据的处理,剩下的工作由计算机集群自动完成。
即:
(input)
一共分为map(分解)shuffle(洗牌)reduce(归并)三个阶段。
map阶段,每个节点调用程序员编写的map函数,作用于每一个在此节点存放的键值对,map函数的输出同样是一些键值对,中间结果进入shuffle阶段,shuffle系统自动完成,程序员无须也无法控制,shuffle阶段会把所有中间结果里的键相同的所有键-值对通过网络传递给同一个目标节点。
在最后的reduce阶段,每个节点会对所有键相同的键值对调用程序员编写的reduce函数,输出最终结果。
reduce函数也可以选择再次输出一些键值对,从而可以启动新一轮的mapreduce过程,如此往复。
示例1:
WordCount
计算一个大的文档集合中每个单词出现的次数,下面是伪代码段:
map(Stringkey,Stringvalue):
//key:
documentname
//value:
documentcontents
foreachwordwinvalue:
EmitIntermediate(w,“1″);
reduce(Stringkey,Iteratorvalues):
//key:
aword
//values:
alistofcounts
intresult=0;
foreachvinvalues:
result+=ParseInt(v);
Emit(AsString(result));
Map函数输出文档中的每个词、以及这个词的出现次数(在这个简单的例子里就是1)。
Reduce函数把Map函数产生的每一个特定的词的计数累加起来。
4.mapreduce工作流程
红线中间部分是shuffle部分,计算机自动完成,但是我们必须理解shuffle做了什么,我们才能正确的理解map的结果和reduce的输入之间的关系。
Map阶段:
数据经过分片化成M个数据集,每个数据集由一个maper节点经过map函数处理成key-value对形式的数据集。
Shuffle阶段:
map输出的结果放在maper节点本地内存缓存区,缓存区先按照key进行分区(如果有R个reducer,hash(key)modR分成R个分区,初步划分,分区是排序的,分区内对key排序(排序后可附加combiner合并操作,减少写磁盘数据量),缓冲区快要溢出时,溢写文件,多个溢写文件合并,合并过程再次排序(排序后可附加combiner合并操作),最后形成一个已经分区的、已经排序(对key的排序)的文件。
Reduce端会把属于本区的数据取(fetch)到内存,进行合并,合并过程再次排序,缓冲区快要溢出时,溢写文件,多个溢写文件合并,合并过程再次排序,合并为更大的排序文件,最终实现reduce输入数据是经过排序(对key的排序)的数据。
其实不管在map端还是reduce端,MapReduce都是反复地执行排序,合并操作,所以说:
排序是mapreduce的灵魂。
Reduce阶段:
最后一次合并的数据总是直接送到Reduce函数那里,Reduce函数会作用在排序输入的每一个key-list(value)上,最后的输出key-value对被直接写到HDFS上(分布式文件系统)。
有R个reduce任务,就会有R个最终结果,很多情况下这R个最终结果并不需要合并成一个最终结果,因为这R个最终结果可以作为另一个计算任务的输入,开始另一个并行计算任务。
这就形成了上面图中多个输出数据片段(HDFS副本)。
5.mapreduce的局限
实验人员发现,一个mapreduce任务的瓶颈往往在中间的shuffle阶段,特别是系统中节点数量多,并发任务多的时候,原因在于:
map和reduce阶段的各节点都是独立工作,有很高的并行性;shuffle阶段各节点需要交互,共享网络带宽。
故而大数据算法的瓶颈在于数据的移动。
为此,在设计mapreduce算法的时候,需要尽可能减少中间结果,在map和reduce阶段每个节点多做一些工作。
但是编程模型的简单,也大大限制了程序员的自由度,很多较复杂的任务难以完成,这是mapreduce的最大的弱点。
此外,还存在如下问题:
1启动开销大,简单任务也要尽力map-shuffle-redcuce三个阶段,无法实时响应,2只能处理静态数据,对于变化快的数据无能为力,3mapreduce的系统实现是谷歌的机密,据说2007年谷歌mapreduce版本比2012年hadoop快一个数量级。
所以突破上述的的三个方面的限制,成为学术界和工业界研究热点,比如有人尝试把rmdb与mapreduce结合起来,解决编程模式简单的局限,谷歌自己有dremel系统可以用于大规模数据分析和查询的实事化,但技术细节没有公布。
Hadoop的mapreduce框架在2013年升级mapreduceV2,yarn。
第二节hdfs
经典漫画讲解HDFS原理
分布式文件系统比较出名的有HDFS 和GFS,其中HDFS比较简单一点。
HDFS和GFS都是专门为对应的MapReduce框架设计的DFS,因此设计上的一些特点也是为了适应MapReduce计算环境的需要。
HDFS设计:
1)运行于商用硬件集群上:
硬件错误是常态而不是异常。
错误检测并快速自动恢复是HDFS的最核心设计目标。
2)流式数据访问。
运行在HDFS上的应用主要是以流式读为主,做批量处理;更注重数据访问的高吞吐量。
3)超大规模数据集。
HDFS的一般企业级的文件大小可能都在TB级别或者PB级别,支持大文件存储,而且提供整体上高的数据传输带宽,一个单一的HDFS实例应该能支撑数以千万计的文件,并且能在一个集群里扩展到数百个节点。
4)简单一致性模型。
HDFS的应用程序一般对文件实行一次写、多次读的访问模式。
5)移动计算比移动数据更简单。
对于大文件来说,移动数据比移动计算的代价要高。
操作海量数据时效果越加明显,这样可以提高系统的吞吐量和减少网络的拥塞。
6)异构软硬平台间的可移植性。
这种特性便于HDFS作为大规模数据应用平台的推广。
1、三个部分:
客户端、nameserver(可理解为主控和文件索引,类似linux的inode)、datanode(存放实际数据)
HDFS集群有两类节点,并以管理者-工作者模式运行,即:
一个namenode(管理者)和多个datanode(工作者)。
namenode管理文件系统的命名空间(管理元数据),他维护着文件系统树以及整棵树内所有的文件和目录,这些信息以两个文件形式永久保存在本地磁盘上:
命名空间镜像文件fsimage和编辑日志文件editlog。
namenode也记录着每个文件中各个块所在的数据节点信息,但他并不永久保存块的位置信息,因为这些信息会在系统启动的时候由数据节点重新建立。
datanode是文件系统的工作节点(存储实际数据),他们根据需要存储并检索数据块,并定期向namenode发送他们所存储的块的列表。
客户端联系NameNode以获取文件的元数据,而真正的文件I/O操作是直接和DataNode进行交互的。
2、如何写数据过程
HDFS系统write操作
一个人对client说:
请帮我写入200M数据好吗?
Clientspeak:
我很荣幸,但你没有忘记什么嘛?
一个人说:
a划分块大小128M(用于存放数据)b复制一个块到三个地方
Clientspeak:
一个合格的client要知道2件事
(1)块大小:
一个大文件存储在若干个块中,每个块通常64Mor128M
(2)多路复用:
一个块要保存到多个地方,通常为3
ClientaskNamenode
第一步client划分一个大文件的块大小,用于存储文件内容
第二步client对Namenode说请帮助我分配一个128M的块(datanode上)并多路复用到3个地方
namenode分配datanode
第一步Namenode需要找到3个datanode
第二步Namenode整理一下3个datanode地址,发送给client
Client开始写数据
第一步 Client发送数据只到第一个datanode节点,当第一个datanode节点接收到数据的同时会同步到第二个datanode节点,第二个也会同步到第三个节点,以此类推直到最后一个节点为止
第二步 一旦所有的数据都写入磁盘后,所有的datanode就向Namenode发送完成信号
第三步 Namenode就会显示块已保存,并且已经复用
第四步 Client会用同样的步骤完成后续数据写入
当写完所有块后
第一步 当写完所有块后,Client就会关闭文件,并告之Namenode停止传输
第二步 Namenode此时就会知道所有的数据信息都保存在磁盘中(Meta是数据块的元信息,保存在namenode的硬盘上。
)
Recap重述
Client 用于划分保存文件的块
Namenode用于提供保存块的datanode节点信息,包括所有的多路复用节点
Datanode 用于保存数据
HDFS的块(64mor128m)比磁盘块大,其目的是为了最小化寻址开销。
太大也不好,MapReduce中的任务通常一次只处理一个block的数据,如果块过大,导致任务数太小,那作业就会分配不均,作业的运行速度就会比较慢。
那对HDFS文件分块有哪些好处呢?
1)一个文件的大小可以大于集群网络中任意一个机器中的磁盘的容量,因为将文件分块,不需要所有的块都分布在一个磁盘上,而是将其打散,尽量均匀的分布在每个机器的磁盘上。
2)使用块抽象而非整个文件作为存储单元,简化了存储子系统的设计。
3)块非常适合用于数据备份进而提供数据容错能力的可用性。
将每个块复制到少数几个独立的机器上(dfs.replication默认是3),可以确保在发生块、磁盘或机器故障后数据不丢失。
如果一个块不可用,系统会从其他地方读取另外的副本,而这个过程对用户来说是透明的,用户也不需要了解这其中的策略。
系统也会及时的将副本不足的块进行slave之间进行复制,从而达到dfs.replication设定的值。
保证副本数恢复到正常的水平。
应用程序可以为常用的文件块设置更多的副本数,分散集群的负载压力。
给出的三个datanode是按与客户端的距离排序的,最近的排前面。
本地当然是最近的,相同机架的其次,其后是不同机架的,距离最远的是分属不同数据中心的server
3、读取数据过程
HDFS 集群read操作
一个人对client说:
请帮我读取相关文件
Clientspeak:
Roger好的知道了!
交互Namenode
Client->Namenode:
请给我关于这个文件的信息(传输filename到Namenode)
Namenode–>Client:
回复存储这个文件所有的块信息给Client,按datanode到Client的距离进行排序,实际上就是知道块存储在哪个datanode上,先从最近的节点读取数据,(Nanenode向client返回每个数据块所在的datanodes列表,client选择最近的服务器下载该数据块,block1……blockn)
例Block1:
atDNx1y1z1
Block2:
atDNx2y2z2
Block3:
atDNx3y3z3
Client:
a.知道有多少个块(关于这个文件)需要下载
b.还知道每个块保存在哪些datanode上
因此Client会依次下载这些块到本地
数据下载流程
Client:
先从最近的datanode节点下载数据,它要跟datanode作一个交互,申请获取相关块信息,datanode返回块数据
可能你会问到,如果datanode硬件损坏啦,没有相关数据啦,数据本身造破坏不能恢复啦,这些不幸的事情时我们有没有好的办法呢,呵呵木要担心下面我们就会讲到故障容错的理念
4、容错:
节点故障,通讯故障,数据损坏。
三种典型故障
1)nodefailure节点故障(namenode服务器 datanode数据节点)节点硬件故障
2)communicationfailure通信故障
不能发送和接收数据,有可能datanode脱离了网络,找不到大家了
3)data corruption数据损坏,两种可能
当数据传输到网络中时损坏
当在磁盘存储时数据损坏
Namenode的单点故障:
所有的文件访问都要通过NameNode来进行,所以NameNode至关重要。
一旦NameNode发生毁坏,则整个系统都不可用。
每个datanode周期性发送心跳信息给namenode。
网络中断可能会导致一批datanode连不上namenode。
namenode检测到一段时间没有上报心跳后(datanode活着,但有网络问题),NN把这个datanode标识为dead,不再分配新的io请求给它。
在这个datanode上的所有数据都不能访问了,这就会导致一些block的备份数量会少于指定的值。
namenode会经常检查block备份数量,发起重新备份。
SecondaryNameNode(次级副手nn)处理流程
(1)、namenode响应Secondarynamenode请求,将editlog推送给Secondarynamenode,开始重新写一个新的editlog。
(2)、Secondarynamenode收到来自namenode的fsimage文件和editlog。
(3)、Secondarynamenode将fsimage加载到内存,应用editlog,并生成一个新的fsimage文件。
(4)、Secondarynamenode将新的fsimage推送给Namenode。
(5)、Namenode用新的fsimage取代旧的fsimage,在fstime文件中记下检查点发生的时 HDFS通信协议
High Availability for the HDFS Namenode:
Active NN – NN that is actively serving the read and write operations from the clients .Standby(备份) NN – this NN waits and becomes active when the Active dies or is unhealthy.
Hot, Warm, Cold failover故障切换。
A standby NN stores a state that is a subset of the runtime state of Active NN.
Cold Standby:
Standby NN has zero state (e.g. it is started after the Active is declared dead.是当ActiveNN已经挂掉后才起来的,它本身没有保存任何数据,这时候并不会减少恢复时间
Warm Standby:
Standby has partial state:
是在ActiveNN挂掉前起来的,其中保存了一部分数据,所以在恢复时只需要恢复没有的数据,减少了恢复时间。
FsImage和EditLog是HDFS的核心数据结构。
这些文件损坏会导致HDFS失效。
namenode可以配置支持多份元数据拷贝。
it has loaded fsImage and editLogs but has not received any block reports
it has loaded fsImage and rolled logs and all block reports.
Hot Standby:
Standby has all most of the Active’s state and start immediately 它里面保存的数据和Active是完成一样的,可以直接热切换到它上面继续服
检测网络故障
1)Client每当向datanode写数据时,datanode都会给一个确认ACK信号,表示接收无误
2)Client没有收到ACK信号,就假设datanode或网络故障
检测数据损坏故障
1)Client给datanode传输信息时,信息包括2部分,checksum校验和、真实数据
2)Datanode即存储数据也存储校验和
由datanode定期发送块报告给namenode,这个块报告列出了所有的块信息。
注释:
Datanode先检查checksum校验和是ok的,才发送块报告,因为块报告不包括坏块信息
举例:
Datanode发送块报告时不包括坏块信息(假如发送4个块),Namenode在和原来“校验和”对比后认为原来应该有5个块,那么说明有一个块损坏了
重述心跳信息和块报告
1)Datanode每3秒钟向Namenode发送心跳信息,表示我还活着
2)datanode在发送块报告的时候会自动跳过坏块信息,只发送好块信息
3)namenode在接收到块报告后与原来的校验和进行对比,总块数-好块数=坏块数
5、容错第二部分:
处理读写故障
1.处理写错误
1)事先声明:
我们写入块的最小数据单位是包(通常64K),记住多路复用流水线
此外datanode要给client端发送接收到包的ACK确认信息,以便确认datanode完全接收到了数据包。
2)如果client端从一些datanode节点上不能获得ACK确认信息,就认为这些datanode已不可用,因此client需要调整多路复用流水线,以跳过这个损坏的datanode节点,但不会影响其他的正常的datanode。
3)在调整多路复用之后,请注意到这个数据包仍将被“underreplicated”(低于预设副本数复制),namenode稍后将会查看损坏的datanode
2.处理读错误
1)当client端询问一个块位置时,namenode将返回client端所有的datanode节点地址(三个副本所在节点的地址)。
2)如果client发现一个datanode不可用了,将会从其他的datanode处获取数据
6、容错第三部分:
处理数据节点故障
1.首先,Namenode保存了2个重要的表
1)块信息表,包含块保存在哪些datanode节点上
2)节点信息表,包含datanode节点保存哪些块
2.再次,Namenode不间断更新这2个表
1)如果namenode在datanode上发现一个坏块,就会更新块信息表,在表里标识坏块在哪个datanode上
2)如果namenode发现datanode节点不可用了,就会更新2个表(块信息表,节点信息表),在2个表中同时标识不可用datanode节点信息
3.under复制
1)Namenode定期扫描第一张表(块表),看看哪些数据块,没有成功备份,这些块叫做“低于预设副本数的块”。
4.块同步
1)对于所有“低于预设副本数的块”,Namenode要求其他datanode从包含副本的datanode中拷贝一个副本。
2)像这样,Namenode对某个Datanode说你能从那个datanode拷贝块吗?
这个Datanode对那个Datanode说我需要从你这里拷贝块,那个说OK没问题给你!
提出一个问题:
所有这些
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据处理 技术 ppt 讲课