Hadoop–HDFS的两大核心


文章目录

  • Hadoop--HDFS的两大核心
  • 一:写数据
  • 1)具体步骤
  • 2)在pipeline上的datanode如果出现了异常?
  • 3)注意
  • 二:读数据
  • 1)具体步骤


一:写数据

1)具体步骤

1.客户端向namenode发送RPC请求;

2.namenode检查权限以及文件是否存在(是否可以上传);

3.namenode确认可以上传文件的话会向客户端发送一个确认信息;

4.客户端将文件分块(每个block块128M)按照顺序上传,向namenode申请这些block块存储的datanode列表;

5.上传第一个block块:

1.通过交换机建立一个pipelin通道;

2.block会以“packet queue”的形式传输,每一个packet的大小是64k;

3.为了保证packet传输的正确,当packet向最后一个datanode的传输完成之后,datanode会返回一个ack packet(确认传输到了),在客户端维护着一个ack queue(确认队列),客户端收到一个ack就会从ack queue中移除一个ack;

4.每传输8个packet(即512k)就需要进行一个校验;

5.节点列表在通道中进行复制;

5.整个block块的所有packet重复改动作;

6.其他的block块和第一个block传输方式一致,传输完成关闭pipeline.

2)在pipeline上的datanode如果出现了异常?

将会被移除,nn会分配新的dn加入pipeline(保证副本的个数)

3)注意

只要写入了 dfs.replication.min(最小写入成功的副本数)的复本数(默认为 1),写操作就会成功,并且这个块可以在集群中异步复制,直到达到其目标复本数(dfs.replication的默认值为 3),因为 namenode 已经知道文件由哪些块组成,所以它在返回成功前只需要等待数据块进行最小量的复制。

Hadoop项目孵化时包括哪两个项目hadoop hadoop项目的两大核心_HDFS

二:读数据

1)具体步骤

客户端将要读取的文件路径发送给 namenode,namenode 获取文件的元信息(主要是 block的存放位置信息)返回给客户端,客户端根据返回的信息找到相应 datanode 逐个获取文件的 block 并在客户端本地进行数据追加合并从而获得整个文件

1.客户端向远程的HDFS发送RPC请求;

2.通过交换机建立通道,如果数据存在,namenode会视情况返回整个文件的block块列表,对于每个block块,namenode都会返回拷贝的datanode地址;

3.客户端收到block列表,会选取离客户端最近的datanode去读取block块,如果最近block的在本地就是本地读取;

4.读完一个block块之后,断开与datanode的连接,client去寻找下一个block块最近的datanode;

5.读完列表block块之后,如果文件还没有读取完成,namenode会返回下一批block块的列表;

6.每次读取完一个block之后都会进行checksum校验,如果读取错误,客户端会通知 namenode,然后再从下一个拥有该 block 拷贝的 datanode 继续读。

Hadoop项目孵化时包括哪两个项目hadoop hadoop项目的两大核心_HDFS_02