资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第3章Hadoop分布式文件系统,目,录,1,认识HDFS,HDFS相关概念,HDFS体系结构,HDFS运行原理及保障,2,3,4,3.1.1 认识HDFS,1、分布式文件系统,相对于传统的本地文件系统而言,分布式文件系统(Distributed File System)是一种通过网络实现文件在多台主机上进行分布式存储的文件系统。分布式文件系统允许将一个文件通过网络在多台主机上以多副本的方式进行存储,实际上就是通过网络来访问文件,但用户和程序看起来跟访问本地的磁盘一样。,目前,应用广泛的分布式文件系统主要包括GFS和HDFS,HDFS是GFS的开源实现。,3.1.1 认识HDFS,2、HDFS简介,HDFS是Hadoop分布式文件系统(Hadoop Distributed File System)的缩写,是Apache Hadoop的核心子项目。HDFS支持海量数据的存储,是分布式计算中数据存储和管理的基础,是基于流数据模式访问和处理超大文件的需求而开发的,可以运行于廉价的商用服务器上。它所具有的高容错、高可靠性、高可扩展性、高吞吐率等特征为海量数据提供了不怕故障的存储,为超大数据集的应用处理带来了很多便利。,3.1.1 认识HDFS,3、HDFS的优缺点,优点,:,(1)支持超大文件的处理,(2)支持流式的访问数据,(3)可构建在廉价机器上,3.1.1 认识HDFS,3、HDFS的优缺点,缺点,:,(1)不适合低延时数据访问,(2)无法高效存储大量小文件,(3)不支持多用户并发写入和任意修改文件,3.1.2 HDFS相关概念,1、数据块(Block),传统的文件系统中,为提高磁盘读写效率,通常不是以字节为单位,而是以数据块为单位。HDFS同样采用了数据块的概念,最基本的存储单位即是数据块,Hadoop3.0版本默认数据块的大小是128M(有些旧版本为64M)。,3.1.2 HDFS相关概念,2、名称节点(Namenode),在HDFS中,名称节点主要负责管理分布式文件系统的命名空间,它将所有的文件和文件夹的元数据保存在一个文件系统树中。Namenode是整个文件系统的管理节点,维护着整个文件系统的文件目录树,元数据信息和每个文件对应的数据块列表,并接收用户的操作请求。,3.1.2 HDFS相关概念,3、数据节点(Datanode),在HDFS中,数据节点是工作节点,负责数据的真正存储和读取,会根据Namenode的调度来进行数据的存储和检索,并且定期向Namenode发送自己所存储的块的列表。所有数据节点的数据保存在各自节点的本地Linux文件系统中。,3.1.2 HDFS相关概念,4、第二名称节点(Secondary Namenode),Secondary Namenode并不是Namenode节点出现问题时的备用节点,HDFS也并不支持把系统直接切换到Secondary Namenode。,NameNode元数据信息存储在FsImage中,NameNode每次重启后会把FsImage读取到内存中,在运行过程中为了防止数据丢失,NameNode的操作会被不断的写入本地EditLog文件中。,3.1.3 HDFS体系结构,HDFS采用了主从(Master/Slave)结构,如图3-1所示。一个HDFS集群是由一个名称节点(NameNode)和多个数据节点(DataNode)组成,通常配置在不同的机器上。名称节点作为中心服务器,负责管理文件系统的命名空间及客户端对文件的访问。而数据节点,通常是一个节点一台机器,是分布式文件系统HDFS的工作节点,负责对应节点数据的存储和读取,会根据客户端或者是名字节点的调度来进行数据的存储和检索。,3.1.3 HDFS体系结构,3.1.4 HDFS运行原理及保障,一、HDFS读写流程,1、HDFS读数据流程,客户端通过连续调用open()、read()、close()读取数据,具体执行过程如下图3-2所示:,3.1.4 HDFS运行原理及保障,3.1.4 HDFS运行原理及保障,一、HDFS读写流程,(1)客户端发送请求,调用DistributedFileSystem的create方法创建文件。调用create方法后,DistributedFileSystem会创建FSDataOutputStream输出流。,(2)DistributedFileSystem通过RPC远程调用Namenode,在文件系统的命名空间中创建一个新文件。此时,Namenode会做一系列的检查,比如文件是否已经存在、客户端是否拥有创建文件权限等。若通过检查,Namenode会构造一个新文件,并添加相关文件信息。,3.1.4 HDFS运行原理及保障,一、HDFS读写流程,(3)客户端调用FSDataOutputStream的write方法将数据写到一个内部队列中。如果数据副本数量是3,则将队列中的数据写入3个副本对应的Datanode上。但并不是由客户端分别往3个Datanode上写3份,而是由已经收到数据包的第一个Datanode,将数据包发送给第二个Datanode,第二个datanode再将数据包发送给第三个Datanode。,3.1.4 HDFS运行原理及保障,一、HDFS读写流程,(4)每个DataNode写完一个块后,会返回确认信息。FSDataOutputStream内部维护着一个确认队列。当接收到所有DataNode确认写完的信息后,数据才会从确认队列中进行删除。,(5)当客户端写完所有数据,调用close方法关闭输出流。,3.1.4 HDFS运行原理及保障,二、HDFS副本机制与机架感知策略,HDFS作为一个分布式文件系统,为了保证其系统的可靠性和容错性,采用了多副本的方式存储数据。副本的数量可以在hdfs-site.xml配置文件中通过参数设定,如下所示。通常每个数据块默认三个副本,每个副本会分配到不同的数据节点上。,dfs.replication,3 -此处的3代表三个副本,3.1.4 HDFS运行原理及保障,二、HDFS副本机制与机架感知策略,HDFS数据块默认副本为三,通常每个数据块都会被保存在不同的三个地方。其中,有两个副本存储在同一个机架的不同机器上面,第三个副本存储在不同机架的机器上面,.,3.1.4 HDFS运行原理及保障,二、HDFS副本机制与机架感知策略,HDFS的副本放置策略如下:,(1)若是在集群内部发起的写操作请求,则把第一个副本放置在发起写操作请求的数据节点上,实现就近写入数据。若是来自集群外部的写操作请求,则随机挑选一个磁盘不太满、CPU不太忙的数据节点进行第一个副本的存储。,(2)第二个副本会被放置在和第一个副本不同机架数据节点上。,(3)第三个副本则会被放置在和第二个副本相同机架不同数据节点上。,(4)如果还有更多的副本,则会随机从集群中选择数据节点进行存放,。,3.1.4 HDFS运行原理及保障,三、数据复制和心跳机制,HDFS采用主从模式,主节点Namenode,从节点Datanode,Namenode和Datanode主要通过心跳的方式进行通信。Datanode向Namenode定期发送心跳报告,报告自己的存活状态和自己存储的块信息。,3.1.4 HDFS运行原理及保障,四、HDFS负载均衡,HDFS上的数据也许并不能非常均匀地分布在各个DataNode中。HDFS集群也非常容易出现机器与机器之间磁盘利用率不平衡的情况,其中一个常见的原因是在现有的集群上经常会增添新的DataNode。当新增一个数据块(一个文件的数据被保存在一系列的块中)时,NameNode在选择DataNode接收这个数据块之前,要考虑到很多因素。,3.1.4 HDFS运行原理及保障,其中某些因素如下:,(1)将数据块的一个副本放在正在写这个数据块的节点上。,(2)尽量将数据块的不同副本分布在不同的机架上,这样集群可在完全失去某一机架的情况下还能存活。,(3)一个副本通常被放置在和写文件的节点同一机架的某个节点上,这样可以减少跨越机架的网络I/O。,(4)尽量均匀地将HDFS数据分布在集群的DataNode中。,3.2.1使用HDFS shell访问,Hadoop支持很多Shell命令,可以查看HDFS文件系统的目录结构、上传和下载数据、创建文件等。,Hadoop可以使用的三种shell命令方式:,(1)hadoop fs,可以适用于任何不同的文件系统。,(2)hadoop dfs,只能适用于HDFS文件系统,旧版本曾使用过,已过时。,(3)hdfs dfs,只能适用于HDFS文件系统,目前较常用。,3.2.1使用HDFS shell访问,1、常用Shell命令解析,(1)hdfs dfs-appendToFile .,可同时上传多个文件到HDFS里面。,(2)hdfs dfs-cat URI URI.,查看文件内容。,(3)hdfs dfs-chgrp-R GROUP URI URI.,修改文件所属组。,(4)hdfs dfs-chmod-R URI URI.,修改文件权限。,3.2.1使用HDFS shell访问,1、常用Shell命令解析,(5)hdfs dfs-chown-R OWNER:GROUP URI URI,修改文件所有者,文件所属组,其他用户的读、写、执行权限。,(6)hdfs dfs-copyFromLocal URI,复制文件到hdfs。,(7)hdfs dfs-copyToLocal-ignorecrc-crc URI,复制文件到本地。,(8)hdfs dfs-count-q,统计文件及文件夹数目。,3.2.1使用HDFS shell访问,1、常用Shell命令解析,(9)hdfs dfs-cp-f URI URI.,Hadoop HDFS 文件系统间的文件复制。,(10)hdfs dfs-du-s-h URI URI.,统计目录下的文件及大小。,(11)hdfs dfs-dus,汇总目录下的文件总大小。,(12)hdfs dfs-get-ignorecrc-crc ,下载文件到本地。,3.2.1使用HDFS shell访问,1、常用Shell命令解析,(13)hdfs dfs-getmerge addnl,合并下载文件到本地。,(14)hdfs dfs-ls,查看目录。,(15)hdfs dfs-ls-R,循环列出目录、子目录及文件信息。,(16)hdfs dfs-mkdir-p,创建空白文件夹。,3.2.1使用HDFS shell访问,1、常用Shell命令解析,(17)dfs-moveFromLocal ,剪切文件到hdfs。,(18)hdfs dfs-moveToLocal-crc ,剪切文件到本地。,(19)hdfs dfs-mv URI URI.,剪切hdfs文件。,(20)hdfs dfs-put .,上传文件。,3.2.1使用HDFS shell访问,1、常用Shell命令解析,(21)hdfs dfs-rm-skipTrash URI URI.,删除文件/空白文件夹。,(22)hdfs dfs-rm-r-skipTrash URI URI.,递归删除 删除文件及文件夹下的所有文件。,(23)hdfs dfs-setrep-R-w ,修改副本数。,(24)hdfs dfs-stat URI URI.,显示文件统计信息。,3.2.1使用HDFS shell访问,1、常用Shell命令解析,(25)hdfs dfs-tail-f URI,查看文件尾部信息。,(26)hdfs dfs-test-ezd URI,对PATH进行如下类型的检查:,-e PATH是否存在,如果PATH存在,返回0,否则返回1;,-z 文件是否为空,如果长度为0,返回0,否则返回1;,-d 是否为目录,如果PATH为目录,返回0,否则返回1。,(27)hdfs dfs-text,查看文件内容。,(28)hdfs dfs-touchz URI URI.,创建长度为0的空文件。,谢 谢,
展开阅读全文