1、云计算开发平台 Hadoop系统,钱能武030130733,目录,1.Hadoop概述2.Hadoop分布式文件系统(HDFS)简介3.HDFS基本结构4.HDFS的文件操作5.HDFS的一些设计特点6. MapReduce分布式计算7. Hadoop优势,注:参考书籍分布式系统及云计算概论 陆嘉恒 主编Hadoop实战 陆嘉恒 著,1.Hadoop概述,Hadoop是一个分布式系统基础架构,是一个能够对大量数据进行分布式处理的软件框架,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序,充分利用集群的的威力高速运算和存储。,Hadoop框架中最核心的设计就是:M
2、apReduce和HDFS。,Hadoop程序目前大多运行在Linux系统上,windows上运行需要安装其他插件(Cygwin)。,3.Hadoop分布式文件系统(HDFS)简介,Hadoop也跟其他云计算项目有共同点和目标:实现海量数据的计算。而进行海量计算需要一个稳定的、安全的数据容器,于是就有了Hadoop分布式文件系统(HDFS)。,Hadoop 分布式文件系统是具有高可靠性和高可扩展性的分布式文件系统,能够提供海量的文件存储能力。它的开发和实现遵循了Google 文件系统(GFS)的核心原理,受到了业界极大关注,并已被广泛应用。,4.HDFS基本结构,HDFS基本储存单元,Bloc
3、k(数据块),一个文件有可能包含多个块,一个块有可以包含多个文件,由文件的大小和块大小的参数决定。,HDFS结构特点,HDFS是一个大规模的分布式文件系统,采用master/slave架构。,一个HDFS集群是有一个Namenode和一定数目的Datanode组成。,Namenode是一个中心服务器,负责管理文件系统的名字空间和客户端对文件的访问。,Datanode在集群中一般是一个节点一个,负责管理它所在节点上的存储。,HDFS:Namenode 和 Datanode,从内部看,一个文件其实被分成一个或多个数据块,这些块存储在一组Datanode上。Namenode执行文件系统的名字空间操作
4、,比如打开、关闭、重命名文件或目录。它也负责确定数据块到具体Datanode节点的映射。Datanode负责处理文件系统客户端的读写请求。在Namenode的统一调度下进行数据块的创建、删除和复制。,HDFS把节点分为两类:Namenode和Datanode。 Namenode是唯一的,程序与之通信,然后从Datanode上存取文件。,从外部看,HDFS就像一个分级的文件系统,用户能够以文件的形式在上面创建、删除、移动或重命名文件等。,HDFS集群框架图,HDFS:文件读取和写入基本过程,写入文件: Client向NameNode发起文件写入的请求 NameNode根据文件大小和文件块配置情况
5、返回给Client它所管理部分DataNode的信息 Client将文件划分为多个文件块,根据DataNode的地址信息按顺序写入到每一个DataNode块中,读取文件: Client向NameNode发起文件读取的请求 NameNode返回文件存储的DataNode的信息 Client读取文件信息,5.HDFS的文件操作,HDFS:文件读取流程图,client node,HDFSclient,DistributedFileSystem,FSDataInputStream,1:open,2:get block locations,3:read,4:read,5:read,6:close,cli
6、ent JVM,HDFS:文件写入流程图,client node,HDFSclient,DistributedFileSystem,FSDataInputStream,1:create,2:create,3:write,4:write packet,6:close,client JVM,5:ack packet,7:complete,4:,4:,5:,5:,Pipeline of datanodes,HDFS中的文件都是一次性写入的,并且严格要求在任何时候只能有一个写入者。,HDFS:数据复制,HDFS被设计成能够在一个大集群中跨机器可靠地存储超大文件。它将每个文件存储成一系列的数据块,除了最
7、后一个,所有的数据块都是同样大小的。,为了容错,文件的所有数据块都要备份有副本。每个文件的数据块大小和副本数目都是可配置的。应用程序可以指定某个文件的副本系数。,HDFS:数据复制,数据块(Block)复制: NameNode发现部分文件的Block数不符合最小复制数或者部分DataNode失效 通知DataNode相互复制Block DataNode开始直接相互复制,Namenode全权管理数据块的复制,它周期性地从集群中的每个Datanode接收心跳信号和块状态报告。接收到心跳信号意味着该Datanode节点工作正常。块状态报告包含了一个该Datanode上所有数据块的列表。,问题:节点失
8、效是常态!,DataNode中的磁盘挂了怎么办?DataNode所在机器挂了怎么办?NameNode挂了怎么办?Client挂了怎么办?,DataNode的磁盘挂了怎么办?,DataNode正常服务坏掉的磁盘上的数据尽快通知NameNode,DataNode所在机器挂了怎么办?,问:NameNode怎么知道DataNode挂掉了?答:datanode每3秒钟向namenode发送心跳,如果10分钟datanode没有向namenode发送心跳,则namenode认为该datanode已经dead,namenode将取出该datanode上对应的block,对其进行复制。,NameNode挂了怎
9、么办?,持久化元数据操作日志(edit log)记录文件创建,删除,修改文件属性等操作Fsimage (HDFS元数据镜像文件)包含完整的命名空间File - Block的映射关系文件的属性(ACL, quota, 修改时间等),NameNode挂了怎么办?,Secondary NameNode将NameNode的fsimage (HDFS元数据镜像文件)与edit log(HDFS文件改动日志)从Namenode复制到临时目录将fsimage同edit log合并,并产生新的fsimage (减少启动时间)将产生的新的fsimage上传给NameNode清除NameNode中的edit lo
10、g注: Secondary NameNode仅仅对NameNode中元数据提供冷备方案,Secondary NameNode,辅助NN处理FsImage和事务日志1、从NN拷贝FsImage和事务日志到临时目录2、合并FsImage和事务日志生成一个新的FsImage3、上传新的FsImage到NN上4、NN更新FsImage并清理原来的事务日志,Client挂了怎么办?,问: Client 所在机器挂了有什么影响?答:一致性问题,Create file,get lease,Renew lease,Crash,Lease recovery,Hadoop MapReduce是一种简单易用的软件框
11、架,可以开发出运行在由上千个商用机器组成的大型机器上,并以一种可靠容错的方式并行处理的数据集(太字节级的数据)Map-Reduce 计算模型的实现大规模数据处理的框架所有数据作为KEY-VALUE对进行处理嵌入用户数据处理程序简单计算模型,但可以处理很多不同类型的问题日志数据处理搜索引擎,6、MapReduce分布式计算,Hadoop Map-Reduce对于任务处理的两步:一个MapReduce作业(Jop)通常会把输入集切分成若干独立的数据块,由Map任务(Task)以完全并行的方式处理它们MapReduce框架会先排序map任务的输出,然后把结果输入到reduce任务 通常计算结点和存储
12、结点是同一个结点,也就是说MapReduce框架和HDFS是运行在相同的结点集上。 MapReduce框架是由一个单独运行在主结点的JobTracker和运行在每个集群从结点的TaskTracker(任务跟踪)共同构成。,Map/Reduce 数据流程Input Split (可缺省,由系统完成)Recordreader (可缺省,由系统完成)MapperCombiner (可缺省)Shuffler(partitionner)(可缺省,由系统完成)Sort (可缺省,由系统完成)Reducer (可缺省)Output,MapReduce处理,MapReduce物理上处理过程,MapReduce
13、,MapReduce的key排序逻辑 MapReduce本身Key的数据类型的排序逻辑其实就是依赖于Hadoop本身的继承与WritableComparable的基本数据类型和其他类型(相关类型可参考Hadoop权威指南第二版的90页)的compareTo方法的定义。Key排序的规则:1.如果调用jobconf的setOutputKeyComparatorClass()设置parator.class2.否则,使用key已经登记的comparator3.否则,实现接口WritableComparable的compareTo()函数来操作注:可以修改compareTo来实现自己所需的比较算法,Ma
14、pReduce的二次排序Hadoop的MapReduce模型支持基于key的排序,即在一次MapReduce之后,结果都是按照key的大小排序的。但是在很多应用情况下,我们需要对映射在一个key下的value集合进行排序,即“secondarysort”。在hadoopthedefinateguide的P227的“secondarysort”章节中,以为例,在map阶段按照year来分发temperature,在reduce阶段按照同一year对应的temperature大小排序。,MapReduce,MapReduce,举例:WordCount的Map 过程,WordCount的Reduce
15、 过程,举例:事例MapReduce过程,Hadoop优势:,可扩展。不论是存储的可扩展还是计算的可扩展都是Hadoop的设计根本。经济。它在通常可用的计算机集簇间分配数据和处理,这些集簇可以被计入数以千计的节点当中高效。通过分配数据,Hadoop能够在存放数据的节点之间平行的处理它们,因此其处理速度非常快。可信。Hadoop能够自动保存数据的多份副本,并且能够自动地将失败的任务重新分配,谢谢!,Hadoop环境搭建,硬件环境 实验共使用三台PC机,一台机器用作NameNode,另两台用作DateNode。软件环境 软件统一安装在虚拟机系统VMware上, Linux系统采用Ubuntu,jd
16、k使用jdk1.6.0 版,Hadoop使用hadoop-0.20.2版本。,1.安装环境,2.准备工作,虚拟机VMware的安装 下载安装软件并分别在3台机器上安装。由于3台机器的某盘剩余空间都较大,统一将VMware安装在某盘上,分配磁盘空间时统一分配为10G。 Ubuntu的安装 新建虚拟机,加载Linux系统Ubuntu的iso镜像文件,并在VMware环境下安装Ubuntu 系统。, Ubuntu简单设置 对Ubuntu进行简单的网络设置,使其接入Internet,可使用其自带的语言支持工具将其环境汉化。JDK、SSH的安装 使用Ubuntu自带的“新立得”软件管理工具包,可以搜索、
17、下载并安装JDK、SSH。,准备工作(续),Hadoop的安装 在Ubuntu中,通过网址www.apache.org/dyn/closer.cgi/hadoop/core下载hadoop-0.20.2.tar.gz,解压到/usr/local/hadoop文件夹。,准备工作(续),3.配置工作,配置JDK环境变量 以超级用户身份打开environment文件,在其中添加两个环境变量:CLASSPATH及JAVA_HOME并设置路径值。 配置SSH 在每台机器上新建一个超级用户,取名均为hadoop,并建立SSH Key用来远程登录。,配置工作(续),配置Hadoop 配置$HADOOP_HO
18、ME/conf/hadoop-env.sh,导入JAVA_HOME环境变量值。 配置$HADOOP_HOME/conf/core-site.xml,在其中指定默认文件系统名,默认系统临时目录等。 配置$HADOOP_HOME/conf/mapred-site.xml,指定tracker的默认路径端口。,配置工作(续),格式化、启动 使用-format命令格式化NameNode; 使用start-all.sh命令启动所有的Hadoop进程,包括:namenode,datanode, jobtracker,tasktrack 等四项进程。 通过jps命令查看进程是否启动成功。,进一步工作:,完成例
19、子的测试工作;熟悉Linux命令;熟悉Hadoop工作原理,加深对MapReduce模型的理解。熟悉HBase;,启动hadoop 进入master,打开一个控制器终端,输入命令:cd hadoop/hadoop-1.0.4/bin/,按下enter键,然后输入命令:./hadoop namenode format,按下enter键,执行结果如果如图2.3所示,则表明初始化成功。注意:初始化只需首次启动hadoop时执行一次,以后再启动hadoop,则不需要再进行初始化。,通过浏览器验证hadoop启动是否成功,在浏览器地址栏里分别输入网址:master:50030和master:50070,如果结果如图2.5和图2.6所示,则证明hadoop是启动成功的。,