《大数据处理技术ppt讲课稿(共24页)》由会员分享,可在线阅读,更多相关《大数据处理技术ppt讲课稿(共24页)(24页珍藏版)》请在金锄头文库上搜索。
1、精选优质文档-倾情为你奉上大数据处理技术ppt讲课稿科信办 刘伟第一节 Mapreduce编程模型:1.技术背景:分布式并行计算是大数据(pb)处理的有效方法,编写正确高效的大规模并行分布式程序是计算机工程领域的难题:分布式并行计算是大数据(pb)处理的有效方法,编写正确高效的大规模并行分布式程序是计算机工程领域的难题。 并行计算的模型、计算任务分发、计算机结果合并、计算节点的通讯、计算节点的负载均衡、计算机节点容错处理、节点文件的管理等方面都要考虑。 谷歌的关于mapreduce论文里这么形容他们遇到的难题:由 于输入的数据量巨大,因此要想在可接受的时间内完成运算,只有将这些计算分布在成百上
2、千的主机上。如何处理并行计算、如何分发数据、如何处理错误?所有这 些问题综合在一起,需要大量的代码处理,因此也使得原本简单的运算变得难以处理,普通程序员无法进行大数据处理。为了解决上述复杂的问题,谷歌设计一个新的抽象模型,使用这个抽象模型,普通程序员只要表述他们想要执行的简单运算即可,而不必关心并行计算、容错、 数据分布、负载均衡等复杂的细节,这些问题都被封装了,交个了后台程序来处理。这个模型就是mapreduce。谷歌2004年公布的mapreduce编程模型,在工业、学术界产生巨大影响,以至于谈大数据必谈mapreduce。学术界和工业界就此开始了漫漫的追赶之路。这期间,工业界试图做的事情
3、就是要实现一个能够媲美或者比Google mapreduce更好的系统,多年的努力下来,Hadoop(开源)脱颖而出,成为外界实现MapReduce计算模型事实上的标准,围绕着Hadoop,已经形成了一个庞大的生态系统2. mapreduce的概念:MapReduce是一个编程模型,一个处理和生成超大数据集的算法模型的相关实现。简单的一句话解释MapReduce就是“任务的分解与结果的汇总”。MapReduce从它名字上来看就大致可以看出个缘由,两个动词Map和Reduce,“Map(展开)”就是将一个任务分解成为多个任 务,“Reduce”就是将分解后多任务处理的结果汇总起来,得出最后的分析
4、结果。mapreduce成功的最大因素是它简单的编程模型。程序员只要按照这个框架的要求,设计map和reduce函数,剩下的工作,如分布式存储、节点调度、负载均衡、节点通讯、容错处理和故障恢复都由mapreduce框架(比如hadoop)自动完成,设计的程序有很高的扩展性。所以,站在计算的两端来看,与我们通常熟悉的串行计算没有任何差别,所有的复杂性都在中间隐藏了。它让那些没有多少并行计算和分布式处理经验的开发人员也可以开发并行应用,开发人员只需要实现map和reduce两个接口函数,即可完成TB级数据的计算,这也就是MapReduce的价值所在,通过简化编程模型,降低了开发并行应用的入门门槛,
5、并行计算就可以得到更广泛的应用。3.mapreduce的编程模型原理开发人员用两个函数表达这个计算:Map和Reduce,首先创建一个Map函数处理一个基于 key/value pair的数据集合,输出中间的基于key/value pair的数据集合,然后再创建一个Reduce函数用来合并所有的具有相同中间key值的中间value值,就完成了大数据的处理,剩下的工作由计算机集群自动完成。即:(input) = map(k1,v1) -list(k2,v2) =combine- =reduce(k2,list(v2) -list(v2)(output)一共分为map(分解) shuffle(洗牌
6、) reduce(归并)三个阶段。map阶段,每个节点调用程序员编写的map函数,作用于每一个在此节点存放的键值对,map函数的输出同样是一些键值对,中间结果进入shuffle阶段,shuffle系统自动完成,程序员无须也无法控制,shuffle阶段会把所有中间结果里的键相同的所有键-值对通过网络传递给同一个目标节点。在最后的reduce阶段,每个节点会对所有键相同的键值对调用程序员编写的reduce函数,输出最终结果。reduce函数也可以选择再次输出一些键值对,从而可以启动新一轮的mapreduce过程,如此往复。示例1:WordCount 计算一个大的文档集合中每个单词出现的次数,下面是
7、伪代码段:map(String key, String value): / key: document name / value: document contents for each word w in value: EmitIntermediate(w, “1);reduce(String key, Iterator values): / key: a word / values: a list of counts int result = 0; for each v in values: result += ParseInt(v); Emit(AsString(result);Map函数
8、输出文档中的每个词、以及这个词的出现次数(在这个简单的例子里就是1)。Reduce函数把Map函数产生的每一个特定的词的计数累加起来。4mapreduce工作流程 红线中间部分是shuffle部分,计算机自动完成,但是我们必须理解shuffle做了什么,我们才能正确的理解map的结果和reduce的输入之间的关系。Map阶段:数据经过分片化成M个数据集,每个数据集由一个maper节点经过map函数处理成key-value对形式的数据集。Shuffle阶段:map输出的结果放在maper节点本地内存缓存区,缓存区先按照key进行分区(如果有R个reducer,hash(key) mod R分成R
9、个分区,初步划分,分区是排序的,分区内对key排序(排序后可附加combiner合并操作,减少写磁盘数据量),缓冲区快要溢出时,溢写文件,多个溢写文件合并,合并过程再次排序(排序后可附加combiner合并操作),最后形成一个已经分区的、已经排序(对key的排序)的文件。Reduce端会把属于本区的数据取(fetch)到内存,进行合并,合并过程再次排序,缓冲区快要溢出时,溢写文件,多个溢写文件合并,合并过程再次排序,合并为更大的排序文件,最终实现reduce输入数据是经过排序(对key的排序)的数据。其实不管在map端还是reduce端,MapReduce都是反复地执行排序,合并操作,所以说:
10、排序是mapreduce的灵魂。Reduce阶段:最后一次合并的数据总是直接送到Reduce 函数那里,Reduce 函数会作用在排序输入的每一个key-list(value)上,最后的输出key-value对被直接写到HDFS上(分布式文件系统)。有R个reduce任务,就会有R个最终结果,很多情况下这R个最终结果并不需要合并成一个最终结果,因为这R个最终结果可以作为另一个计算任务的输入,开始另一个并行计算任务。这就形成了上面图中多个输出数据片段(HDFS副本)。5.mapreduce的局限实验人员发现,一个mapreduce任务的瓶颈往往在中间的shuffle阶段,特别是系统中节点数量多,
11、并发任务多的时候,原因在于:map和reduce阶段的各节点都是独立工作,有很高的并行性;shuffle阶段各节点需要交互,共享网络带宽。故而大数据算法的瓶颈在于数据的移动。为此,在设计mapreduce算法的时候,需要尽可能减少中间结果,在map和reduce阶段每个节点多做一些工作。但是编程模型的简单,也大大限制了程序员的自由度,很多较复杂的任务难以完成,这是mapreduce的最大的弱点。此外,还存在如下问题:1启动开销大,简单任务也要尽力map-shuffle-redcuce三个阶段,无法实时响应,2只能处理静态数据,对于变化快的数据无能为力,3mapreduce的系统实现是谷歌的机密
12、,据说2007年谷歌mapreduce版本比2012年hadoop快一个数量级。所以突破上述的的三个方面的限制,成为学术界和工业界研究热点,比如有人尝试把rmdb与mapreduce结合起来,解决编程模式简单的局限,谷歌自己有dremel系统可以用于大规模数据分析和查询的实事化,但技术细节没有公布。Hadoop的mapreduce框架在2013年升级mapreduceV2,yarn。第二节 hdfs分布式文件系统比较出名的有HDFS 和 GFS,其中HDFS比较简单一点。HDFS和GFS都是专门为对应的MapReduce框架设计的DFS,因此设计上的一些特点也是为了适应MapReduce计算环
13、境的需要。HDFS设计:)运行于商用硬件集群上:硬件错误是常态而不是异常。错误检测并快速自动恢复是HDFS的最核心设计目标。)流式数据访问。运行在HDFS上的应用主要是以流式读为主,做批量处理;更注重数据访问的高吞吐量。)超大规模数据集。HDFS的一般企业级的文件大小可能都在TB级别或者PB级别,支持大文件存储,而且提供整体上高的数据传输带宽,一个单一的HDFS实例应该能支撑数以千万计的文件,并且能在一个集群里扩展到数百个节点。)简单一致性模型。HDFS的应用程序一般对文件实行一次写、多次读的访问模式。)移动计算比移动数据更简单。对于大文件来说,移动数据比移动计算的代价要高。操作海量数据时效果
14、越加明显,这样可以提高系统的吞吐量和减少网络的拥塞。)异构软硬平台间的可移植性。这种特性便于HDFS作为大规模数据应用平台的推广。1、三个部分: 客户端、nameserver(可理解为主控和文件索引,类似linux的inode)、datanode(存放实际数据)HDFS集群有两类节点,并以管理者-工作者模式运行,即:一个namenode(管理者)和多个datanode(工作者)。namenode管理文件系统的命名空间(管理元数据),他维护着文件系统树以及整棵树内所有的文件和目录,这些信息以两个文件形式永久保存在本地磁盘上:命名空间镜像文件fsimage和编辑日志文件editlog。nameno
15、de也记录着每个文件中各个块所在的数据节点信息,但他并不永久保存块的位置信息,因为这些信息会在系统启动的时候由数据节点重新建立。datanode是文件系统的工作节点(存储实际数据),他们根据需要存储并检索数据块,并定期向namenode发送他们所存储的块的列表。客户端联系NameNode以获取文件的元数据,而真正的文件I/O操作是直接和DataNode进行交互的。2、如何写数据过程HDFS系统write操作一个人对client说:请帮我写入200M数据好吗?Client speak:我很荣幸,但你没有忘记什么嘛?一个人说:a划分块大小128M(用于存放数据) b复制一个块到三个地方Client speak:一个合格的client要知道2件事(1)块大小:一个大文件存储在若干个块中,每个块通常64M or 128 M(2)多路复用:一个块要保存到多个地方,通常为3Client ask Namenode第一步 client划分一个大文件的块大小,用于存储文件内容第二步 client对Namenode说请帮助我分配一个128M的块(datanode上)并多路复用到3个地方namenode分配datanode第一步 Namen