资源描述
#,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,10/1/2024,云计算与大数据技术,人民邮电出版社,王鹏 黄焱 安俊秀 张逸琴 编著,目,录,录,第1章,云,云,计,计算与,大,大数据,基,基础,第2章,云,云,计,计算与,大,大数据,的,的相关,技,技术,第3章,虚,虚,拟,拟化技,术,术,第4章,集,集,群,群系统,基,基础,第5章MPI,面,面向计,算,算,第6章Hadoop,分,分布式,大,大数据,系,系统,第7章HPCC,面向,数,数据的,高,高性能,计,计算集,群,群系统,第8章Storm基,于,于拓扑,的,的流数,据,据实时,计,计算系,统,统,第9章,服,服,务,务器与,数,数据中,心,心,第10,章,章,云,云计算,大,大数据,仿,仿真技,术,术,CONTENTS,第6章Hadoop,分,分布式,大,大数据,系,系统,第6章Hadoop分布式,大,大数据,系,系统,云计,算,算与大,数,数据技,术,术,第6章Hadoop分,布,布式大,数,数据系,统,统,6.1Hadoop概述,6.2HDFS,6.2,.,.1HDFS文件,系,系统的,原,原型GFS,6.2,.,.2HDFS文件,的,的基本,结,结构,6.2,.,.3HDFS的存,储,储过程,6.3MapReduce编程,框,框架,6.3,.,.1MapReduce,的,的发展,历,历史,6.3,.,.2MapReduce,的,的基本,工,工作过,程,程,6.3,.,.3LISP中的MapReduce,6.3,.,.4MapReduce,的,的特点,6.4,实,实现Map,/,/Reduce的C,语,语言实,例,例,6.5,建,建立Hadoop,开,开发环,境,境,6.5,.,.1,相,相关准,备,备工作,6.5,.,.2JDK的安,装,装配置,6.5,.,.3,下,下载、,解,解压Hadoop,,配,配置Hadoop环,境,境变量,6.5,.,.4,修,修改Hadoop配,置,置文件,6.5,.,.5,将,将配置,好,好的Hadoop文,件,件复制,到,到其他,节,节点,6.5,.,.6,启,启动、,停,停止Hadoop,6.5,.,.7,在,在Hadoop系统,上,上运行,测,测试程,序,序WordCount,Hadoop是由Apache软,件,件基金,会,会研发,的,的一种,开,开源、,高,高可靠,、,、伸缩,性,性强的分布式,计,计算系,统,统,主要,用,用于对大于1TB的海量,数,数据的,处,处理。,Hadoop,采,采用Java语言,开,开发,是对Google,的,的MapReduce核心,技,技术的,开,开源实,现,现。,目前Hadoop的核心模,块,块包括系统HDFS(Hadoop Distributed FileSystem,Hadoop分,布,布式文,件,件系统,),)和分布式,计,计算框,架,架MapReduce,这一,结,结构实,现,现了计算和,存,存储的,高,高度耦,合,合,十分,有,有利于面向数,据,据的系统,架,架构,,因,因此已,成,成为大,数,数据技,术,术领域,的,的事实,标,标准。,Hadoop,设,设计时,有,有以下,的,的几点,假,假设:,服务器,失,失效是,正,正常的,;,;,存储和,处,处理的,数,数据是,海,海量的,;,;,文件不,会,会被频,繁,繁写入,和,和修改,;,;,机柜内,的,的数据,传,传输速,度,度大于,机,机柜间,的,的数据,传,传输速,度,度;,海量数,据,据的情,况,况下移,动,动计算,比,比移动,数,数据更,高,高效。,6.1Hadoop概述,Hadoop,是,是Apache开源,组,组织的,分,分布式,计,计算系,统,统,其,分,分为第,一,一代Hadoop和,第,第二代Hadoop,。,。,第一代Hadoop,包,包含0,.,.20,.,.x、0.21.x,、,、0.22.x三个,版,版本,0.20.x,最,最后演,化,化成了1.0,.,.x版,本,本,第,二,二代Hadoop包,含,含0.23.x和2,.,.x两,个,个版本,,,,2.x本版,比,比0.23.x版本,增,增加了NameNodeHA和Wire-compatibility,两,两个特,性,性,版,本,本发展,如,如图6,.,.1所,示,示。,图6.1Hadoop本,版,版发展,路,路线,6.1Hadoop概述,Hadoop,与,与MPI在数,据,据处理,上,上的差异主要体,现,现在数,据,据存储,与,与数据,处,处理在,系,系统中,位,位置不,同,同,MPI是,计,计算与,存,存储分,离,离,Hadoop是,计,计算向,存,存储迁,移,移,如,图,图6.2所示,。,。,图6.2Hadoop与MPI,在,在数据,处,处理上,的,的差异,6.1Hadoop概述,在MPI中数,据,据存储,的,的节点,和,和数据,处,处理的,节,节点往,往,往是不,同,同的,,一,一般在,每,每次计,算,算开始,时,时MPI需要,从,从数据,存,存储节,点,点读取,需,需要处,理,理的数,据,据分配,给,给各个,计,计算节,点,点对数,据,据进行,处,处理,,因,因此MPI中,数,数据存,储,储和数,据,据处理,是,是分离,的,的。,对于计,算,算密集,型,型的应,用,用MPI能表,现,现出良,好,好的性,能,能,但,对,对于处,理,理TB,级,级数据,的,的数据,密,密集型,应,应用由,于,于网络,数,数据传,输,输速度,很,很慢,MPI,的,的性能,会,会大大,降,降低,,甚,甚至会,到,到不可,忍,忍受的,地,地步,,所,所以对,于,于构建,在,在MPI上的,并,并行计,算,算系统,网,网络通,讯,讯速度,一,一直是,一,一个重,要,要的性,能,能指标,,,,用“,计,计算换,通,通信”,也,也是MPI并,行,行程序,设,设计中,的,的基本,原,原则。,6.1Hadoop概述,在Hadoop中由,于,于有HDFS,文,文件系,统,统的支,持,持,数,据,据是分,布,布式存,储,储在各,个,个节点,的,的,计,算,算时各,节,节点读,取,取存储,在,在自己,节,节点的,数,数据进,行,行处理,,,,从而,避,避免了,大,大量数,据,据在网,络,络上的,传,传递,,实,实现“,计,计算向,存,存储的,迁,迁移”,。,。,6.2HDFS,Hadoop,系,系统实,现,现对大,数,数据的,自,自动并,行,行处理,,,,是一,种,种数据,并,并行方,法,法,这,种,种方法,实,实现自,动,动并行,处,处理时,需,需要对,数,数据进,行,行划分,,,,而对,数,数据的,划,划分在Hadoop,系,系统中,从,从数据,的,的存储,就,就开始,了,了,因,此,此文件,系,系统是Hadoop,系,系统的,重,重要组,成,成部分,,,,也是Hadoop,实,实现自,动,动并行,框,框架的,基,基础。Hadoop,的,的文件,系,系统称,为,为HDFS(HadoopDistributedFileSystem,),)。,6.2,.,.1HDFS文件,系,系统的,原,原型GFS,Hadoop,中,中的HDFS,原,原型来,自,自Google,文,文件,系,系统(Google FileSystem,GFS),为,了,了满足Google,迅,迅速增,长,长的数,据,据处理,要,要求,Google,设,设计并,实,实现了GFS,。,。,Google,文,文件系,统,统是一,个,个可扩,展,展的分,布,布式文,件,件系统,,,,用于,对,对大量,数,数据进,行,行访问,的,的大型,、,、分布,式,式应用,。,。,它运行,于,于廉价,的,的普通,硬,硬件上,,,,但可,以,以提供,容,容错功,能,能。它,可,可以给,大,大量的,用,用户提,供,供总体,性,性能较,高,高的服,务,务,也,可,可以提,供,供容错,功,功能。,我们认,为,为GFS是一,种,种面向,不,不可信,服,服务器,节,节点而,设,设计的,文,文件系,统,统。,谷歌“,三,三宝”是“Google,文,文件系,统,统”、“BigTable大,表,表”、“MapReduce,算,算法”,有,了,了自己,的,的文件,系,系统,,谷,谷歌就,可,可以有,效,效地组,织,织庞大,的,的数据,、,、服务,器,器和存,储,储,并,用,用它们,工,工作。,作,作为谷,歌,歌“三,宝,宝”的,其,其中之,一,一,GFS的,技,技术优,势,势不言,而,而喻。,6.2,.,.1HDFS文件,系,系统的,原,原型GFS,GFS,为,为分布,式,式结构,,,,它是,一,一个高度容,错,错网络,文,文件系,统,统,主要,由,由一个Master,(,(主),和,和众多chunkserver(,大,大块设,备,备)构,成,成的,,体,体系结,构,构如图6.3,所,所示。,图6.3GFS的,体,体系结,构,构,6.2,.,.1HDFS文件,系,系统的,原,原型GFS,下面简,单,单描述,一,一下GFS,的,的工作,过,过程。,(1),客,客户端,使,使用固,定,定大小,的,的块将,应,应用程,序,序指定,的,的文件,名,名和字,节,节偏移,转,转换成,文,文件的,一,一个块,索,索引,,向,向Master发送,包,包含文,件,件名和,块,块索引,的,的请求,。,。,(2)Master,收,收到客,户,户端发,来,来的请,求,求,Master向,块,块服务,器,器发出,指,指示,,同,同时时,刻,刻监控,众,众多chunkserver的状,态,态。chunkserver缓存Master,从,从客户,端,端收到,的,的文件,名,名和块,索,索引等,信,信息。,6.2,.,.1HDFS文件,系,系统的,原,原型GFS,(3)Master,通,通过和chunkserver的,交,交互,,向,向客户,端,端发送chunk-handle,和,和副本,位,位置。,其,其中文,件,件被分,成,成若干,个,个块,,而,而每个,块,块都是,由,由一个,不,不变的,、,、全局,惟,惟一的64位,的,的chunk,-,-handle标识,。,。Handle是由Master,在,在块创,建,建时分,配,配的。,而,而出于,安,安全性,考,考虑,,每,每一个,文,文件块,都,都要被,复,复制到,多,多个chunkserver上,,一,一般默,认,认3个,副,副本。,(4),客,客户端,向,向其中,的,的一个,副,副本发,出,出请求,,,,请求,指,指定了chunkhandle,(,(chunkserver,以,以chunkhandle标识chunk),和,和块内,的,的一个,字,字节区,间,间。,(5),客,客户端,从,从chunkserver,获,获得块,数,数据,,任,任务完,成,成。,6.2,.,.1HDFS文件,系,系统的,原,原型GFS,通常Client可,以,以在一,个,个请求,中,中询问,多,多个chunk的地,址,址,而Master,也,也可以,很,很快回,应,应这些,请,请求。,GFS,是,是可以,被,被多个,用,用户同,时,时访问,的,的,一,般,般情况,下,下,Application和chunkserver是可,以,以在同,一,一台机,子,子上的,,,,主要,的,的数据,流,流量是,通,通过Application和chunkserver之间,,,,数据,访,访问的,本,本地性,极,极大地,减,减少了Application与Master,之,之间的,交,交互访,问,问,减,少,少了Master的,负,负荷量,,,,提高,了,了文件,系,系统的,性,性能。,6.2,.,.1HDFS文件,系,系统的,原,原型GFS,客户端,从,从来不,会,会从Master读,和,和写文,件,件数据,。,。客户,端,端只是,询,询问Master它,应,应该和,哪,哪个chunkserver联,系,系。Client在,一,一段限,定,定的时,间,间内将,这,这些信,息,息缓存,,,,在后,续,续的操,作,作中客,户,户端直,接,接和chunkserver交互,。,。由于Master,对,对于读,和,和写的,操,操作极,少,少,所,以,以极大,地,地减小,了,了Master的工,作,作负荷,,,,真正,提,提高了Master,的,的利用,性,性能。,Master,保,保存着,三,三类元,数,数据(metadata),:,:文件,名,名和块,的,的名字,空,空间、,从,从文件,到,到块的,映,映射、,副,副本位,置,置。所,有,有的metadata都放,在,在内存,中,中。操,作,作日志,的,的引入,可,可以更,简,简单、,更,更可靠,地,地更新Master,的,的信息,。,。,6.2,.,.1HDFS文件,系,系统的,原,原型GFS,为GFS的控,制,制和神,经,经系统,,,,副本,为,为Master的备,份,份,Chunk主要,用,用来和,用,用户交,换,换数据,。,。网络,中,中的主,机,机瘫痪,,,,不会,对,对整个,系,系统造,成,成大的,影,影响,,替,替换上,去,去的主,机,机会自,动,动重建,数,数据。,即,即使Master瘫,痪,痪,也,会,会有Shadow作,为,为替补,,,,并且Shadow,在,在一定,时,时候也,会,会充当Master,来,来提供,控,控制和,数,数据交,换,换。Google每,天,天有大,量,量的硬,盘,盘损坏,,,,但是,由,由于有GFS,,,,这些,硬,硬盘的,损,损坏是,允,允许的,。,。,有人形,象,象地比,喻,喻:分,布,布式的,文,文件系,统,统被分,块,块为很,多,多细胞,单,单元,,一,一旦细,胞,胞损坏,,,,神经,系,系统(Master,),)会迅,速,速发现,并,并有相,应,应的冗,余,余措施,来,来使系,统,统正常,运,运行,,这,这些细,胞,胞可以,看,看作很,多,多GFS主机,。,。这一,工,工作方,式,式就是,人,人类大,脑,脑的工,作,作方式,。,。,6.2,.,.1HDFS文件,系,系统的,原,原型GFS,当然,作为Google的,技,技术基,石,石,GFS可以给,大,大量的,用,用户提,供,供总体,性,性能较,高,高的服,务,务,具有以,下,下优势:,(1)Google,采,采用的,存,存储方,法,法是大,量,量、分,散,散的普,通,通廉价,服,服务器,的,的存储,方,方式,,极,极大降,低,低了成,本,本。,(2),对,对大文,件,件数据,快,快速存,取,取,这,个,个毫无,疑,疑问是,可,可以达,到,到的。,(3),容,容易扩,展,展,它,是,是成本,很,很低的,普,普通电,脑,脑,支,持,持动态,插,插入节,点,点;,(4),容,容错能,力,力强,,它,它的数,据,据同时,会,会在多,个,个chunkserver,上,上进行,备,备份,,具,具有相,当,当强的,容,容错性,;,;,(5),高,高效访,问,问,它,是,是通过Bigtable,来,来实现,的,的,它,是,是Google FileSystem上层,的,的结构,。,。GFS在实,现,现分布,式,式文件,系,系统的,做,做法上,面,面很多,都,都是简,单,单的,,但,但是确,实,实非常,高,高效。,(6)GFS,相,相对于HDFS稳定,性,性是无,庸,庸置疑,的,的,并,在,在Google系统,中,中得到,了,了采用,且,且稳定,的,的运行,。,。,6.2,.,.2HDFS文件,的,的基本,结,结构,HDFS是一,种,种典型的主从式,的,的分布,式,式文件,系,系统,该文,件,件系统,完,完全是,仿,仿照Google的GFS,文,文件系,统,统而设,计,计的,HDFS的架,构,构如图6.4,所,所示。,图6.4HDFS的架,构,构,6.2,.,.2HDFS文件,的,的基本,结,结构,HDFS由一,个,个名叫Namenode的,主,主节点,和,和多个,名,名叫Datanode的子,节,节点组,成,成。,Namenode存,储,储着文,件,件系统,的,的元数,据,据,这,些,些元数,据,据包括,文,文件系,统,统的名,字,字空间,等,等,向,用,用户映,射,射文件,系,系统,,并,并负责,管,管理文,件,件的存,储,储等服,务,务,但,实,实际的,数,数据并,不,不存放,在,在Namenode,。,。Namenode,的,的作用,就,就像是,文,文件系,统,统的总,指,指挥,,并,并向访,问,问文件,系,系统的,客,客户机,提,提供文,件,件系统,的,的映射,,,,这种,做,做法并,不,不是Google或Hadoop,的,的创新,,,,这和,传,传统并,行,行计算,系,系统中,的,的单一,系,系统映,像,像(SingleSystemImage,),)的做,法,法相同,。,。,HDFS中的Datanode用,于,于实际,对,对数据,的,的存放,,,,对Datanode上数,据,据的访,问,问并不,通,通过Namemode,而,是,是与用,户,户直接,建,建立数,据,据通信,。,。,Hadoop,启,启动后,我,我们能,看,看到Namenode和Datanode这两,个,个进程,。,。,6.2,.,.2HDFS文件,的,的基本,结,结构,HDFS的工,作,作过程是这样,的,的:,用户请,求,求创建,文,文件的,指,指令由Namenode进,行,行接收,,,,Namenode,将,将存储,数,数据的Datanode的IP返,回,回给用,户,户,并,通,通知其,他,他接收,副,副本的Datanode,,由,由用户,直,直接与Datanode进,行,行数据,传,传送。Namenode同,时,时存储,相,相关的,元,元数据,。,。,整个文,件,件系统,采,采用标,准,准TCP/IP协议,通,通信,,实,实际是,架,架设在Linux文,件,件系统,上,上的一,个,个上层,文,文件系,统,统。HDFS,上,上的一,个,个典型,文,文件大,小,小一般,都,都在G,字,字节至T字节,。,。,6.2,.,.2HDFS文件,的,的基本,结,结构,主从式,是,是云计,算,算系统,的,的一种,典,典型架,构,构方法,,,,系统,通,通过主,节,节点屏,蔽,蔽底层,的,的复杂,结,结构,,并,并向用,户,户提供,方,方便的,文,文件目,录,录映射,。,。有些,改,改进的,主,主从式,架,架构可,能,能会采,用,用分层,的,的主从,式,式方法,,,,以减,轻,轻主节,点,点的负,荷,荷。,6.2,.,.3HDFS的存,储,储过程,HDFS在对,一,一个文,件,件进行,存,存储时,有,有两个,重,重要的,策,策略:一个,是,是副本策,略,略,一个,是,是分块策,略,略。,副本策,略,略保证,了,了文件,存,存储的,高,高可靠,性,性;,分块策,略,略保证,数,数据并,发,发读写,的,的效率,并,并且是MapReduce,实,实现并,行,行数据,处,处理的,基,基础。,6.2,.,.3HDFS的存,储,储过程,HDFS的分,块,块策略:通常HDFS在存,储,储一个,文,文件会,将,将文件,切,切为64MB,大,大小的,块,块来进,行,行存储,,,,数据,块,块会被,分,分别存,储,储在不,同,同的Datanode节点,上,上,这,一,一过程,其,其实就,是,是一种,数,数据任,务,务的切,分,分过程,,,,在后,面,面对数,据,据进行MapReduce,操,操作时,十,十分重,要,要,同,时,时数据,被,被分块,存,存储后,在,在数据,读,读写时,能,能实现,对,对数据,的,的并发,读,读写,,提,提高数,据,据读写,效,效率。,HDFS采用64MB这样,较,较大的,文,文件分块策,略,略有以下3个优点:,(1),降,降低客,户,户端与,主,主服务,器,器的交,互,互代价,;,;,(2),降,降低网,络,络负载,;,;,(3),减,减少主,服,服务器,中,中元数,据,据的大,小,小。,6.2,.,.3HDFS的存,储,储过程,HDFS的副,本,本策略,:,:,HDFS对数,据,据块典,型,型的副,本,本策略,为,为3个,副,副本,,第一个,副,副本存,放,放在本,地,地节点,,,,,第二个,副,副本存,放,放在同,一,一个机,架,架的另,一,一个节,点,点,,第三个,本,本副本,存,存放在,不,不同机,架,架上的,另,另一个,节,节点。,这样的,副,副本策,略,略保证,了,了在HDFS,文,文件系,统,统中存,储,储的文,件,件具有,很,很高的,可,可靠性,。,。,6.2,.,.3HDFS的存,储,储过程,一个文,件,件写入HDFS的基,本,本过程可以描,述,述如下,:,:,写入操,作,作首先,由,由Namenode,为,为该文,件,件创建,一,一个新,的,的记录,,,,该记,录,录为文,件,件分配,存,存储节,点,点包括,文,文件的,分,分块存,储,储信息,,,,在写,入,入时系,统,统会对,文,文件进,行,行分块,,,,文件,写,写入的,客,客户端,获,获得存,储,储位置,的,的信息,后,后直接,与,与指定,的,的Datanode,进,进行数,据,据通信,,,,将文,件,件块按Namenode分,配,配的位,置,置写入,指,指定的Datanode,,数,数据块,在,在写入,时,时不再,通,通过Namenode,因,此,此Namenode,不,不会成,为,为数据,通,通信的,瓶,瓶颈。,6.3MapReduce编程,框,框架,在云计,算,算和大,数,数据技,术,术领域,被,被广泛,提,提到并,被,被成功,应,应用的,一,一项技,术,术就是MapReduce,。,。MapReduce是Google系,统,统和Hadoop系,统,统中的,一,一项核,心,心技术,。,。,6.3,.,.1MapReduce,的,的发展,历,历史,MapReduce,出,出现的,历,历史要,追,追述到1956年,,图,图灵奖,获,获得者,著,著名的,人,人工智,能,能专家McCarthy首,次,次提出,了,了LISP语,言,言的构,想,想,而,在,在LISP语,言,言中就,包,包含了,现,现在我,们,们所采,用,用的MapReduce,功,功能。LISP语言,是,是一种,用,用于人,工,工智能,领,领域的,语,语言,,在,在人工,智,智能领,域,域有很,多,多的应,用,用,LISP,在,在1956年,设,设计时,主,主要是,希,希望能,有,有效地,进,进行“,符,符号运,算,算”。,LISP是一,种,种表处,理,理语言,,,,其逻,辑,辑简单,但,但结构,不,不同于,其,其他的,高,高级语,言,言。,1960年,McCarthy更,是,是极有,预,预见性,地,地提出,:,:“今,后,后计算,机,机将会,作,作为公,共,共设施,提,提供给,公,公众”,,,,这一,观,观点已,与,与现在,人,人们对,云,云计算,的,的定义,极,极为相,近,近了,,所,所以我,们,们把McCarthy称为,“,“云计,算,算之父,”,”。,MapReduce,在,在McCarthy,提,提出时,并,并没有,考,考虑到,其,其在分,布,布式系,统,统和大,数,数据上,会,会有如,此,此大的,应,应用前,景,景,只,是,是作为,一,一种函,数,数操作,来,来定义,的,的。,6.3,.,.1MapReduce,的,的发展,历,历史,2004年Google公,司,司的Dean,发,发表文,章,章将MapReduce这,一,一编程,模,模型在,分,分布式,系,系统中,的,的应用,进,进行了,介,介绍,,从,从此MapRuduce分,布,布式编,程,程模型,进,进入了,人,人们的,视,视野。,可以认,为,为分布,式,式MapReduce是由Google,公,公司首,先,先提出,的,的。,Hadoop,跟,跟进了Google,的,的这一,思,思想,,可,可以认,为,为Hadoop是一,个,个开源,版,版本的Google,系,系统,,正,正是由,于,于Hadoop的跟,进,进才使,普,普通用,户,户得以,开,开发自,己,己的基,于,于MapReduce框架,的,的云计,算,算应用,系,系统。,6.3,.,.2MapReduce,的,的基本,工,工作过,程,程,MapReduce,是,是一种,处,处理大,数,数据集,的,的编程,模,模式,,它,它借鉴,了,了最早,出,出现在LISP语言,和,和其他,函,函数语,言,言中的map,和,和reduce操作,,,,MapReduce的基,本,本过程,为,为:,用户通,过,过map函数,处,处理key/value对,,,,从而,产,产生一,系,系列不,同,同的key/value对,,,,reduce函数,将,将key值相,同,同的key/value对,进,进行合,并,并。现,实,实中的,很,很多处,理,理任务,都,都可以,利,利用这,一,一模型,进,进行描,述,述。通,过,过MapReduce框架,能,能实现,基,基于数,据,据切分,的,的自动,并,并行计,算,算,大,大,大简化,了,了分布,式,式编程,的,的难度,,,,并为,在,在相对,廉,廉价的,商,商品化,服,服务器,集,集群系,统,统上实,现,现大规,模,模的数,据,据处理,提,提供了,可,可能。,6.3,.,.2MapReduce,的,的基本,工,工作过,程,程,MapReduce,的,的过程,其,其实非,常,常简单,,,,我们,用,用一个,实,实际的,例,例子来,说,说明MapReduce的,编,编程模,型,型。假,设,设我们,需,需要对,一,一个文,件,件example.txt,中,中出现,的,的单词,次,次数进,行,行统计,,,,这就,是,是著名,的,的wordcount例子,,,,在这,个,个例子,中,中MapReduce的编,程,程模型,可,可以这,样,样来描,述,述:,用户需,要,要处理,的,的文件example.txt已,被,被分为,多,多个数,据,据片存,储,储在集,群,群系统,中,中不同,的,的节点,上,上了,,用,用户先,使,使用一,个,个Map函数,Map(example,.,.txt,文,文件内,容,容),,在,在这个Map,函,函数中key,值,值为example,.,.txt,key通,常,常是指,一,一个具,有,有唯一,值,值的标,识,识,value值就,是,是example.txt,文,文件中,的,的内容,。,。,Map,操,操作程,序,序通常,会,会被分,布,布到存,有,有文件example.txt数,据,据片段,的,的节点,上,上发起,,,,这个Map,操,操作将,产,产生一,组,组中间key,/,/value,对,对(word, count),,6.3,.,.2MapReduce,的,的基本,工,工作过,程,程,这里的word代表,出,出现在,文,文件example,.,.txt片段,中,中的任,一,一个单,词,词,每,个,个Map操作,所,所产生,的,的key/value对只,代,代表example,.,.txt一部,分,分内容,的,的统计,值,值。,Reduce,函,函数将,接,接收集,群,群中不,同,同节点Map,函,函数生,成,成的中,间,间key/value对,,并,并将Key相,同,同的key/value对,进,进行合,并,并,在,这,这个例,子,子中Reduce函,数,数将对,所,所有key值,相,相同的value值,进,进行求,和,和合并,,,,最后,输,输出的key,/,/value,对,对就是,(,(word,count,),),其,中,中count,就,就是这,个,个单词,在,在文件example.txt中,出,出现的,总,总的次,数,数。,6.3,.,.2MapReduce,的,的基本,工,工作过,程,程,下面我,们,们通过,一,一个简单例,子,子来讲解MapReduce,的,的基本,原,原理。,1任,务,务的描,述,述,来自江,苏,苏、浙,江,江、山,东,东三个,省,省的9,所,所高校,联,联合举,行,行了一,场,场编程,大,大赛,,每,每个省,有,有3所,高,高校参,加,加,每,所,所高校,各,各派5,名,名队员,参,参赛,,各,各所高,校,校的比,赛,赛平均,成,成绩如,表,表6.1所示,。,。,江苏省,浙江省,山东省,南京大学,90,浙江大学,95,山东大学,92,东南大学,93,浙江工业大学,84,中国海洋大学,85,河海大学,84,宁波大学,88,青岛大学,87,表6.1原始比,赛,赛成绩,6.3,.,.2MapReduce,的,的基本,工,工作过,程,程,我们可,以,以用如,表,表6.2所示,的,的形式,来,来表示,成,成绩,,这,这样每,所,所高校,就,就具备,了,了所属,省,省份和,平,平均分,数,数这两,个,个属性,,,,即。,南京大学:江苏省,90,东南大学:江苏省,93,河海大学:江苏省,84,浙江大学:浙江省,95,浙江工业大学:浙江省,84,宁波大学:浙江省,88,山东大学:山东省,92,中国海洋大学:山东省,85,青岛大学:山东省,87,表6.2增加属,性,性信息,后,后的比,赛,赛成绩,6.3,.,.2MapReduce,的,的基本,工,工作过,程,程,统计各,个,个省份,高,高校的,平,平均分,数,数时,,高,高校的,名,名称并,不,不是很,重,重要,,我,我们略,去,去高校,名,名称,,如,如表6,.,.3所,示,示。,江苏省,90,江苏省,93,江苏省,84,浙江省,95,浙江省,84,浙江省,88,山东省,92,山东省,85,山东省,87,表6.3略去高,校,校名称,后,后的比,赛,赛成绩,接下来,对,对各个,省,省份的,高,高校的,成,成绩进,行,行汇总,,,,如表6.4,所,所示。,江苏省,90、93、84,浙江省,95、84、88,山东省,92、85、87,表6.4各省比,赛,赛成绩,汇,汇总,6.3,.,.2MapReduce,的,的基本,工,工作过,程,程,计算求,得,得各省,高,高校的,平,平均值,如,如表6,.,.5所,示,示。,表6.5各省平,均,均成绩,江苏省,89,浙江省,89,山东省,88,以上为,计,计算各,省,省平均,成,成绩的,主,主要步,骤,骤,我,们,们可以,用,用MapReduce来实,现,现,其,详,详细步,骤,骤如下,:,:,2任,务,务的MapReduce实,现,现,MapReduce,包,包含Map、Shuffle和Reduce三,个,个步骤,,,,其中Shuffle由Hadoop自,动,动完成,,,,Hadoop的使,用,用者可,以,以无需,了,了解并,行,行程序,的,的底层,实,实现,,只,只需关,注,注Map和Reduce的,实,实现。,6.3,.,.2MapReduce,的,的基本,工,工作过,程,程,1.MapInput,:,:,在Map部分,,,,我们,需,需要输,入,入,数,数据,,这,这里Key是,高,高校的,名,名称,Value是,属,属性值,,,,即所,属,属省份,和,和平均,分,分数,,如,如表6,.,.6所,示,示。,Key:南京大学,Value:江苏省,90,Key:东南大学,Value:江苏省,93,Key:河海大学,Value:江苏省,84,Key:浙江大学,Value:浙江省,95,Key:浙江工业大学,Value:浙江省,84,Key:宁波大学,Value:浙江省,88,Key:山东大学,Value:山东省,92,Key:中国海洋大学,Value:山东省,85,Key:青岛大学,Value:山东省,87,表6.6MapInput数据,6.3,.,.2MapReduce,的,的基本,工,工作过,程,程,2.MapOutput:,对所属,省,省份平,均,均分数,进,进行重,分,分组,,去,去除高,校,校名称,,,,将所,属,属省份,变,变为Key,,平,平均分,数,数变为Value,,如,如表6,.,.7所,示,示。,Key:江苏省,Value:90,Key:江苏省,Value:93,Key:江苏省,Value:84,Key:浙江省,Value:95,Key:浙江省,Value:84,Key:浙江省,Value:88,Key:山东省,Value:92,Key:山东省,Value:85,Key:山东省,Value:87,表6.7MapOutput数据,6.3,.,.2MapReduce,的,的基本,工,工作过,程,程,3.Shuffle Output:,Shuffle由Hadoop自,动,动完成,,,,其任,务,务是实,现,现Map,对Key,进,进行分,组,组,用,户,户可以,获,获得Value的列,表,表,即List,,如,如表6,.,.8所,示,示。,Key:江苏省,List:90、93、84,Key:浙江省,List:95、84、88,Key:山东省,List:92、85、87,表6.8Shuffle Output数据,4.ReduceInput,:,:,表6.8中的,内,内容将,作,作为Reduce任,务,务的输,入,入数据,,,,即从Shuffle任务,中,中获得,的,的(Key,List),。,。,6.3,.,.2MapReduce,的,的基本,工,工作过,程,程,5.ReduceOutput:,Reduce,任,任务的,功,功能是,完,完成用,户,户的计,算,算逻辑,,,,这,里,里的任,务,务是计,算,算每个,省,省份的,高,高校学,生,生的比,赛,赛平均,成,成绩,,获,获得的,最,最终结,果,果如表6.9,所,所示。,江苏省,89,浙江省,89,山东省,88,表6.9ReduceOutput数据,6.3,.,.3LISP中的MapReduce,为了进,一,一步理,解,解MapReduce,我,们,们简单,介,介绍最,早,早使用Map,和,和Reduce的LISP,语,语言中,的,的Map和Reduce操,作,作。,下面的LISP语句,定,定义的,这,这个Map操,作,作是将,向,向量(1 234 5,),)和向,量,量(10 987 6,),)进行,相,相乘的,操,操作,,输,输出也,为,为向量,(,(1018242830,),)。,(map vector,#,#*,#,#(123 45),#,#(10 987 6,),)-,#(1018242830),这个Map操,作,作对应,于,于向量,到,到向量,的,的映射,,,,两个,向,向量按,乘,乘积关,系,系进行,映,映射。,6.3,.,.3LISP中的MapReduce,下面的LISP语句,定,定义的,这,这个Reduce操,作,作是将,向,向量(1 234 567 8910),中,中的元,素,素进行,求,求和的Reduce,操,操作,输,输出结,果,果为55。,(reduce #,+#,(,(12 345 678 910,),)-,55,这个Reduce操,作,作对应,于,于向量,的,的约简,,,,它将,向,向量按,求,求和的,关,关系约,简,简为一,个,个值。,可以看,出,出,在LISP语言,中,中Map和Reduce只,是,是作为,一,一种操,作,作定义,,,,并没,有,有体现,出,出任何,的,的分布,式,式计算,的,的特征,。,。,6.3,.,.4MapReduce,的,的特点,MapReduce,主,主要具,有,有以下,几,几个特点:,(1),需,需要在,集,集群条,件,件下使,用,用。,MapReduce,的,的主要,作,作用是,实,实现对,大,大数据,的,的分布,式,式处理,,,,其设,计,计时的,基,基本要,求,求就是,在,在大规,模,模集群,条,条件下,的,的(虽,然,然一些,系,系统可,以,以在单,机,机下运,行,行,但,这,这种条,件,件下只,具,具有仿,真,真运行,的,的意义,),),Google作,为,为分布,式,式MapReduce提出,者,者,它,本,本身就,是,是世界,上,上最大,的,的集群,系,系统,,所,所以MapReduce天,然,然需要,在,在集群,系,系统下,运,运行才,能,能有效,。,。,6.3,.,.4MapReduce,的,的特点,(2),需,需要有,相,相应的,分,分布式,文,文件系,统,统的支,持,持。,这里要,注,注意的,是,是单独,的,的MapReduce模式,并,并不具,有,有自动,的,的并行,性,性能,,就,就像它,在,在LISP语,言,言中的,表,表现一,样,样,它,只,只有与,相,相应的,分,分布式,文,文件系,统,统相结,合,合才能,完,完美地,体,体现MapReduce这,种,种编程,框,框架的,优,优势。,如Google系统,对,对应的,分,分布式,文,文件系,统,统为GFS,Hadoop,系,系统对,应,应的分,布,布式文,件,件系统,为,为HDFS。,MapReduce,能,能实现,计,计算的,自,自动并,行,行化很,大,大程度,上,上是由,于,于分布,式,式文件,系,系统在,对,对文件,存,存储时,就,就实现,了,了对大,数,数据文,件,件的切,分,分,这,种,种并行,方,方法也,叫,叫数据,并,并行方,法,法。数,据,据并行,方,方法避,免,免了对,计,计算任,务,务本身,的,的人工,切,切分,,降,降低了,编,编程的,难,难度,,而,而像MPI往,往,往需要,人,人工对,计,计算任,务,务进行,切,切分,,因,因此分,布,布式编,程,程难度,较,较大。,6.3,.,.4MapReduce,的,的特点,(3),可,可以在,商,商品化,集,集群条,件,件下运,行,行,不,需,需要特,别,别的硬,件,件支持,.,.,和高性,能,能计算,不,不同,,基,基于MapReduce的,系,系统往,往,往不需,要,要特别,的,的硬件,支,支持,,按,按Google的报,道,道,他,们,们的实,验,验系统,中,中的节,点,点就是,基,基于典,型,型的双,核,核X86的系,统,统,配,置,置24GB,的,的内存,,,,网络,为,为百兆,网,网和千,兆,兆网构,成,成,存,储,储设备,的,的便宜,的,的IDE硬盘,。,。,6.3,.,.4MapReduce,的,的特点,(4),假,假设节,点,点的失,效,效为正,常,常情况,。,。,传统的,服,服务器,通,通常被,认,认为是,稳,稳定的,,,,但在,服,服务器,数,数量巨,大,大或采,用,用廉价,服,服务的,条,条件下,,,,服务,器,器的实,效,效将变,得,得常见,,,,所以,通,通常基,于,于MapReduce的分,布,布式计,算,算系统,采,采用了,存,存储备,份,份、计,算,算备份,和,和计算,迁,迁移等,策,策略来,应,应对,,从,从而实,现,现在单,节,节点不,稳,稳定的,情,情况下,保,保持系,统,统整个,的,的稳定,性,性。,6.3,.,.4MapReduce,的,的特点,(5),适,适合对,大,大数据,进,进行处,理,理。,由于基,于,于MapReduce的系,统,统并行,化,化是通,过,过数据,切,切分实,现,现的数,据,据并行,,,,同时,计,计算程,序,序启动,时,时需要,向,向各节,点,点拷贝,计,计算程,序,序,过,小,小的文,件,件在这,种,种模式,下,下工作,反,反而会,效,效率低,下,下。Google的,实,实验也,表,表明一,个,个由150秒,时,时间完,成,成的计,算,算任务,,,,程序,启,启动阶,段,段的时,间,间就花,了,了60,秒,秒,可,以,以想象,,,,如果,计,计算任,务,务数据,过,过小,,这,这样的,花,花费是,不,不值得,的,的,同,时,时对过,小,小的数,据,据进行,切,切分也,无,无必要,。,。所以MapReduce,更,更适合,进,进行大,数,数据的,处,处理。,6.3,.,.4MapReduce,的,的特点,(6),计,计算向,存,存储迁,移,移。,传统的,高,高性能,计,计算数,据,据集中,存,存储,,计,计算时,数,数据向,计,计算节,点,点拷贝,,,,而基,于,于MapReduce的分,布,布式系,统,统在数,据,据存储,时,时就实,现,现了分,布,布式存,储,储,一,个,个较大,的,的文件,会,会被切,分,分成大,量,量较小,的,的文件,存,存储于,不,不同的,节,节点,,系,系统调,度,度机制,在,在启动,计,计算时,会,会将计,算,算程序,尽,尽可能,分,分发给,需,需要处,理,理的数,据,据所在,的,的节点,。,。计算,程,程序的,大,大小通,常,常会比,数,数据文,件,件小的,多,多,所,以,以迁移,计,计算的,网,网络代,价,价要比,迁,迁移数,据,据小的,多,多。,6.3,.,.4MapReduce,的,的特点,(7)MapReduce,的,的计算,效,效率会,受,受最慢,的,的Map任务,影,影响。,由于Reduce操,作,作的完,成,成需要,等,等待所,有,有Map任务,的,的完成,,,,所以,如,如果Map任,务,务中有,一,一个任,务,务出现,了,了延迟,,,,则整,个,个MapReduce操作,将,将受最,慢,慢的Map任,务,务的影,响,响。,6.4,实,实现Map,/,/Reduce的C,语,语言实,例,例,Map,/,/Reduce操作,代,代表了,一,一大类,的,的数据,处,处理操,作,作方式,,,,为了,让,让大家,对,对Map/Reduce的,工,工作过,程,程有一,个,个直观,的,的了解,,,,下面,的,的程序,采,采用C,语,语言实,现,现了一,个,个简单,经,经典的Map,/,/Reduce计算,,,,,计算从,控,控制台,输,输入的,字,字符串,中,中单词,的,的计数,,,,这一,计,计算过,程,程都是,在,在同一,个,个节点,上,上完成,的,的,并,未,未实现,计,计算的,并,并行化,,,,历史,上,上的Lisp,语,语言也,是,是运行,在,在单机,的,的上的,程,程序,,这个例,子,子的主,要,要目的,是,是让大,家,家理解,这,这一操,作,作的过,程,程。程,序,序中的my_map,(,()和my_reduce,(,()函,数,数分别,实,实现了,对,对字符,串,串的Map和Reduce,操,操作。,6.4,实,实现Map,/,/Reduce的C,语,语言实,例,例,程序6,.,.1,输入:,this is mapreducehellomap hello reduce,6.4,实,实现Map,/,/Reduce的C,语,语言实,例,例,输出:,This is mapresults:,This is reduceresults:,此运行,实,实例中,我,我们从,控,控制台,输,输入字,符,符串“this is mapreducehellomap hello reduce”,,,,程序,通,通过Map和Reduce,过,过程对,字,字符串,的,的的单,词,词出现,的,的频率,进,进行统,计,计,并,输,输出了,结,结果,,这,这是一,个,个典型,的,的Map/Reduce过,程,程。,6.5,建,建立Hadoop,开,开发环,境,境,本节使,用,用三个Linux虚,拟,拟机来,构,构建Hadoop集,群,群环境,,,,其中,一,一个虚,拟,拟机作,为,为NameNode,(,(Master节点,),),另,外,外两个,虚,虚拟机,作,作为DataNode(Slave节点,),),如,图,图6.5所示,。,。在3,个,个节点,下,下3个,虚,虚拟机,的,的机器,名,名和IP地址,信,信息如,下,下。,虚拟机1:主,机,机名为vm1,,,,IP,为,为192.168.122,.,.101,作,为,为NameNode,使,使用;,虚拟机2:主,机,机名为vm2,,,,IP,为,为192.168.122,.,.102,作,为,为DataNode,使,使用;,虚拟机3:主,机,机名为vm3,,,,IP,为,为192.168.122,.,.103,作,为,为DataNode,使,使用。,图6.5Hadoop,集,集群配,置,置,6.5,.,.1,相,相关准,备,备工作,6.5,.,.1,相,相关准,备,备工作,6.5,.,.1,相,相关准,备,备工作,(4),新,新建用,户,户“hadoop”,。,。,在每个,节,节点上,使,使用useradd,指,指令新,建,建一个,用,用户hadoop,,并,并设置,密,密码。,useradd hadoop,passwdhadoop,(5),永,永久关,闭,闭每个,节,节点的,防,防火墙,(,(root权,限,限)。,在每个,节,节点上,执,执行以,下,下指令,,,,这样,将,将永久,性,性的关,闭,闭每个,阶,阶段的,防,防火墙,chkconfigiptablesoff/,永,永久性,生,生效,,重,重启后,不,不会复,原,原,6.5,.,.1,相,相关准,备,备工作,(6),配,配置ssh实,现,现Hadoop结点,间,间用户,的,的无密,码,码访问,Hadoop,需,需要在,各,各个结,点,点间进,行,行信息,传,传递,,因,因此需,要,要实现,结,结点间,的,的无密,码,码访问,,,,这与,采,采用MPI进,行,行并行,程,程序设,计,计相同,,,,否则,系,系统会,不,不停地,向,向你请,求,求密码,验,验证。,这里的,配,配置在,各,各个节,点,点的hadoop用,户,户下进,行,行。,配置过,程,程与MPI部,分,分的配,置,置过程,相,相关,,这,这里不,再,再详述,,,,配置,完,完成后,使,使用ssh指,令,令可以,在,在三个,虚,虚拟机,之,之间实,现,现无密,码,码访问,。,。,6.5,.,.2JDK的安,装,装配置,Hadoop,是,是采用Java编写,的,的,每,个,个虚拟,机,机上均,需,需要安,装,装Java的JDK,,,,JDK的安,装,装配置,需,需在root,用,用户下,进,进行,,具,具体步,骤,骤如下,。,。,(1),在,在Sun官方,网,网站下,载,载JDK软件,包,包jdk-7u45,-,-linux,-,-x64.tar.gz。,(2),新,新建目,录,录/usr/java,将,下,下载的JDK,软,软件包,进,进行进,行,行解压,。,。,mkdir,/,/usr/java,tar,zxvfjdk-7u45,-,-linux,-,-x64.tar.gz,6.5,.,.2JDK的安,装,装配置,(3),配,配置Java,环,环境变,量,量。,#set javaenvironment,exportJAVA_HOME=/usr,/,/java/jdk1.7,.,.0_45,expo
展开阅读全文