大数据hadoop之HDFS基础

简介

(Hadoop Distribute File  System )分布式文件系统,解决了海量数据无法单台机器存储的问题,将海量的数据存储在不同的机器中 ,有HDFS文件系统统一管理和维护, 提供统一的访问目录和API !他的设计目的就是为了存储海量数据!!

优点

  • 高容错性,安全性

数据存储在不同的机器中,并且每个数据窥块默认存储3个副本(存储在不同的机器中),当集群中的某个数据块的副本由于某种原因(宕机,磁盘损坏等)丢失以后,HDFS会自动恢复!

  • 扩展性

HDFS的存储能力可以通过添加机器来扩容,并且极易横向扩容 ,整个集群中所有机器的存储能力就是HDFS的存储能力

  • 可以存储海量数据

单个很大的文件可以存储在HDFS中

也可以存储百万个以上的文件数据量

缺点

1.  不适合低延迟的数据访问 , 比如毫秒级的数据访问和数据存储

数据底层存储在不同的机器中, 并且大文件会被切块存储在不同的机器中, 读取数据极可能需要RPC远程网络请求获取数据 ,所以数据的访问时间比较长

2 不适合存储大量的小文件数据

  1. 每个数据文件在namenode中记录元数据信息,存储大量小文件增加namenode的压力,占用NN的内存,影响集群的整体存储能力!
  2. 大量小文件的寻址时间会超过读取时间(读取时间/寻址时间=100/1)

3 不支持并发写, 文件的随机修改

  1. 一个文件仅支持单个线程写 , 不支持多个线程写
  2. 仅支持数据的append操作 ,不支持数据的随机写

注意:HDFS文件系统适合一次写入多次读取的数据操作!主要用于存储数据!

架构

HDFS采用的是主从结构模式 , 主节点[MASTER]namenode从节点[SLAVES]datanode

大数据hadoop之HDFS基础

设计核心原理

大数据hadoop之HDFS基础

主要角色

客户端

HDFS提供了两种客户端操作SHELL命令和JAVA接口都可以和HDFS系统交互!用户可以上传,下载,读取,追加数据内容,删除,移动......

namenode

  1. 用于记录文件存储的元数据  对象(NameNode将这些数据的元数据信息记录在内存中,并且将这些元数据信息定期的序列化到本地磁盘上), 记录用户操作的行为日志 .记录用户存储的文件的大小、切分的块数、每一块的副本数和存储在DataNode上的位置
  2. 接收客户端的请求,给datanode'分配存储任务 , 或者是给客户端请求数据的元信息
  3. namenode老大 , 维护集群中的节点的数量,接收datanode的注册, 维护了一个统一的集群版本
  4. 维护集群中数据的负载均衡和副本个数
  5. 接收datanode的心跳汇报
  6. 接收datanode的数据的汇报 , 更新节点映射(元数据)

datanode

datanode节点是HDFS系统正在查处用户数据的节点

1 存储数据,将数据以物理切块的形式存储在本地指定的磁盘目录中

2 处理客户端的请求

3 接收namenode 分配的任务

4 接收namenode的指令完成容错工作 , 副本的复制 移动

5 定期的向namenode心跳响应请求,默认每间隔3s一次

6 汇报自己存储的数据数据1h

​​​​​​​secondary namenode

帮助namenode管理元数据,详见checkpoint机制!