资源描述
单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,#,大数据平台简介,目录,Hadoop,生态系统,Hadoop,主流厂商,HDFS,MapReduce,Hive,Spark,Hadoop,生态系统,Hadoop,1,.0 V 2.0,Hadoop,生态系统,Ambari,(安装部署工具),Zookeeper,(分布式协调服务),H,B,ase,(分布式协数据库),Oozie,(作业流调度系统),HDFS,(分布式存储系统),YARN,(分布式计算框架),MapReduce,(离线计算),Tez,(,DAG,计算),Spark,(内存计算),Hive,Pig,Mahout,Sqoop,(数据库,TEL,工具),Flume,(日志收集),HDFS,Hadoop Distributed File System,Yarn,资源管理器,MapReduce,分布式并行计算框架,“你数一号书架,我数二号书架。我们人数多,数书就更快。这就是,map,;最后我们到一起,把所有人的统计数加在一起,就是,reduce,。”,Spark,新一代大数据处理计算引擎,You can run Spark using its standalone cluster mode,on EC2,on Hadoop YARN,or on Apache Mesos.Access data in HDFS,Cassandra,HBase,Hive,Tachyon,and any Hadoop data source.,HBase,NoSQL,数据库,Hive,hadoop,的数据仓库,Pig,大规模数据分析平台,Pig,是一个基于,Hadoop,的大规模数据分析平台,它提供的,SQL-LIKE,语言叫,Pig Latin,,该语言的编译器会把类,SQL,的数据分析请求转换为一系列经过优化处理的,MapReduce,运算。,Pig,为复杂的海量数据并行计算提供了一个简单的操作和编程接口。,Apache pig,是用来处理大规模数据的,高级查询语言,,配合,Hadoop,使用,可以在处理海量数据时达到事半功倍的效果,比使用,Java,,,C+,等语言编写大规模数据处理程序的难度要小,N,倍,实现同样的效果的代码量也小,N,倍。,A=LOAD a.txt AS(col1:chararray,col2:int,col3:int,col4:int,col5:double,col6:double);,B=GROUP A BY(col2,col3,col4);,C=FOREACH B GENERATE group,AVG(A.col5),AVG(A.col6);,DUMP C;,Mahout,机器学习算法库,Mahout,是,Apache Software Foundation,(,ASF,)旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。,Mahout,包含许多实现,包括聚类、分类、推荐过滤、频繁子项挖掘。此外,通过使用,Apache Hadoop,库,,Mahout,可以有效地扩展到云中。,Zookeeper,分布式协调服务,Sqoop,Hadoop,与关系数据库间的数据同步工具,Flume,分布式日志采集工具,Amari,Hadoop,集群安装部署监控工具,Hadoop,主流厂商,大数据领域的三驾马车,Cloudera,Hortonworks,MapR,Cloudera Distribution Hadoop(CDH),Hortonworks Data Platform(HDP),MapR Converged Data Platform,Hadoop,主流厂商比较,开源,开源,管理,开源,管理,架构创新,完全开源,收取服务费,工具不开源,收取,License,费用,重构了底层内核,收取,License,费用,云服务集团,软件集团,浪潮大数据平台产品,HDP,云海,Insight HD,Indata HD,HDFS,相关背景资料,Hadoop,:一个分布式系统基础架构,由,Apache,基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。,Distributed,:分布式计算是利用互联网上的计算机的,CPU,的共同处理能力来解决大型计算问题的一种计算科学。,File system,:文件系统是操作系统用于明确磁盘或分区上的文件的方法和数据结构;即在磁盘上组织文件的方法。也指用于存储文件的磁盘或分区,或文件系统种类。,Hadoop,和,HDFS,的关系,Hadoop,是一个以一种可靠、高效、可伸缩的方式进行处理的,能够对大量数据进行分布式处理的系统框架。,HDFS,是,Hadoop,兼容最好的标准级文件系统,因为,Hadoop,是一个综合性的文件系统抽象,所以,HDFS,不是,Hadoop,必需的。,所以可以理解为,hadoop,是一个框架,,HDFS,是,hadoop,中的一个部件。,HDFS,背景介绍,随着数据量越来越大,在一个操作系统管辖的范围存不下了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统。,分布式文件系统:,一种允许文件通过网络在多台主机上分享的文件系统,可以让多个机器上的多个用户分享文件和存储空间。,集群,通透性:,DFS,让实际上是通过,网络,来访问文件的动作,由用户和程序看来,就像,访问本地的磁盘,一般。,分布式文件系统特点,Root,split,Block,Block,目录,1,目录,2,File,节,点,节,点,节,点,HDFS,是什么,HDFS,是,Hadoop Distribute File System,的简称,也就是,Hadoop,的一个分布式文件系统。,HDFS,被设计成适合运行在通用硬件,(commodity hardware),上的分布式文件系统。,HDFS,是一个高度容错性的系统,适合部署在廉价的机器上,HDFS,能提供高吞吐量的数据访问,非常适合大规模数据集上的应用,HDFS,可以实现流的形式访问(,streaming access,)文件系统中的数据,对外部客户机而言,,HDFS,就像一个传统的分级文件系统。可以创建、删除、移动或重命名文件,等等。对于用户来说,可以直接看成是一个巨大的硬盘。,HDFS,特点,GB,、,TB,、甚至,PB,级数据;百万规模以上的文件数量;,10K+,节点规模,适合大数据,处理,HDFS,使应用程序流式地访问它们的数据集。所以它重,视数据吞吐量,而不是数据访问的反应速度。,流式文件,访问,HDFS,被设计成适合进行批量处理,而不是用户交互式,处理;移动计算而非数据;数据位置暴露给计算框架,适合批处理,通过多副本提高可靠性;提供了容错和恢复机制,可构建,廉价机器上,数据自动保存多个副本;副本丢失后,自动恢复,高容错性,一次性写入,多次读取;保证数据一致性,简化一致性模型,HDFS,在设计的时候就考虑到平台的可移植性。这种特,性方便了,HDFS,作为大规模数据应用平台的推广,可移植性,HDFS,的局限性,不支持多用户对同一文件进行操作,而且写操作只,能在文件末尾完成,即追加操作。,并发写入、文件随机修改,由于,HDFS,是为高数据吞吐量应用而设计的,必然,以高延迟为代价。不适合低延迟与高吞吐率的数据,访问,比如毫秒级,不适合低延迟数据访问,HDFS,中元数据(文件的基本信息)存储在,namenode,的内存中,而,namenode,为单点,小文,件数量大到一定程度,,namenode,内存就吃不消了,;寻道时间超过读取时间,无法高效存储大量小文件,HDFS,现在遇到的主要问题,分布后的文件系统有个无法回避的问题,因为文件不在一个磁盘导致读取访问操作的延时,这个是,HDFS,现在遇到的主要问题,HDFS,调优是使用时最应该注意的。,现阶段,,HDFS,的配置是按照高数据吞吐量优化的,可能会以高时间延时为代价。但万幸的是,,HDFS,是具有很高弹性,可以针对具体应用再优化。,总体架构图,HDFS,采用,master/slave,架构。一个,HDFS,集群是由一个,Namenode,和一定数目的,Datanode,组成,他们以管理者,-,工作者模式工作。,总体架构图,-Client,切分文件;,访问或通过命令行管理,HDFS,;,与,NameNode,交互,获取文件位置信息;,与,DataNode,交互,读取和写入数据。,HDFS,的基本结构之,NameNode,Namenode,是一个中心服务器,负责管理文件系统的命名空间,协调客户端对文件的访问,Namenode,执行文件系统的命名空间操作,例如打开、关闭、重命名文件和目录,记录每个文件数据块在各个,Datanode,上的位置和副本信息,HDFS,元数据持久化,NameNode,存有,HDFS,的元数据:主要由,FSImage,和,EditLog,组成。,FSImage,是元数据镜像文件,保存整个文件系统的目录树,数据块映射关系:文件与数据块映射关系,,DataNode,与数据块映射关系,EditLog,是元数据操作日志,记录每次保存,fsimage,之后到下次保存之间的所有,hdfs,操作,NameNode,FileSystemImage,EditLog,命名空间操作记录,如打开、关闭、创建、删除、重命名,文件和目录,HDFS,元数据持久化,checkpoint,:,NameNode,启动后,它会从磁盘中读取,FsImage,及,EditLog,,应用,EditLog,中所有的事务到存在于内存中的,FsImage,文件对象,然后将版本较新的这个,FsImage,文件写入磁盘,之后,EditLog,就可以被删除了。一个,checkpoint,只发生在,NameNode,启动的时候。,Blockreport,:,当一个,DataNode,启动时,它会扫描本地文件系统,生成所有,HDFS,数据块的一个列表,然后向,NameNode,发送一个报告。,HDFS,的基本结构之,DataNode,Datanode,一般是一个节点一个,负责所在物理节点的存储管理,是文件系统中真正存储数据的地方,一个文件被分成一个或多个数据块,这些块存储在一组,Datanode,上,Datanode,负责处理文件系统客户端的读写请求。,在,Namenode,的指挥下进行,block,的创建、删除和复制,周期性的向,Namenode,汇报其存储的数据块信息,数据组织,数据块(,block,):大文件会被分割成多个,block,进行存储,,block,大小默认为,128MB,。,比磁盘块大很多,目的是减少寻址开销。,并不是设置块越大越好。,每一个,block,会在多个,datanode,上存储多份副本,默认是,3,份。,与其他文件系统不一样,,HDFS,中每个小于块大小的文件不会占据整个块的空间。,HDFS,128,MB,128,MB,128,MB,128,MB,数据复制,大文件在集群中跨机器存储,每个文件存储成一系列的数据块,除了最后一个,所有的数据块都是同样大小的,为了容错,文件的所有数据块都会有副本。每个文件的数据块大小和副本系数都是可配置的,Namenode,全权管理数据块的复制,它周期性地从集群中的每个,Datanode,接收心跳信号和块状态报告,副本策略,HDFS,采用机架感知(,rack awareness,)的副本存放策略来提高数据的可靠性、可用性和网络带宽的利用率。,将第一个副本放在本地节点,将第二个副本放到本地机架上的另外一个节点,而将第三个副本放到不同机架上的节点。,文件的副本不是均匀地分布在机架当中,这种方式提高了写的性能,并且不影响数据的可靠性和读性能(选择读取最近的副本),Node,大数据集群,Rack1,Rack2,DataNode,DataNode,HDFS,稳健性,故障的类型:,NameNode,故障,,DataNode,故障和网络中断,数据磁盘故障,心跳及重新复制,DataNode,因为故障而不可用,拷贝过程失败,DataNode,上的磁盘坏掉,副本数量会被增加,NameNode,启动,block,重新复制:,NameNode,DataNode,Dead,DataNode,DataNode,HeartBeats,HDFS,稳健性,数据完整性,HDFS,客户端应用实现了对文件内容的校验和。,HDFS,写入的时候计算出校验和,然后每次读的时候再计算校验和。,元数据磁盘故障,NameNode,在,HDFS,集群中属于单点故障。没有,namenode,,文件系统会崩溃,文件系统上的所有文件将丢失(无法读出,因为无法定位元数据块的位置),HA,高可用架构:,NameNode,热备,HA,架构解决的问题,NameNode,单点故障,HDFS,只有一个,NameNode,节点,当,NameNode,崩溃后,整个,HDFS,集群随之崩溃,直到,Namenode,重启或者其他,Namenode,接入,HDFS HA,:,为了解决,NameNode,的单点故障,为,NameNode,保存一个热备,,两个独立的机器作为,NameNode,:,Active Namenode,、,Standby Namenode,。任何时刻,只有一个,Namenode,处于,Active,状态,另一个处于,standby,状态,(passive,备份,),;,Active Namenode,用于接收,Client,端请求,,Standy,节点作为,slave,保持集群的状态数据以备快速,failover.,HA,架构图,写入,读出,DataNode,DataNode,DataNode,.,NameNode,active,NameNode,standby,QJM/NFS,ZookeeperFC,ZookeeperFC,监控,NN,状态,管理,HA,状态,监控,NN,状态,管理,HA,状态,Zookeeper,Heartbeat,Heartbeat,HA,架构,-,快速,failover,Datanodes,上需要同时配置这两个,Namenode,的地址,同时和它们都建立心跳链接,并把,block,位置发送给它们,这样,Standby node,持有集群中,blocks,的最新位置,当,Active NN,失效时,,StandbyNN,切换成,Active NN,NameNode,active,DataNode,DataNode,DataNode,DataNode,NameNode,standby,HeartBeats,共享数据,两种,HA,方案对比,QJM vs NFS,共同点,都是热备方案,都是一个,active Namenode(NN),和一个,standby NN,使用,Zookeeper(ZK)quorum,和,ZKFC,来实现自动失效恢复。,在失效恢复时都需要配置,fencing,方法来,fence active NN,二者共享数据方式不同,参与,HA,的不同角色,HDFS with NFS,HDFS with QJM,Namenode,Namenode,HA NFS(,共享数据变更存储,),JournalNode,Zookeeper,Zookeeper,ZKFailoverController process,ZKFailoverController process,HA,方案,-NFS,实现机制,active NN,和,standby NN,需要共享一个存储目录。,active NN,会把数据变更日志保存在该目录内,,standby NN,则监视更新,并保持数据同步。为了快速切换,NN,,,DataNode(DN),需要知道两个,NN,的地址,并把块信息和心跳包发送给,active,和,standby,这两个,NN,。此外,为了保证,active NN,挂了以后不再有新数据写入,,Fencing,逻辑在确认,active NN,挂了以后会切断所有与原,active NN,的连接。,HA with NFS,局限性,目前只支持一个数据变更共享目录,导致,HA,能力受限于该目录,为了防止共享目录的单点失效,对共享目录有额外的要求,比如冗余的硬盘、网络和电源等。,NFS,共享目录所在的设备要求是高可靠性。,NFS,方式部署更为复杂。,HA,方案,-QJM,Standby Node,与,Active Node,保持同步,这两个,Node,都与一组称为,JNS,的互相独立的进程保持通信,(Journal Nodes),。当,Active Node,上更新了,namespace,,它将记录修改日志发送给,JNS,的多数派。,Standby noes,将会从,JNS,中读取这些,edits,,并持续关注它们对日志的变更。,Standby Node,将日志变更应用在自己的,namespace,中,即在,failover,发生之前,,Standy,持有,namespace,应该与,Active,保持完全同步。,JournalNode,JournalNode,JournalNode,JournalNode,NameNode,active,NameNode,standby,向,Journal Nodes,写数据,从,Journal Nodes,读数据,HA,方案,-QJM,硬件资源,Namenode,机器:两台配置对等的机器,它们分别运行,Active,和,Standby Node,JouralNode,机器:运行,JouralNodes,的机器。,JouralNode,守护进程相当的轻量级,它们可以和,hadoop,的其他进程部署在一起,比如,Namenodes,、,jobTracker,、,ResourceManager,等。不过为了形成多数派,(majority),,至少需要,3,个,JouralNodes,,因为,edits,操作必须在多数派上写入成功。当然,JNS,的个数可以,3,,且通常为奇数,(3,5,7),,这样可以更好的容错和形成多数派。如果你运行了,N,个,JNS,,那么它可以允许,(N-1)/2,个,JNS,进程失效并且不影响工作。,HDFS,可访问性,HDFS,支持以文件和目录的形式组织用户数据。它提供了一个命令行接口,(FS Shell),让用户与,HDFS,中的数据进行交互,通过原生的,FileSystem Java API,接口来访问,浏览器的方式访问,HDFS,中的实例文件,nn_host:port/,默认的,http,端口是,50070,读文件,Client JVM,DataNode,DataNode,DataNode,NameNode,HDFS,Client,Distributed,FileSystem,FSData,InputStream,1:open,2:,获取文件数据块所在的,DataNode,节点位置,3:read,7:complete,6:close,4:read,5:read,写文件,Client JVM,DataNode,DataNode,DataNode,NameNode,HDFS,Client,Distributed,FileSystem,FSData,InputStream,1:creat,3:write,7:complete,6:close,5,:,ack packet,2,:,creat,4,:,write packet,4,5,4,5,回收存储空间,文件的删除与恢复,HDFS,会为每一个用户创建一个回收站目录:,/user/,用户名,/.Trash/,,每一个被用户通过,Shell,删除的文件,/,目录,它会先被重命名到目录,/trash,下的一个文件,.,只要被删除的文件还在,/trash,目录中,用户就可以还原它。,目前默认策略是删除,/trash,中保留时间超过,6,小时的文件,该功能只限于用户在客户端的脚本操作,当用户写程序调用,HDFS,的,API,时,,NameNode,并不会把删除的文件或目录放入回收站,Trash,中,减少副本系数,当副本系数被降低时,,NameNode,会选择删除多余的副本,HDFS,常用,shell,HDFS,支持以文件和目录的形式组织用户数据。它在客户端提供了一个命令行接口,(FS Shell),让用户与,HDFS,中的数据进行交互,调用文件系统,(FS)Shell,命令应使用,bin/hadoop fs,的形式。,所有的的,FS shell,命令使用,URI,路径作为参数。,URI,格式是,scheme:/authority/path,。对,HDFS,文件系统,,scheme,是,hdfs,。其中,scheme,和,authority,参数都是可选的,如果未加指定,就会使用配置中指定的默认,scheme,。一个,HDFS,文件或目录比如,/parent/child,可以表示成,hdfs:/namenode:namenodeport/parent/child,,或者更简单的,/parent/child,ls,使用方法:,hadoop fs-ls,查看目录下文件,lsr,使用方法:,hadoop fs-lsr,递归查看文件,mkdir,使用方法:,hadoop fs-mkdir-p,创建目录,,-p,参数是创建各级父目录,touchz,使用方法:,hadoop fs-touchz URI URI,创建一个,0,字节的空文件。,HDFS,常用,shell,HDFS,常用,shell,put,使用方法:,hadoop fs-put .,上传一个或多个本地文件到文件系统。如果,HDFS,中已经存在该文件,那么直接上传会报错。如果第二个路径是个文件夹,那么会上传到文件夹中,如果文件不存在,那么会生成一个文件而非新建一个文件夹。,copyFromLocal,使用方法:,hadoop fs-copyFromLocal URI,上传一个或多个本地文件到文件系统。命令类似,-put,get,使用方法:,hadoop fs-get ,下载文件到本地文件系统。,copyToLocal,使用方法:,hadoop fs-copyToLocal URI,下载文件到本地文件系统。命令类似,-get,HDFS,常用,shell,appendToFile,使用方法:,hadoop fs-appendToFile .,将本地文件追加到,hdfs,文件末尾,mv,使用方法:,hadoop fs-mv URI URI ,将文件从源路径移动到目标路径。这个命令允许有多个源路径,此时目标路径必须是一个目录。不允许在不同的文件系统间移动文件。,text,使用方法:,hadoop fs-text,将源文件输出为文本格式,cat,使用方法:,hadoop fs-cat URI URI,将路径指定文件的内容输出到,stdout,HDFS,常用,shell,rm,使用方法:,hadoop fs-rm URI URI,删除文件,rmdir,使用方法:,hadoop fs-rmdir URI URI.,删除空白文件夹,rmr,(不建议使用),使用方法:,hadoop fs-rmr URI URI.,递归删除。建议使用,rm r,替代该命令,cp,使用方法:,hadoop fs-cp URI URI.,将文件从源路径复制到目标路径。这个命令允许有多个源路径,此时目标路径必须是一个目录。,HDFS,常用,shell,chmod,使用方法:,hadoop fs-chmod-R URI URI,改变文件的权限。使用,-R,将使改变在目录结构下递归进行。命令的使用者必须是文件的所有者或者超级用户。,chown,使用方法:,hadoop fs-chown-R OWNER:GROUP URI URI,改变文件的拥有者。使用,-R,将使改变在目录结构下递归进行。命令的使用者必须是 超级用户。,chgrp,使用方法:,hadoop fs-chgrp-R GROUP URI URI,改变文件所属的组。使用,-R,将使改变在目录结构下递归进行。命令的使用者必须是 文件的所有者或者超级用户。,HDFS,常用,shell,expunge,使用方法:,hadoop fs-expunge,清空回收站,setrep,使用方法:,hadoop fs-setrep-R ,改变一个文件的副本系数。,-R,选项用于递归改变目录下所有文件的副本系数。,其他命令,通过,hadoop fs-help,可以获取所有的命令的详细帮助文件,hdfs fsck,命令,HDFS,支持,fsck,命令用以检查各种不一致。,fsck,用以报告各种文件问题,如,block,丢失或缺少,block,等。,查看文件的块的组成等信息。,使用方法:,hdfs fsck -files-blocks-locations,MapReduce,来源,2004.10,Google,发布了最初的,MapReduce,论文,MapReduce:,大型集群中简化的数据处理,MapReduce,是什么,MapReduce,是一个,编程模型,也是一个处理和生成超大数据集的算法模型的相关实现(,计算框架,),用于,简化分布式集群下的大数据计算,。,MapReduce,计算框架,这个框架在运行时只关心,:,如何分割输入数据,在大量计算机组成的集群上的调度,集群中计算机的错误处理,管理集群中计算机之间必要的通信。,采用,MapReduce,架构可以使那些没有并行计算和分布式处理系统开发经验的程序员有效利用分布式系统的丰富资源,。,MapReduce,编程模型,编程模型:,用户首先创建一个,Map,函数处理一个基于,key/value pair,的数据集合,输出中间的基于,key/value pair,的数据集合,;,然后,再创建一个,Reduce,函数用来合并所有的具有相同中间,key,值的中间,value,值。,MapReduce-,纸牌游戏,MapReduce,方法则是:,给在座的所有玩家中分配这摞牌,让每个玩家数自己手中的牌有几张是黑桃,然后把这个数目汇报给你,你把所有玩家告诉你的数字加起来,得到最后的结论,你想数出一摞牌中有多少张黑桃。直观方式是一张一张检查并且数出有多少张是黑桃?,MapReduce,合并了两种经典函数:,映射(,Mapping,),对集合里的每个目标应用同一个操作。即:,分开计算,输出各自结果,。,化简(,Reducing,),遍历集合中的元素来返回一个综合的结果。即:,合并分开计算的各个结果,得到最终结果。,M,apReduce-,基本思想,如何对付大数据处理:,分而治之,对相互间不具有计算依赖关系的大数据,实现并行最自然的办法就是采取分而治之的策略,M,apReduce-,基本思想,上升到抽象模型:,Mapper,与,Reducer,MapReduce,借鉴了,Lisp,函数式语言中的思想,用,Map,和,Reduce,两个函数提供了高层的并行编程抽象模型,上升到构架:,统一计算框架,,为程序员隐藏系统层细节,为,MapReduce,设计并提供了统一的计算框架,为程序员隐藏了绝大多数系统层面的处理细节,(,存储、划分、分发、结果收集、错误恢复,),M,apReduce-,工作原理,M,apReduce-,工作原理,整个系统主要有三部分构成:,user program,(客户端)、,master,(主控程序)、,worker,(工作单元,部署在各个数据,/,计算节点上),客户端(,user program,)与,master,通信,提交,mapreduce,程序到,master,,,Master,监控集群中的空闲资源(每个,worker,向其汇报),收到客户端请求后,为该,mapreduce,程序分配多个,map,任务和,reduce,任务,一个被分配了,map,任务的,worker,读取相关输入文件分片的内容。它从输入数据中分析出,key/value,对,然后把,key/value,对传递给用户自定义的,map,函数。由,map,函数产生的中间,key/value,对被缓存在内存中,缓存在内存中的,key/value,对被周期性的写入到本地磁盘上。,reduce worker,使用远程调用来从,map worker,的磁盘上读取缓存的数据,然后通过排序使具有相同,key,的内容聚合在一起,它把,key,和聚合得,value,集传递给用户自定义的,reduce,函数。,reduce,函数的输出被添加到这个,reduce,分割的最终的输出文件中。,当所有的,map,和,reduce,任务都完成了,管理者唤醒用户程序。在这个时候,在用户程序里的,MapReduce,调用返回到用户代码。,M,apReduce-,适用场景,MapReduce,主要面向对大规模数据的处理,,适用于离线批处理场景,由于每次操作需要遍历所有数据,,MapReduce,并,不适用于需要实时响应,的系统。,MapReduce,程序,wordcount,wordcount,概述,输入:,执行程序:,输出:,$bin/hadoop fs-cat/user/joe/wordcount/input/file01,Hello World Bye World,$bin/hadoop fs-cat/user/joe/wordcount/input/file02,Hello Hadoop Goodbye Hadoop,$bin/hadoop jar wc.jar WordCount/user/joe/wordcount/input/user/joe/wordcount/output,$bin/hadoop fs-cat/user/joe/wordcount/output/part-r-00000,Bye 1,Goodbye 1,Hadoop 2,Hello 2,World 2,MapReduce,工作过程,Input,Mapper,1、读取输入文件,并分片,2,、按,block,分片,每片一个,map,。,Wordcount,输入文件是,2,个小文件,默认,block,大小为,64M,或,128M,,所以每个文件就一片,两个文件共,2,片,,2,个,map,任务。,3,、每个,map,读取对应分片的文件内容,按行提取文件内容,转换成(,key,,,value,)。,key,是数据分片中字节偏移量,,value,值是行内容,FileInputFormat.addInputPath(job,new Path(args0);,public void map(Object key,Text value,Context context,),Mapper,阶段,Map-1,:,Map-2,:,job.setMapperClass(TokenizerMapper.class);,public void map(Object key,Text value,Context context,)throws IOException,InterruptedException,StringTokenizer itr=new StringTokenizer(value.toString();,while(itr.hasMoreTokens(),word.set(itr.nextToken();,context.write(word,one);,Combine,阶段,Map-1,:,Map-2,:,public void reduce(Text key,Iterable values,Context context,)throws IOException,InterruptedException,int sum=0;,for(IntWritable val:values),sum+=val.get();,result.set(sum);,context.write(key,result);,job.setCombinerClass(IntSumReducer.class);,Reducer,阶段,public void reduce(Text key,Iterable values,Context context,)throws IOException,InterruptedException,int sum=0;,for(IntWritable val:values),sum+=val.get();,result.set(sum);,context.write(key,result);,job.setReducerClass(IntSumReducer.class);,Hadoop MapReduce,工作过程,Yarn,Hadoop MapReduce V,1,架构,Hadoop MapReduce V,1,组成,1,),Client,客户端程序,与,JobTracker,通信,提交,mapredce,程序包,2,),JobTracker,JobTracke,相当于,Google MapReduce,中的,master,,负责统一的资源监控和作业调度。,3,),TaskTracker,TaskTracker,相当于,Google MapReduce,中的,worker,,部署在各个数据,/,计算节点上,向,JobTracker,发送本节点的资源情况,接收,JobTracker,的作业调度指令,创建任务或杀死任务,4,),Task,Task,分为,Map Task,和,Reduce Task,两种,均由,TaskTracker,启动。,Hadoop MapReduce V,1,问题,JobTracker,是,Map-reduce,的集中处理点,存在单点故障。,JobTracker,完成了太多的任务,造成了过多的资源消耗,当,map-reduce job,非常多的时候,会造成很大的内存开销,增加了,JobTracker fail,的风险。,在,TaskTracker,端,以,map/reduce task,的数目作为资源的表示过于简单,没有考虑到,cpu/,内存的占用情况,如果两个大内存消耗的,task,被调度到了一块,很容易出现,OOM,。,在,TaskTracker,端,把资源强制划分为,map task slot,和,reduce task slot,如果当系统中只有,map task,或者只有,reduce task,的时候,会造成资源的浪费,。,源代码层面分析的时候,会发现代码非常的难读,常常因为一个,class,做了太多的事情,代码量达,3000,多行,造成,class,的任务不清晰,增加,bug,修复和版本维护的难度。,Yarn,架构原理,Yarn,架构原理,Yarn,框架有两类进程构成:,ResourceManager,:,负责全局资源的管理和调度分配,NodeManager,:,是每台机器资源管理的代理端,负责本机资源使用的监控以及为,yarn,应用分配运行容器,(,Container,)和创建任务,Container,是,YARN,中资源的抽象,它封装了某个节点上一定量的资源(,CPU,和内存两类资源)。每个,map,或,reduce,任务需要拥有,一定,的,Container,资源以运行。,Yarn,架构原理,ResourceManager,有两种主要组件:,Scheduler and ApplicationsManager.,Scheduler,:负责纯资源调度,为各个应用分配资源。资源调度策略包括,CapacityScheduler,、,FaireScheduler,等。,ApplicationsManager,:负责接收应用程序提交请求(通过,yarn jar,或,hadoop jar,执行程序),创建应用对应的,ApplicationMaster,以及当
展开阅读全文