HDFS 系列三:HDFS 数据流

文章目录

  • 3. HDFS 数据流
    • 3.1 HDFS 写数据流程
      • 3.1.1 剖析文件写入
      • 3.1.2 网络拓扑概念
      • 3.1.3 机架感知(副本节点选择)
        • 3.1.3.1 低版 本Hadoop 副本节点选择
        • 3.1.3.2 Hadoop 2.9.2 副本节点选择
    • 3.2 HDFS 读数据流程

3. HDFS 数据流

3.1 HDFS 写数据流程

3.1.1 剖析文件写入

  1. Client 向 NameNode 通信请求上传文件,NameNode 检查目标文件是否已经存在,父目录是否已经存在

  2. NameNode 返回是否可以上传

  3. Client 先对文件进行切分,请求第一个 block 该传输到哪些 DataNode 服务器上

  4. NameNode 返回3个 DataNode 服务器 DataNode 1,DataNode 2,DataNode 3

  5. Client 请求3台中的一台 DataNode 1(网络拓扑上的就近原则,如果都一样,则随机挑选一台DataNode)上传数据(本质上是一个RPC调用,建立pipeline),DataNode 1 收到请求会继续调用 DataNode 2,然后 DataNode 2 调用 DataNode 3,将整个 pipeline 建立完成,然后逐级返回客户端

  6. Client 开始往 DataNode 1 上传第一个 block (先从磁盘读取数据放到一个本地内存缓存),以 packet 为单位。写入的时候 DataNode 会进行数据校验,它并不是通过一个 packet 进行一次校验而是以 chunk 为单位进行校验(512byte)。DataNode 1 收到一个 packet 就会传给 DataNode 2,DataNode 2 传给 DataNode 3,DataNode 1 每传一个 packet 会放入一个应答队列等待应答

  7. 当一个 block 传输完成之后,Client 再次请求 NameNode 上传第二个block的服务器

3.1.2 网络拓扑概念

在本地网络中,两个节点被称为“彼此近邻”是什么意思?

在海量数据处理中,其主要限制因素是节点之间数据的传输速率——带宽很稀缺

这里的想法是将两个节点间的带宽作为距离的衡量标准

节点距离:两个节点到达最近的共同祖先的距离总和

例如,假设有 数据中心d1 机架r1 中的节点 n1,该节点可以表示为/d1/r1/n1,利用这种标记,这里给出四种距离描述:

Distance(/d1/r1/n1, /d1/r1/n1)=0(同一节点上的进程)
Distance(/d1/r1/n1, /d1/r1/n2)=2(同一机架上的不同节点)
Distance(/d1/r1/n1, /d1/r3/n2)=4(同一数据中心不同机架上的节点)
Distance(/d1/r1/n1, /d2/r4/n2)=6(不同数据中心的节点)

HDFS 系列三:HDFS 数据流_第1张图片

3.1.3 机架感知(副本节点选择)

官方介绍:

http://hadoop.apache.org/docs/r2.7.3/hadoop-project-dist/hadoop-common/RackAwareness.html
http://hadoop.apache.org/docs/r2.7.3/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html#Data_Replication

3.1.3.1 低版 本Hadoop 副本节点选择

第一个副本在 Client 所处的节点上,如果客户端在集群外,随机选一个

第二个副本和第一个副本位于不相同机架的随机节点上

第三个副本和第二个副本位于相同机架,节点随机

HDFS 系列三:HDFS 数据流_第2张图片

3.1.3.2 Hadoop 2.9.2 副本节点选择

第一个副本在 Client 所处的节点上,如果客户端在集群外,随机选一个。

第二个副本和第一个副本位于相同机架,随机节点

第三个副本位于不同机架,随机节点

HDFS 系列三:HDFS 数据流_第3张图片

3.2 HDFS 读数据流程

  1. 与 NameNode 通信查询元数据,找到文件块所在的 DataNode 服务器

  2. 挑选一台 DataNode(网络拓扑上的就近原则,如果都一样,则随机挑选一台 DataNode)服务器,请求建立 socket 流

  3. DataNode 开始发送数据(从磁盘里面读取数据放入流, packet(一个 packet 为64kb)为单位来做校验)

  4. 客户端以 packet 为单位接收,先在本地缓存,然后写入目标文件

HDFS 系列三:HDFS 数据流_第4张图片

你可能感兴趣的:(hadoop)