hdfs的那点事

原创
2016/12/30 19:45
阅读数 40

Hdfs出现的问题:

Namenode如何判断新的集群加入进来马上能够识别:

       在namenode的工作目录中有一些表示还有一些版本号,这些都可以识别判断;如果想新增节点,直接删除目录然后在重新启动;

       Namenode在format初始化的时候会形成两个标识:

blockPoolId:

clusterId:

新的datanode加入时,会获取这两个标识作为自己工作目录中的标识

一旦namenode重新format后,namenode的身份标识已变,而datanode如果依然持有原来的id,就不会被namenode识别

 

       关于hdfs中副本数量的问题,hdfs中的副本文件的配置有优先级代码中的Configuration>自定义的配置文件>hadoop集群中的配置

Hdfs中的工作机制:

1.        HDFS集群分为两大角色:NameNode、DataNode  (Secondary Namenode)

2.        NameNode负责管理整个文件系统的元数据

3.        DataNode 负责管理用户的文件数据块

4.        文件会按照固定的大小(blocksize)切成若干块后分布式存储在若干台datanode上

5.        每一个文件块可以有多个副本,并存放在不同的datanode上

6.        Datanode会定期向Namenode汇报自身所保存的文件block信息,而namenode则会负责保持文件的副本数量

HDFS的内部工作机制对客户端保持透明,客户端请求访问HDFS都是通过向namenode申请来进行

Hdfs上传数据的流程:

1.       向namedode发送请求,传文件,

2.       namedode发出响应(考虑多种的因素)

3.       hadoop的rpc请求上传第一个文件,上传第一个block,请求返回一个datanode

4.       返回datanode时候考虑很多的因素

5.       副本的实现,在第一个副本进行传输过程中,(假设有3个副本),namenode规定的3台datanode之间会有通信,当客户要上传数据的时候,第一个接收的datanode会通知其他两个datanode请求建立数据传输的通道,当通道建立的时候,会建立一个PIPE LINE(流水线)

第一个datanode一边接收上传的数据(实际接收一个一个的小数据包(默认大小是64k并且以chunk(512byte)为单位进行校验))),同时会通缓冲区向PIPE LINE中发送数据包

6  当数据上传完成的时候,副本数量也将上传完成;

NameNode的数据源的管理:

1.       当文件求请下载的时候,nomenode接受请求,

2.       namenode返回文件的元数据信息

3.       此时客户端会请求datanode下载文件;

NameNode的元数据怎么存储,怎么提高效率:

namenode对数据的管理采用了三种存储形式:

内存元数据(NameSystem)

磁盘元数据镜像文件

数据操作日志文件(可通过日志运算出元数据)

A、内存中有一份完整的元数据(内存meta data)

B、磁盘有一个“准完整”的元数据镜像(fsimage)文件(在namenode的工作目录中)

C、用于衔接内存metadata和持久化元数据镜像fsimage之间的操作日志(edits文件注:当客户端对hdfs中的文件进行新增或者修改操作,操作记录首先被记入edits日志文件中,当客户端操作成功后,相应的元数据会更新到内存meta.data

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部