hdfs删除文件 java_小白初识HDFS必备知识 阿里工作群转发资料(上)

3b9ea480aab3229de48829c386e70dd3.png

最近阿里的朋友给我的,面试题基本在里面,99%的干货,废话不多说,直接上车。

HDFS前提和设计目标

  1. 硬件错误是常态 容错高
  2. 流式数据访问。运行在HDFS上的应用需要流式访问它们的数据集。HDFS的设计重点是批处理,而不是交互处理。是高吞吐量而不是低延迟。 为了提高数据的吞吐量,在关键方面修改POSIX的语义 ( 流式数据,特点就是,像流水一样,不是一次过来而是一点一点“流”过来。而你处理流式数据也是一点一点处理。如果是全部收到数据以后再处理,那么延迟会很大,而且在很多场合会消耗大量内存。流式数据被封装成了byte流(其实也是二进制的) )
  3. 简单的一致性模型 HDFS应用遵循“一次写入多次读取”的文件访问模型。简化了数据一致性问题,并且使高吞吐量的数据访问成为可能。不需要删除和修改,只可以追加
  4. 大规模数据集 文件大小一般都在G字节至T字节
  5. 移动计算比移动数据更划算 将计算程序发送到数据所在的主机
  6. 异构软硬件平台间的可移植性 java语言写的

0b6435672e3fc4a06897e3bfeb9f8a32.png

HDFS是Hadoop分布式文件系统, 采用Master/Slave的架构来存储数据,这种架构主要由四个部分组成,分别为HDFS Client、NameNode、DataNode和Secondary NameNode.

NameNode与DataNode的三种联系

Heartbeats心跳 blancing平衡 replication复制

客户端:与 NameNode 交互,获取文件的位置信息; 读取或者写入数据。

NameNode管理文件系统的命名空间,存储文件和目录的元数据,

1. 元数据以两种方式在NameNode本地进行持久化

(1)fsimage:命名空间镜像文件

(2)edits log:编辑日志

2. namenode管理文件系统的命名空间:

  1. 文件和目录的元数据
  2. 文件的block副本个数
  3. 修改和访问的时间
  4. 访问权限
  5. block大小以及block信息

3、fsimage文件不记录每个block所在的DataNode信息,这些信息在每次系统启动的时候从DataNode重建。之后DataNode会周期性地通过心跳包向NameNode报告block信息。DataNode向NameNode注册的时候NameNode请求DataNode发送block列表信息。 不记录地址的原因是block会变化。

DataNode存储模型:

  1. 文件按字节线性切割成块(block)
  2. block分散存储在集群节点中
  3. block的大小默认为128MB(从2.7.3版本开始为128MB,之前的版本是64MB),对于同一个文件,block大小必须一致,不同文件可以不一致。
  4. block的副本数默认为3, 不要超过节点数量。副本分散在不同节点中,可以容错、解决并发读、承担计算。
  5. 文件上传时可以设置block大小和副本数,已上传的文件不可以修改block大小,可以修改block副本数。
  6. 只支持一次写入多次读取,同一时刻只能有一个写入者。
  7. 可以append追加数据

8296350be4621770dfc49c163bf6a92f.png

01-19是合并文件 20是新开的文件 记录操作

fsimage 是记录一些信息 .md5是校验文件,每一次重启都会合并。

in_use.lock文件用于NameNode锁定存储目录。这样就防止其他同时运行的NameNode实例使用相同的存储目录。

version文件--java的属性文件

namespaceID是该文件系统的唯一标志符,联邦有关

clusterID是HDFS集群使用的一个唯一标志符,联邦有关

blockpoolID是block池的唯一标志符

SecondaryNameNode

Secondary NameNode的整个目的是在HDFS中提供一个检查点。它只是NameNode的一个助手节点。这也是它在社区内被认为是检查点节点的原因。

fsimage和 edits如何合并?(checkpoint)

  1. secondarynamenode请求namenode生成新的edits log文件并向其中写日志。
  2. SecondaryNameNode通过HTTP GET的方式从NameNode下载fsimage和edits文件到本地。
  3. SecondaryNameNode将fsimage加载到自己的内存,并根据edits log更新内存中的fsimage信息,然后将更新完毕之后的fsimage写到磁盘上。
  4. SecondaryNameNode通过HTTP PUT将新的fsimage文件发送到NameNode,NameNode将该文件保存为.ckpt的临时文件备用。
  5. NameNode重命名该临时文件并准备使用。此时NameNode拥有一个新的fsimage文件和一个新的很小的edits log文件。

9620163f124d9edf7a03e3238eba58e8.png

DataNode

1、HDFS块数据存储于blk_前缀的文件中,包含了被存储文件原始字节数据的一部分。字节的好处可以精确数据的大小。

2、每个block文件都有一个.meta后缀的元数据文件关联。该文件包含了一个版本和类型信息的头部,后接该block中每个部分的校验和。

3、每个block属于一个block池,每个block池有自己的存储目录,该目录名称就是该池子的ID(跟NameNode的VERSION文件中记录的block池ID一样)

当一个目录中的block达到64个(通过dfs.datanode.numblocks配置)的时候,DataNode会创建一个新的子目录来存放新的block和它们的元数据。这样即使当系统中有大量的block的时候,目录树也不会太深。同时也保证了在每个目录中文件的数量是可管理的,避免了多数操作系统都会碰到的单个目录中的文件个数限制

存储数据模型

1、文件线性切割成块(Block)

2、Block分散存储在集群节点中

3、单一文件Block大小一致,文件与文件可以不一致 4、Block可以设置副本数,副本分散在不同节点中

a) 副本数不要超过节点数量

b) 承担计算

5、文件上传可以设置Block大小和副本数

6、已上传的文件Block副本数可以调整,大小不变

7、只支持一次写入多次读取,同一时刻只有一个写入者

8、可以append追加数据

优势

1.一个文件的大小可以大于整个网络中任意一个磁盘的容量。

2.使用抽象块而非整个文件作为存储单元,简化存储系统的设计。

3。块很适合用于数据备份从而提高容错性和可用性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值