HDFS源自Google的GFS(Google分布式文件系统)论文,分布式文件系统(HDFS)是GFS的克隆版。HDFS负责数据文件的存储,可让多机器上分享存储空间,让实际上通过网络来访问文件的动作,用户就像是访问本地磁盘一样便捷。即使HDFS集群中某些节点脱机, 整体来说系统仍然可以持续运作而不会有数据丢失。HDFS提供了一个低成本、高可靠、高容错、高性能的分布式文件系统。1.低成本主要体现在搭建HDFS主要是通过横向扩展机器数量而非花高价钱购进昂贵的服务器。2.高可靠主要体现在1)、HDFS解决了单点问题,HDFS集群中心节点是非常重要的,如果中心节点宕机整个集群将无法使用,所以中心节点NameNode会有主要节点(Primary)和备份节点(Stand By)。如果Primary出现问题Stand By可以自动接替Primary工作。2)、副本机制,HDFS集群中文件一般会存在多份,同一份数据会被存放在多台不同的机器上,如果监控到其中的一台机器宕机,随即将该台机器上的数据迁移到其他机器上保证数据的数量完整性。说明集群中一个节点宕机对整个集群的影响是有限可控的。3)、HDFS负载均衡,中心节点(NameNode)不断的接收数据节点(DataNode)发送过来的心跳检测获得子节点的运行状态,发现集群负载较高的情况下。启动HDFS的balancer工具进行数据迁移集群里面的数据降低系统负载。4)、机架感知,大型HDFS集群是以机架的形式来组织的,同一个机架上不同节点间的网络状况比不同机架之间的更为理想。另外,中心节点(NameNode)设法数据块副本保存在不同的机架上以提高容错性。3.高容错主要体现在分布式计算模型(MapReduce)容错,一个MapReduce任务在集群机器上面以任务跟中(TaskTracker)执行。每一个TaskTracker被Job监控(jobTracker)监控,如果发现一个TaskTracker执行失败JobTracker就会将该任务分配到其他机器上面运行。4.高性能体现在处理大型任务上集群处理效率,多台机器分块并行处理要比单台机器串行处理要快很多。HDFS分布式文件系统,是怎样做到的呢?通常一个HDFS集群是由一个中心节点(NameNode)和多个数据节点(DataNode)组成的,中心节点负责管理整个集群,如果中心节点瘫痪那么整个集群就无法使用,上面我们给出设置备份中心节点的解决办法,但是为了进一步确保稳定性通常会选用一台高性能配置好的服务器作为中心节点。
数据文件大的文件切块分散存储HDFS将数据以Block块存储,每一个Block块在搭建HDFS的时候可以被设置,如果数据文件大到超出了Block块设定的大小,就会将这个文件按Block块大小切分为多个文件块存储在HDFS中。切分的Block块不一定存放在同一台Data Node上面,HDFS会根据节点的负载情况进行调整数据存储位置。他们存储位置由中心节点(NameNode)负责管理,NameNode不断的监控DataNode的运行情况,如遇DataNode宕机好及时迁移数据。元数据和数据分开存储
HDFS的寻找文件地址通过从Root中找到元数据,再从Meta找到文件存储的服务器和地址。其中NameNode主要管理存放到DataNode中数据的元数据。由于将元数据和数据分开有利于文件系统的分布式部署,NameNode维护一份数据在集群中不会有名称冲突,一份数据在集群中只有唯一的一个名字。客户端向NameNode发起请求,集群中NameNode向DataNode发起计算任务的请求,DataNode负责将计算的结果反馈给NameNode统计出结果。 一次写入多次读取HDFS中存储的文件只允许一次写入,写入之后就不能被修改,如有修改只能在文件中追加数据。写入的时候需要对数据进行清洗,将坏的数据扔掉。当文件被创建,接着写入数据,最后,一旦文件被关闭,就不能再修改。这种模型可以有效地保证数据一致性,且避免了复杂的并发同步处理,很好地支持了对数据访问的高吞吐量。 移动计算比移动数据更划算分布式系统计算过程中距离数据越近,计算性能越好,尤其是在数据量特别大的时候。由于分布式系统数据存放在不同的机器上,对于计算而言就产生了两种策略,移动数据和移动计算。如果数据量特别大移动数据网络成本消耗非常大而且负责计算的机器的性能瓶颈也很容易限制运算速度。相比移动计算却是非常划算,将计算的方法分发给集群中DataNode节点负责数据计算,DataNode节点将计算结果回传给中心节点,中心节点负责将回传的结果汇总成结果。移动计算比较流行的有MapReduce,Spark等计算模型
![](https://i-blog.csdnimg.cn/blog_migrate/4e76af49dade649df80a93385f8b9b7d.jpeg)
数据文件大的文件切块分散存储HDFS将数据以Block块存储,每一个Block块在搭建HDFS的时候可以被设置,如果数据文件大到超出了Block块设定的大小,就会将这个文件按Block块大小切分为多个文件块存储在HDFS中。切分的Block块不一定存放在同一台Data Node上面,HDFS会根据节点的负载情况进行调整数据存储位置。他们存储位置由中心节点(NameNode)负责管理,NameNode不断的监控DataNode的运行情况,如遇DataNode宕机好及时迁移数据。元数据和数据分开存储
![](https://i-blog.csdnimg.cn/blog_migrate/a536941e9d93fbe9df5f7a8c7470df1d.png)
HDFS的寻找文件地址通过从Root中找到元数据,再从Meta找到文件存储的服务器和地址。其中NameNode主要管理存放到DataNode中数据的元数据。由于将元数据和数据分开有利于文件系统的分布式部署,NameNode维护一份数据在集群中不会有名称冲突,一份数据在集群中只有唯一的一个名字。客户端向NameNode发起请求,集群中NameNode向DataNode发起计算任务的请求,DataNode负责将计算的结果反馈给NameNode统计出结果。 一次写入多次读取HDFS中存储的文件只允许一次写入,写入之后就不能被修改,如有修改只能在文件中追加数据。写入的时候需要对数据进行清洗,将坏的数据扔掉。当文件被创建,接着写入数据,最后,一旦文件被关闭,就不能再修改。这种模型可以有效地保证数据一致性,且避免了复杂的并发同步处理,很好地支持了对数据访问的高吞吐量。 移动计算比移动数据更划算分布式系统计算过程中距离数据越近,计算性能越好,尤其是在数据量特别大的时候。由于分布式系统数据存放在不同的机器上,对于计算而言就产生了两种策略,移动数据和移动计算。如果数据量特别大移动数据网络成本消耗非常大而且负责计算的机器的性能瓶颈也很容易限制运算速度。相比移动计算却是非常划算,将计算的方法分发给集群中DataNode节点负责数据计算,DataNode节点将计算结果回传给中心节点,中心节点负责将回传的结果汇总成结果。移动计算比较流行的有MapReduce,Spark等计算模型