大数据HDFS读写数据的过程探究

大数据
跟namenode通信查询元数据,找到文件块所在的datanode服务器,挑选一台datanode(就近原则,然后随机)服务器,请求建立socket流。

读数据

  1. 跟namenode通信查询元数据,找到文件块所在的datanode服务器
  2. 挑选一台datanode(就近原则,然后随机)服务器,请求建立socket流
  3. datanode开始发送数据(从磁盘里面读取数据放入流,以packet为单位来做校验)
  4. 客户端以packet为单位接收,现在本地缓存,然后写入目标文件 
大数据HDFS读写数据的过程探究

写数据

  1. 根namenode通信请求上传文件,namenode检查目标文件是否已存在,父目录是否存在
  2. namenode返回是否可以上传
  3. client请求第一个 block该传输到哪些datanode服务器上
  4. namenode返回3个datanode服务器ABC
  5. client请求3台dn中的一台A上传数据(本质上是一个RPC调用,建立pipeline),A收到请求会继续调用B,然后B调用C,将真个pipeline建立完成,逐级返回客户端
  6. client开始往A上传第一个block(先从磁盘读取数据放到一个本地内存缓存),以packet为单位,A收到一个packet就会传给B,B传给C;A每传一个packet会放入一个应答队列等待应答
  7. 当一个block传输完成之后,client再次请求namenode上传第二个block的服务器。 
大数据HDFS读写数据的过程探究

网络故障,脏数据如何解决?

DataNode 失效等问题,这些问题 HDFS 在设计的时候都早已考虑到了。下面来介绍一下数据损坏处理流程:

  • 当 DataNode 读取 block 的时候,它会计算 checksum。
  • 如果计算后的 checksum,与 block 创建时值不一样,说明该 block 已经损坏。
  • Client 读取其它 DataNode上的 block。
  • NameNode 标记该块已经损坏,然后复制 block 达到预期设置的文件备份数 。
  • DataNode 在其文件创建后验证其 checksum。

读写过程,数据完整性如何保持?

通过校验和。因为每个chunk中都有一个校验位,一个个chunk构成packet,一个个packet最终形成block,故可在block上求校验和。

HDFS 的client端即实现了对 HDFS 文件内容的校验和 (checksum) 检查。当客户端创建一个新的HDFS文件时候,分块后会计算这个文件每个数据块的校验和,此校验和会以一个隐藏文件形式保存在同一个 HDFS 命名空间下。当client端从HDFS中读取文件内容后,它会检查分块时候计算出的校验和(隐藏文件里)和读取到的文件块中校验和是否匹配,如果不匹配,客户端可以选择从其他 Datanode 获取该数据块的副本。

HDFS中文件块目录结构具体格式如下: 

  1. ${dfs.datanode.data.dir}/  
  2. ├── current  
  3. │ ├── BP-526805057-127.0.0.1-1411980876842  
  4. │ │ └── current  
  5. │ │ ├── VERSION  
  6. │ │ ├── finalized  
  7. │ │ │ ├── blk_1073741825  
  8. │ │ │ ├── blk_1073741825_1001.meta  
  9. │ │ │ ├── blk_1073741826  
  10. │ │ │ └── blk_1073741826_1002.meta  
  11. │ │ └── rbw  
  12. │ └── VERSION  
  13. └── in_use.lock 

in_use.lock表示DataNode正在对文件夹进行操作

rbw是“replica being written”的意思,该目录用于存储用户当前正在写入的数据。

Block元数据文件(*.meta)由一个包含版本、类型信息的头文件和一系列校验值组成。校验和也正是存在其中。

 

责任编辑:未丽燕 来源: 今日头条
相关推荐

2013-10-09 09:39:34

大数据

2021-04-14 09:04:03

大数据HDFS大数据开发

2019-12-24 08:11:39

大数据架构数据开发

2017-02-27 16:35:00

HDFS大数据分析

2018-02-05 08:26:11

大数据云存储安全性

2018-12-07 14:50:35

大数据数据采集数据库

2023-05-11 00:17:44

分区HiveReduce

2022-04-06 15:59:11

大数据HDFS存储系统

2018-12-21 11:01:05

存储大数据RAID

2017-03-06 10:45:29

HadoopHDFS大数据

2019-08-14 17:13:23

大数据MapReduce框架

2017-12-20 15:10:09

HBaseHadoop数据

2019-07-04 14:22:56

大数据数据挖掘数量级

2012-03-13 13:38:42

Java

2023-05-08 23:20:49

WebYARN管理

2018-04-08 09:31:57

大数据

2019-04-22 15:24:24

HadoopSuffleMap端

2015-06-29 13:38:31

大数据大价值

2021-10-29 22:45:47

大数据算法技术

2019-01-14 19:37:08

大数据AI场景
点赞
收藏

51CTO技术栈公众号