Hadoop分布式文件系统

4星(超过85%的资源)
所需积分/C币:9 2011-10-18 21:02:19 387KB PDF
10
收藏 收藏
举报

引言 Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统。它和现有的分布式文件系统有很多共同点。但同时,它和其他的分布式文件系统的区别也是很明显的。HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的。HDFS在最开始是作为Apache Nutch搜索引擎项目的基础架构而开发的。HDFS是Apache Hadoop Core项目的一部分。
HDFS Architecture Metadata(Name, re /home/foo/data Metadata ops Namenode Client Block ops Read Datanodes Datanode Replication Rack 1 Write Rack 2 Client Namenode和υ atanode被设计成可以在普通的商用机器上运行。这些机器一般运行着GNU/ Linux操作系统(OS)。HDFS 采用 Java语言开发,因此任何支持Java的机器都可以部署 Namenσde或 Lalande由于采用了可移植性极强的Java语言, 使得HDFS可以部署到多种类型的机器上。一个典型的部署场景是一台机器上只运行一个 Namenode实例,而集群中的其它 机器分别运行一^ Datanode实例。这和架构并不排斥在一台机器上运行多个 Datanode,只不过这样的情况比较少见。 集群中单一 Namenode的结构大大简化了系统的架构。 Namenode是所有HDFS元数据的仲裁者和管理者,这样,用户数据 永远不会流过 Namenode。 文件系统的名字空间( namespace) HDFS支持传统的层次型文作组织结构。用户或者应用程序可以创建日录,然后将文件保存在这些日录里。文件系统名字空 间的层次结构和大多数现有的文件系统类似:用户可以创建、除、移动或亘命名文件。当前,HDFS不支持用户磁盘配额 和访问权限控制,也不支持硬链接和软链接。但是HDFS架杓并不妨碍实现这些特性。 Namenode负责维护文件系统的名字空间,任何对文件系统名字空间或属性的修改都将被 Namenode记录下来。应用程序可 以设置HDFS保存的文件的副本数日。文件副本的数日称为文件的副本系数,这个信息也是由 Namenode保存的。 数据复制 HDFS被设计坟能够在一个大集群屮跨机器π靠地存储超大文件。它将每个文件存储成一系列的数据垬,除了最后一个,所 有的数据块都是同样大小的。为了容错,文件的所有数据块都会有昌本。每个文件的数据块大小和副本系数都是可配置的。 应用程序可以指定某个文件的副本数目。副本系数可以在文件创建的时候指定,也可以在之后改变。HDFS中的文件都是 次性写入的,并且严格要求在任何时候只能有一个写入者。 Namenode仝权管理数据块的复制,它周期性地从集群中的每个 Datanode接收心跳信号和块状态报告( Lockeport)ε接收 到心珧信号意味着该 Datanode节点工作正常。块状态报告包含了一个该 Datanode上所有数据块的列表 Block Replication Namenode(Filename, numReplicas, block-ids /users/sameer/data/part-0, r: 2, 1, 31 /users/sameer/datalpart-1, r:3, 2, 4, 5 Datanodes 2 4 2 2 3 3 5 副本存放:最最开始的一步 副本的存放是HDFS可靠性和性能的关键。优化的副本存放策略是HDFS区分于其他大部分分布式文件系统的重要特性。这 种特性需要做大量的调优,并需要经验的积累。HD)FS采用一种称为机榘感知( rack-aware)的策略来改进数据的可靠性、可用 性和网络带宽的利用率。目前实现的副本伃放策略只是在这个方向上的第一步。实现这个策眳的短期目标是验证它在生产环 境下的冇效性,观察它的行为,为实现更先进的策略打下测试和研究的基础。 大型HDFS实例一般运行在跨越多个机架的计算机组成的集群上,不同杋架上的内台机器之间的通讯需婺经过交换机。在大 多数情况下,冋一个机架內的两台机器间的带宽公比不同机架的两台机器间的带宽大。 通过一个机架感知的过程, Namenode可以确定每个 Datanode所属的机架id。一个简单但没有优化的策略就是将副本存放 在不同的机架上。这样可以有效防止当整个机架失效时数据的丢失,并且允许读数据的时候充分利用多个机架的带宽。这种 策略设置可以将副本均匀分布在集群中,有利亍当组件失效情况下的氕毂均襖。但是,因为这种鏺略的个与操作需要传输 数据块到多个机架,这增加了写的代价 在大多数情况下,副本系数是3,HDFS的存放簧略是将一个副本存放在本地机架的节点上,一个副本放在同一机架的另 个节点上,最后一个副本放在不冋机架的节点上。这种簧略减少了机架间的数据传输,这就提高了写操作的效率。机架的钴 误远远比节点的错诀少,所以这个略不会影响到数据的可靠性和可用性。丁此同时,因为数据块只放在两个(不是三个) 不同的机架上,所以此策略减少了读取数据时需要的网终传输总带宽。在这种策略下,副本并不是均匀分布在不同的机架上。 三分之一的副本在一个节点上,三分之一的副本在一个机架上,其他副本均匀分布在刈下的机架中,这一策略在不损害数据 π靠性和读取性能的情况下改进了写的性能。 当前,这里介绐的默认副本存放策暤正在开发的过程中。 副木选择 为了降低整体的带宽消耗和读取延时,HDFS会尽量让读取程序读取离它最近的副木。如果在读取程序的同一个机架上有 个副本,那么就读取该副本。如果一个HDFS集群跨越多个数据屮心,那么客户端也将首先读本地数据屮心的副本。 安全模式 Namenode启动后会进入一个称为安全模式的特殊状态。处于安全模式的 Namenode是不会进行数据块的复制的。 Namenode 从所有的 Datanode接收心跳信号和块状态报告。块状态报告包括了某个 Datanode所有的数据块列表。每个数据块都有 个指定的最小副数。当 Namenode检测确认某个数据块的副⌒数目达到这个最小值,那么该数据块就会被认为是副本安全 〔 safely replicated)的:在一定百分比(这个参数可配置)的数据块被 Namenode检测确认是安全之后(加上一个额外的30 秒笮待时间), Namenode将退出安全模式状态。接下来它会确定还有哪些数据块的副本没有达到指定数目,并将这些数据 块复制到其他 Datanode上 文件系统元数据的持久化 Namenode上保存看HDFS的名宇空间。对于任何对文件系统元数据产生修改的操作, Narnenode都会使用一种称为 cdialog 的事务日志记录下米。例如,在HDFS中创建一个文件, Namenode就会! editlog中插入一条记录米表示;同样地,修改 文件的副本系数乜将往 Editlog插入一条记录。 Namenode在本圯操作系统的文件系统中存储这个 Editlog。整个文件系统的 名字空间,包括数捱块到文件的映射、文件的属性等,都存储在一个称为 Talmage的文件屮,这个文件也是放在 Namenode 所在的本地文件系统上。 Namenode在内存中保亻着整个文件系统的名字空间和文件数据块映射( Blockmap)的映像。这个关键的元数据结构设计得很 紧凑,因而一个有4G内存的 Namenode足够支撑大量的文件和目录。当 Namenode启动时,它从硬盘中读取 editlog和 Fslmage,将所有 Editlog中的事务作用在内存中的 Fslmage上,并将这个新版本的 Talmage从内存中保存到本地磁盘上, 然后删除旧的 Editio,因为这个旧的 Editlog的事务都已经作用在 Fslmage上了。这个过程称为一个检查点( checkpoint) 在当前实现中,检査点只发生在 Namenode启动时,在不久的将来将实现攴持周期性的检查点。 Datanode将HDFS数据以文件的形式存储在本地的文件系统中,它并不知道有关HDFS文件的信息。它把每个HDFS数据 块存储在本地文件系统的一个单独的文件中。 Datanode并不在同一个目录创建所有的文件,实际上,它用试探的方法来确定 每个目录的最佳文件数目,并且在适当的时候创建子目录。在同一个目录中创建所有的本地文件并不是最优的选择,这是因 为本地文件系统可能无法高效地在单个目录中支持大量的文件。当一个 Datanode启动时,它会扫描本地文件系统,产生 个这些本地文件对应的所有HDFS数据块的列表,然后作为报告发送到 Namenode,这个报告就是块状态报告 通讯协议 所有的HDFS通讯协议都是建立在TCP/P协议之上。客户端通过一个可配置的TCP端口连接到 Namenode,通过 ClientProtocol协议与 Namenode交互而 Datanode使用 Datanode protocol协议与 Namenode交互。一个远程过程调用(RPC) 模型被抽象出来封装 ClientProtocol和 Datanodeprotocol协议。在设计上, Namenode不会主动发起RPC,而是响应来自客 户端或 Datanode的RPC请求 健壮性 HI)門S的主要目标就是即使在出错的情况下也要保证数据存储的可靠性。常见的种出错情况是: Namenode出错, Datanode 出错和网络割裂( network partitions)。 磁盘数据错误,心跳检测和重新复制 每个 Datanode节点周期性地向 Namenode发送心跳信号。网络割裂可能导致一部分 Datanode跟 Namenode失去联系。 Namenode通过心眺信号的缺失来检测这情况,并将这些近期不再发送心跳信号 Datanode标记为宕机,不会再将新的IO 请求发给它们。任何存储在宕机 Datanode上的数据将不再有效。 Datanode的宕机可能会引起一些数据块的副本系数低于指 定值, Namenode不所地检测这些需要复制的数据块,一日发现就启动复制操作。在下列情况下,可能需要重新复制:某个 Datanode节点失效,某个副本遭到损坏, Datanode上的硬盘错误,或者文件的副本系数増大 集群均衡 HDFS的架构支持薮据均衡策略。如果某ˆ Datanode节点上的空闲空间低于特定的临界点,按照均衡策略系统就会自动地 将数据从这个 Datanode移动到其他空闲的 Datanode。当对某个文件的请求突然增加,那么也可能启动一个计划创建该文件 新的副本,并且同时重新平衡集群中的其他数据。这些均衡策略日前还没有实现。 数据完整性 从某个 Datanode获取的数捱块冇可能是损坏的,损坏可能是由 Datanode的存储设备错误、网络错误或者软件bug造成的。 HDFS客户端软件实现了对HDFS文件内容的校验和( checksum)检査。当客户端创建一个新的H)FS文件,会计算这个文件 每个数据块的校验和,并将校验和作为一个单独的隐藏文件保存在同一个HDFS名字空间下。当客户端获取文件内容后,它 会检验从 Datanode扒取的数据跟相应的校验和文件中的校验和是否匹配,如果不匹配,各户端可以选择从其他 Datanode 获取该数据块的副本。 元数据磁盘错误 Talmage和 Editlog是HDFS的核心数据结构。如果这些文件损坏了,整个HDFS实例都将失效。因而, Namenode可以配 置成支持维扩多个 Talmage和 Editlog的副本。仨何对 FsImage或者 Editlog的修改,都将同步到它们的副本上。这种多副 本的同步操作可能会降低 Namenode每秒处理的名字空间事务数量。然而这个代价是可以接受的,因为即使HDFS的应用是 数据密集的,它们也非元数据密集的。当 Namenode重启的时候,它会选取最近的完整的 Talmage和 Editlog来使用。 Namenode是HDFS集群中的单点故障( single point of failure)所在。如果 Namenode机器故障,是需要手工干预的。目前, 自动重启或在另一台机器上做 Namenode故障转移的功能还没实现。 快照 快照支持某一特定时刻的数据的复制备份。利用快照,可以让HDFS在数捱损坏时恢复到过去一个匚知正确的时间点:IDFS 目前还不支持快照功能,但计划在将来的版本进行支持。 数据组织 数据块 HDFS祓设计成支持大文件,适用HDFs的是郏些需要处哩大规模的数据集的应用。这些应用都是只写入数据一次,但去读 取一次或多次,并且读取速度应能满足流式读取的需要。HDFS支持文件的“一次写入多次读取”语义。一个典型的数据块大 小是64MB。因而,HDFS中的文件总是按照64M被切分成不同的块,每个块尽可能地存储丁不同的 Datanode中 Staging 客户端创建文件的请求其实并没有立即发送给Naπenυde,事实上,在刚开始阶毆HDFS客户端会先将文件数据缓存到木地 的一个临时文件。应用稈序的写操作被透明地重定问到这个临时文什。当这个临时文件累积的数据量超过一个数据块的大小, 客户端才会联系 Namenode. Narnenode将文件名插入文件系统的层次结构中,并且分配一个数据块给它。然后返回 Datanode 的标识符和目标数据块给客户端。接着客户端将这块数据从本地临时文件上传到指定的 Datanode上。当文件关闭时,在临 时文件中剩余的没有上传的数据也会传输到指定的 Datanode上。然后客户端告诉 Namenode文件已经关闭。此时 Namenode 才将文件创建操作提交到日志里进行存储。如果 Namenode在文件关闭前宕机了,则该文件将丢尖。 上述方沄是对在HDFS上运行的目标应用进行认真考虑后得到的结某。这些应用需要进行文件的流式写入。如不采用客户 端缓存,□于网络速度和网络堵塞会对吞估量造成比较大的影响。这种方法并不是没有先例的,早期的文件系统,比如AFS: 就用客户端缓存来提高性能。为了达到睫高的数据上传效率,已经放松了 POSIX标准的要求。 流水线复制 当客户端向HDFS文件写入数据的时候,一开始是写到本地临时文件中。假设该文件的副本系数设置为3,当本地临时文件 累积刭一个数据垬的大小时,客户端会从 Namenode获取一个 Datanode列表用于存放副。然后客户端开始向第一个 Datanode传输数据,第一个 Datanode一小部分一小部分(4KB)地接收数据,将每一部分写入本地仓库,并同时传输该部分 到列表中第二个 Datanode节点。第二个 Datanode也是这样,一小部分一小部分地接收数据,写入本地仓库,并同时传给第 三个 Datanode最后,第三个 Datanode接收数据并存储在本地。因此, Datanode能流水线式地从前一个节点接收数据 并在同时转发给下一个节点,数据以流水线的方式从前一个 Datanode复制到下一个。 可访问性 HDFS给应用提供了多种访问方式。用广可以通过 Java API接口访问,也可以通过C语言的封装API访问,还可以通过浏 览器的方式访问HDFS中的文件。道过 WebDaⅤ协议访问的方式正在开发中。 DESShell HDFS以文件和目录的形式组织用户数据。它提供了一个命令行的接口( DFSShe让用户与HDFS中的数据进行交互。命令 的语法和用户熟悉的其他shel(例如bash,csh)工具类似。下面是一些动作/命令的示例 动作 命令 创建一个名为/ foodie的目 bin/hadoop dfs -mkdir /foodi r 创建一个名为/ foodie的目录 bin/hadoop dta -kir ,foodir 查看名为/ foodie/ myfile.txt的文件内容 bin/hadoop dfa -cat /foodie/myfilc. tx- DFSShell可以用在那些通过脚本语言和文件系统进行交互的应用程序上。 DESAdmin DFSAdmin命令用来管理HDFS集群。这些命令只有HDSF的管理员才能使用。下面是一些动作/命令的示例 动作 命令 将集群置于安全模式 bin/hadoop dfsadnin -safemode enter 显示 Datanode列表 bin/hadoop dfsadmin -report 使 Datanode节点 datanodename退役 bin/hadoop afsadmin -decommission catanodename 浏览器接口 一个典型的HDFS安装会在一个可配置的TCP端口开启一个Web服务器用于暴露HDFS的名字空间。用户可以用浏览器米 浏览HDFS的名字空间和查看文件的内容。 存储空间回收 文件的删除和恢复 当用户或应用程序删除某个文件时,这个文件并没有立刻从HDFS中删除。实际上,H)FS会将这个文件重命名转移到/ trash 日汞。只要文件还在/ trash日录中,该文件就可以被迅速地恢复。文件在/trεsh中保存的时间是可配置的,当超过这个 时间时, Namenode就会冷该文件从名字空间中删除。删除文件会使得该文件相关的数据块被释放。注意,从用户删除文件 到HDFS空闲空间的增加之间会有一定时间的延迟。 只要祓删除的文件还在/ trash目录中,用户就可以恢复这个文件。如果用户想恢复被删狳的文作,他/她可以浏览/ trash 目求找回该文件。/tash目录仅仅保存被删除文件的最后副本。/ trash目录与其他的目录没有什么区别,除了一点:在 该目录上HDFS会应用一个特姝策略來自动删除文件ε目前的默认策咯是删狳/rash中保留时冋超过6小时的文件。将来, 这个策略可以通过一个被良好定义的接口配置。 减少副本系数 当一个文件的副本系数被减小后, Namenode会选择过剩的副本删除。下次心跳检测时会将该信息传递给 Datanode Datanode遂即栘除相应的数据块,集群中的空內空间加大。同样,在调用 setReplication API结束和集群中空闲空冋增 加间会有一定的延迟

...展开详情
试读 9P Hadoop分布式文件系统
立即下载 身份认证VIP会员低至7折
一个资源只可评论一次,评论内容不能少于5个字
my_flash 不错,以后的发展方向了
2014-04-22
回复
archesalb 可以了解hdfs
2013-07-18
回复
bluewater535 感谢楼主分享,但对我借鉴意义不大
2013-06-25
回复
xianghui_yang 了解大数据时代,学习系统思想,楼主辛苦了。。。
2013-05-02
回复
Kivenwei HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用
2013-03-30
回复
您会向同学/朋友/同事推荐我们的CSDN下载吗?
谢谢参与!您的真实评价是我们改进的动力~
关注 私信
上传资源赚钱or赚积分
最新推荐
Hadoop分布式文件系统 9积分/C币 立即下载
1/9
Hadoop分布式文件系统第1页
Hadoop分布式文件系统第2页

试读结束, 可继续读1页

9积分/C币 立即下载