HDFS入门,基础,学习笔记(可能是最详细的HDFS入门基础了)

目录

 

什么是HDFS?

HDFS详解:

NameNode:

Fsimage:

Edits:

SecondaryNameNode:

NameNode实现流程:

DataNode:

Block:

DataNode实现流程:

HDFS的优点:

HDFS的缺点:


什么是HDFS?

HDFS是分布式文件存储系统,用于大数据的存储.一个HDFS系统通常由一个NameNode,一个SecondaryNameNode和若干DataNode组成.

NameNode负责管理整个文件系统元数据;DataNode负责管理具体文件数据块存储;Secondary NameNode协助NameNode进行元数据的备份.

HDFS详解:

NameNode:

NameNode用来管理文件系统的元数据,是HDFS集群中的大管家,它不负责存储具体的数据.NameNode由两个核心组件组成:Fsimage和Edits.

Fsimage:

Fsimage中存有元数据(文件和文件块(Block)之间的所属关系,文件块和机器之间的映射关系),是在NameNode启动时对整个文件系统的快照,持久化在NameNode的本地磁盘上.

Edits:

用户发起的创建、删除等操作其实是一个个日志,日志在NameNode上以edit对象存储在edits文件中,持久化在NameNode的本地磁盘上.

SecondaryNameNode:

NameNode的秘书,用来合并NameNode的Edits到Fsimage文件中,分担NameNode的压力。

NameNode实现流程:

NameNode启动时,在NameNode内存中会同步一份磁盘中的Fsimage的数据。当用户发起操作指令时,会先在edits中进行登记,在edits中写入日志(本次操作所做的事情),然后修改NameNode内存中的元数据信息,修改完成直接返回用户结果,此时NameNode会启动进程在DataNode中执行操作。

然而,edits是需要和fsimage进行合并为新的Fsimage的,合并的条件有三个:

  1. 服务重启时,检查edits中是否有数据,如果有,将两个文件进行合并;

  2. Edits文件大小达到64MB,合并;

  3. 距离上次文件合并达到1小时,合并。

然而,如果edits和fsimage文件合并时,用户发起操作指令,edits为被占用状态,无法写入数据,此时会在NameNode磁盘中生成一个新的文件——edits.new,在edits.new文件中写入日志。同时NameNode将edits和fsimage发送到SecondaryNameNode中,SecondaryNameNode将两个文件合并成一个新的文件fsimage.ckpt,然后发回到NameNode磁盘中。此时会同时将fsimage.ckpt和edits.new的后缀名去掉,变回fsimage和edits。

DataNode:

DataNode是HDFS中文件的实际存储节点,负责管理它所在节点的文件块存储,记录自己存放文件的基本信息。

Block:

文件块,在Hadoop1.0时,每块64MB,Hadoop2.0时,每块128MB,默认备份三份。

DataNode实现流程:

webservlet发起文件上传请求,与NameNode建立通信,NameNode检查目标文件是否已存在,是否可以上传。如果可以,NameNode会将此文件进行逻辑上的区域划分为block文件块,每128MB划分为一块,划分完成后通知存储压力小的DataNode进行保存(负载均衡策略),默认备份三份(Block备份放置位置下方解释)。

Block备份放置位置:

第一份:如果该文件本身从Hadoop集群中的某个节点上传,那么第一份存放在上传节点中,如果从Hadoop集群之外上传,那么存放在相对不太忙,负载较小的节点上。

第二份:放在与第一份所放置的节点相邻机架上的某个节点上。

第三份:放在与第二份所在节点的机架上的另外一台机器上。

三份以上,放置在负载相对较小的节点上。

HDFS的优点:

可以存储海量超大文件(无限拓展)

高容错,支持数据丢失自动恢复

可以构建在廉价机上

HDFS的缺点:

做不到低延迟访问

不支持超强的事务

不适合存大量小文件

不支持行级别的增删改

 

猜你喜欢

转载自blog.csdn.net/yuyangchenhao/article/details/107216480