HDFS(Hadoop Distributed File System)是Hadoop项目的核心子项目,用于对海量数据的存储和管理,可以运行于廉价的服务器上,它的出现解决了海量非关系型的数据存储问题。
HDFS的优点
- 支持超大文件:将文件进行切块分别放到不同的节点上
- 检测和快速应对硬件故障:心跳机制
- 流式数据访问
- 简化的一致性模型:只要一个文件块写好,那么这个文件块就不允许在进行改动,只能读取。
- 高容错性:多复本。
- 可构建在廉价机器上:HDFS具有较好的扩展性。
HDFS的缺点
- 高延迟数据访问:不适合于交互式,也就意味着Hadoop不适合做实时分析,而是做的离线分析。
- 大量的小文件:文件的存储要经过namenode,namenode中要记录元数据,元数据是存储在内存中。大量的小文件会产生大量的元数据,导致内存被大量占用,降低namenode的处理效率。
- 多用户写入文件、修改文件:在hadoop2.0版本中,不支持修改,但是支持追加。
- 不支持超强的事务。
HDFS的结构:
- DataNode: 存储数据的节点 ,并且是以数据块的形式来存储。
1)datanode存储namenode对应的clusterID以确定当前的datanode归哪一个namenode管理
2)datanode每隔一段时间(3s)会主动向namenode发送心跳信息(节点状态,节点数据)
3)如果namenode超过了10min没有收到datanode的心跳,则认为这个datanode产生lost,那么namenode就会将这个datanode上的数据copy到其他节点上。 - NameNode: 管理数据的节点,负责datanode的管理以及存储元数据。
- HDFS存储数据的时候会将文件进行切块,并且给每一个文件块分配一个递增的编号。
- HDFS存储数据的时候会对数据进行备份,每一个备份称之为是一个复本。在伪分布式下,复本设置为1,但是在全分布式下,复本默认是3个。3个复本是放到不同的datanode中,复本放置策略 - -机架感知策略:
1)第一个复本:客户端连接的是哪一个datanode,复本就放到哪一个datanode上。
2)第二个复本:要放到另一个机架的datanode上。
3)第三个复本:放到和第二个复本同机架的另一个datanode上。
4)如果有更多的复本数量,其他的复本随机放到其他的datanode。 - 如果某一个datanode宕机,那么这个时候namen