简介
Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统。它和现有的分布式文件系统有很多共同点。但同时,它和其他的分布式文件系统的区别也是很明显的。HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。
实现原理
数据同步机制
那么,当大量并发读写HDFS,如何保证它的及时响应和故障时数据的安全呢?
首先,像redis一样的方式用内存来存储和读取数据来替代对磁盘操作,然后定时去将内存同步到磁盘中去。
可以内存一旦没有及时同步存储就可能会引起断电类的灾难丢失数据,那HDFS是如何同步数据的呢?
1.用户通过client向HDFS写入数据,发送请求和数据信息。
2.HDFS中的nameNode就会查看元数据信息进行处理(验证是否可以写入),如果能写入分配写入空间,响应给client。
3.namenode向edits中去写入日志,以上操作都成功后则写入内存。
4.满足了同步条件的时候,NameNode下载edits文件和fsimage文件,将内存的数据合并生成新的fsimage,替换原来的fsimage,完成同步。
副本工作机制
1.如果配置存储的副本是多个,客户端只会传一个副本到第一个节点中
2.再由第一个节点通过管道(pipeLine)的方式(第一个datanode向pipeLine管道里面记录有多个副本要写分别写到哪个节点,然后在pipeline中依次在写入到后面的节点,08->15,15->39等等,一旦有一个节点复制失败,一会依次返回上报给namenode,namenode会重新选择一个节点替换复制失败的节点,再写,以此类推直到所有副本复制成功,才算整个管道操作成功)复制到其他的节点。
3.客户端上传是异步的,比如文件被分成两个blk,管道的复制在客户端上传完第一个blk就开始将blk_01复制到其他节点(同时客户端又在上传blk_02)。