HDFS简介
概念及特点
hdfs是一个分布式文件系统,可以将海量的数据存储在不同的机器中,解决了单台机器无法存储超大数据的问题.
hdfs是以master-slave形式存在,一个集群存在一个master(namenode)节点和若干个slave(datanode)节点,主节点负责存储元数据信息以及任务分配,从节点则负责存储实际的数据
在hdfs中数据是以块(block)的形式进行存储的,在客户端进行请求存储数据时,主节点会根据数据的大小将数据进行切块,然后将block分别存储在不同的namenode节点上,默认块大小为128M,每个block的副本数量为3.
它具备以下特性:
优点:
- 高容错性,安全性
hdfs是将海量数据存储在不同的节点上,并且每个数据块都是默认的存储三个副本,当某台节点出现故障问题,或者硬盘出现损坏,集群都可以正常工作,并且可以保证数据的完整性 - 高扩展性
当存储数据的容量不够时候,可以通过横向扩展节点的数量来解决集群存储容量的问题,但是不可以无限扩容
缺点:
- 不适合低延迟的数据访问,比如毫秒级的数据访问和数据请求
因为hdfs是通过集群进行存储数据的,在读取数据时可能会使用RPC远程网络请求数据,所以访问的时间比较长一点 - 不适合存储大量的小文件
因为每个文件的元数据信息都会存储在namenode中,如果有大量的小文件存储在hdfs中,会增加namenode的压力,同时也降低的整个集群的存储能力 - 不支持并发写文件和文件的随机修改
一个文件同时只支持一个线程写,文件只可以进行append,支持随机修改
hdfs数据存储机制及主节点和从节点交互机制
存储机制
- hfds集群启动的时,datanode会向namenode进行注册,会将容量和数据信息发送给namenode
- namenode接收datanode的信息汇报,如果有未记录的数据,则会将该数据的元数据信息进行记录
- 客户端发送存储数据请求(school.mp4),name会根据存储数据的大小计算切块的数量,并生成元数据信息,记录每个块的存储位置,块的大小等信息,然后将元数据信息发送给客户端,客户端在根据元数据信息向datanode请求存储
- 客户端成功存储数据后,datanode会向namenode汇报存储是否成功
主从交互机制
- 集群启动datanode会向namenode进行住注册
- namenode校验成功后,会返回一个集群id(ClusterId)给datanode,用于识别从节点归属于哪个集群
- datanode在接收到ClusterId后,会将数据信息并携带者ClusterId,发送给namenode
- 主从节点之间会根据心跳机制,来进行任务的派分和任务的接收,namenode也可以根据心跳机制判断datanode是否存活