HDFS(Dadoop Distributed File System)html
Java/shell/Web UIshell
下载客户端/获取样例工程/生产样例工程/导入eclipse/编码服务器
规范1:Java开发时,申请资源须要及时释放。
规范2:HDFS不适用于存储大量小文件。
规范3:HDFS中数据备份3份便可。
规范4:若是有多线程进行login的操做,当第一次登录成功后,全部线程再次登录时应该使用relogin的方式。多线程
在Hadoop的底层有个很是重要的部分,咱们通常称之为“核心”——分布式文件存储系统,即HDFS。我以前说过,单个服务器的内存和磁盘空间是有上限的,不可能无限支持线性增长。面对海量的大数据,单个服务器是存不下的,这辈子都不可能存的下的。面对传统存储的技术瓶颈,“分布式”的概念就很好的解决了问题。app
GFS的设计理念有两个很重要的假设:只存储大文件、不能修改(update)只能追加(append)。他有几个显著的特性:eclipse
一、NameNode(NN节点)分布式
二、DataNode(DN节点)oop
三、SecondaryNameNode大数据
四、Editlog
五、FsImage
PS:NameNode的内存中是FsImage+EditLog
六、热备份
七、冷备份
同SecondaryNmaeNode
这个咱们能够类比图书馆,写就是新书入馆,读就是客户借书。你们应该听过一个问题:把大象装进冰箱分几步?咱们就以3大步来看这个问题。
先看看写流程。有一批新书要入馆,咱们要走哪些流程?
根据图书馆的例子,运用到HDFS上:
Round1 写流程
A:打开冰箱门
一、用户在客户端(Client)发起写命令,存入一个文件
①用户需先将文件分块,通常块大小为128MB
②还须要制定文件的副本参数,通常为3
二、客户端向NN节点发起写请求
①请求信息中包含但不限于文件大小(块)、副本参数
三、NN节点收到请求,给Client发送一个回复信息
①NN从本身管理的(DN)节点信息中找出适合的3个(与副本参数一致)DN节点
②将选中的DN节点地址和路径参数的等信息发送给Client
B:把大象塞进去
一、Client收到回复信息,开始发送第一个数据块(Block)
①Client经过NN的回复信息找到第一个DN节点,开始发送数据块,以及备份副本DN地址列表
②第一个DN开始按数据包分批接受Block存盘,每存盘一个数据包同时将相同的数据包再转发给的二个DN节点,以此类推直到最后一个DN节点存盘后不在转发
③全部DN都接受到了完整的Block后,向NN节点发送确认信息,第一个DN节点还要向Client发送确认信息
二、Client收到第一个Block存盘完毕的信息后开始执行第二个Block的操做,从新向NN节点发送请求
C:关闭冰箱门
一、Client收到DN节点最后一个Block存盘成功的确认信息后,向NN节点发送结束信息
二、NN节点收到Client发来的结束信息,关闭目录文件,此时存储文件的元数据信息已经记录在了目录文件中
小结:在写流程中,Client负责发起命令,将文件分块和设置副本参数;NN节点负责协调Client和DN节点的交互,包括为每一个文件的多个数据块分配存储地址及记录元数据;DN负责干活,存储从Client发来的数据,同时多副本机制保障了数据的高可靠性。
Round2 读流程
读流程相较于写流程基本一致,且实现更加简单,我就简单描述一下:
一、NN的高可靠性
NN节点做为HDFS的管理者,里面存储了全部文件数据的元数据和节点的状态信息。一旦NN节点宕机那么全部文件的元数据将会丢失,海量的文件数据被存放在不一样的DN节点上,元数据的丢失意味着丢失了查找数据的能力。为防止因为NN节点的宕机而致使的元数据丢失,咱们采用NN节点的冗余备份机制。NN节点的备份分为冷备份和热备份,在第二部分也将这两个备份的概念简单说了一下,如今详细介绍一下。
上一篇随笔简单讲到Hadoop分为三个层次,中间层负责资源协调。ZooKeeper就是协调机制,在HDFS中主要就是协调选举主备NameNode节点。每一个NN节点都会经过“心跳”与ZooKeeper保持联系,报告本身的状态信息。ZooKeeper经过这些状态信息选举出主NN节点做为整个HDFS的管理节点,其余做为备份。备份NN通常不工做,但数据会与主NN节点同步更新。当主NN节点宕机后,其与ZooKeeper的联系就会中断,ZooKeeper接受不到主NN发来的心跳信息就默认主NN节点损坏,会在备选NN节点中从新选举主NN节点。虽然备NN节点不工做,但它里面的元数据信息和DN节点状态信息跟主NN节点是同步更新的,因此一旦备NN被选为主NN节点,会马上接替主NN节点的工做。固然,这是热备份。
冷备份,即SecondaryNameNode。它与主NN节点之间有个“元数据持久化”机制
①当有对元数据执行操做时,NN节点会生成新的对应日志文件(Editlog.new)
②NN节点内存里存放的是日志文件(Editlog)和元数据镜像文件(Fsimage),SecondaryNN经过NN节点同步获取获得
③SecondaryNN中将两者合并成新的镜像文件Fsimage.ckpt文件
④SecondaryNN将新生成的镜像文件上传到主节点上
⑤Fsimage.ckpt在主节点上回滚成Fsimage文件,其实就是将原来的镜像文件更新NN
⑥此时在以前过程当中新的日志文件(Editlog.new)已经变成Editlog,不在是新日志,与更新后的镜像文件从新同步到SecondaryNN上,重复以上操做
NN和SecondaryNN的工做目录存储结构彻底相同,因此,当NN故障退出须要从新恢复时,能够从SecondaryNN的工做目录中将Fsimage拷贝到NN的工做目录,以恢复NN中的元数据。
二、DN的高可靠性
DN节点做为实际存储数据的执行者,其高可靠性主要就是数据的副本机制,即数据冗余存储。当数据写入HDFS时,Client有个”副本参数“设置,这就是咱们对数据的备份。并且咱们在备份时选择的时不一样的DN节点来进行存储,一次来保证在一台DN损坏的状况下,依靠其余DN节点依然能够恢复数据。
DN节点受NN节点的监控,它们之间也有”心跳“联系的机制。DN节点定时向NN节点发送本身的状态信息,NN节点经过这些信息监控DN节点。当NN节点在一段时间内没有接受到某台DN节点的心跳信息,则认为该DN节点损坏。此时NN节点会根据本身的元数据信息肯定其所存放数据的副本的DN节点,从新找一带DN节点,根据副本数据进行备份。同时修改元数据信息和DN节点状态信息。这样,经过NN节点的调控备份,始终使数据保持必定数量的副本,保证了数据的完整性。