Hadoop DataNode的读和写流程

从上一篇文章中我们已经知道了NameNode和Secondary NameNode的职责,这篇文章我们主要讲讲我们怎么往DataNode上写数据和读数据。

DataNode的写操作流程

DataNode的写操作流程可以分为两部分,第一部分是写操作之前的准备工作,包括与NameNode的通信等;第二部分是真正的写操作。我们先看第一部分。

  1. 首先,HDFS client会去询问NameNode,看哪些DataNode可以存储Block A-file.txt文件的拆分是在HDFS client中完成的,拆分成了3个Block (A,B,C)。因为NameNode存储着整个文件系统的元数据,它知道哪个DataNode上有空间可以存储这个Block A。
  2. NameNode通过查看它的元数据信息,发现DataNode1,2,7上有空间可以存储Block A,于是将此信息告诉HDFS Client。
  3. HDFS Client接到NameNode返回的DataNode列表信息后,它会直接联系第一个DataNode-DataNode1,让它准备好接收Block A - 实际上就是建立彼此间的TCP连接。然后将Block A和NameNode返回的所有关于DataNode的元数据一并传给DataNode1.
  4. 在DataNode1与HDFS Client建立好TCP连接后,它会把HDFS Client要写Block A的请求顺序传给DataNode2(在与HDFS Client建立好TCP连接后从HDFS Client获得的DataNodeli信息),要求DataNode2也准备好接收Block A(建立DataNode2到DataNode1的TCP连接)。
  5. 同上,建立DataNode2到DataNode7的TCP连接。
  6. 当DataNode7准备好之后,它会通知DataNode2,表明可以开始接收Block A。
  7. 同理,当DataNode2准备好之后,它会通知DataNode1,表明可以开始接收Block A。
  8. 当HDFS Client接到DataNode1的成功反馈信息后,说明这3个DataNode都准备好了,HDFS Client就会开始往这三个DataNode写入Block A。

下面这张图片展示了HDFS Client如何往DataNode写入Block A数据。


在DataNode1,2,7都准备好接收数据后,HDFS Client开始往DataNode1写入Block A数据。同准备工作一样,当DataNode1接收完Block A数据后,它会顺序将Block A数据传输给DataNode2,然后DataNode2再传输给DataNode7. 每个DataNode在接收完Block A数据后,会发消息给NameNode,告诉它Block数据已经接收完毕,NameNode同时会根据它接收到的消息更新它保存的文件系统元数据信息。当Block A成功写入3个DataNode之后,DataNode1会发送一个成功信息给HDFS Client,同时HDFS Client也会发一个Block A成功写入的信息给NameNode。之后,HDFS Client才能开始继续处理下一个Block-Block B。

机架感知

其实NameNode在挑选合适的DataNode去存储Block的时候,不仅仅考虑了DataNode的存储空间够不够,还会考虑这些DataNode在不在同一个机架上。这就需要NameNode必须知道所有的DataNode分别位于哪个机架上(所以也称为机架感知)。当然,默认情况下NameNode是不会知道机架的存在的,也就是说,默认情况下,NameNode会认为所有的DataNode都在同一个机架上(/defaultRack)。除非我们在hdfs-site.xml里面配置topology.script.file.name选项,这个选项的值是一个可执行文件的位置,而该只执行文件的作用是将输入的DataNode的ip地址按照一定规则计算,然后输出它所在的机架的名字,如/rack1, /rack2之类。借助这个文件,NameNode就具备了机架感知了。当它在挑选DataNode去存储Block的时候,它会遵循以下原则:

  1. 首先挑选跟HDFS Client所在的DataNode作为存放第一个Block副本的位置,如果HDFS Client不在任何一个DataNode上,比如说Hadoop集群外你自己的电脑,那么就任意选取一个DataNode。
  1. 其次,会借助NameNode的机架感知特性,选取跟第一个Block副本所在DataNode不同的机架上的任意一个DataNode来存放Block的第二个副本,比如说/rack2。Block的第三个副本也会存在这个/rack2上,但是是另外一个DataNode
  2. 最后,如果我们设置的副本的数量大于3,那么剩下的副本则随意存储在集群中。

所以,按照上面的原则,在HDFS Client进行Block的写操作时,流程应该如下面图所示:


DataNode的读数据流程

最后,我们来看看HDFS Client是如何从DataNode读取数据的。


如上图所示,首先,HDFS Client会先去联系NameNode,询问file.txt总共分为几个Block而且这些Block分别存放在哪些DataNode上。由于每个Block都会存在几个副本,所以NameNode会把file.txt文件组成的Block所对应的所有DataNode列表都返回给HDFS Client。然后HDFS Client会选择DataNode列表里的第一个DataNode去读取对应的Block,比如由于Block A存储在DataNode1,2,7,那么HDFS Client会到DataNode1去读取Block A;Block C存储在DataNode,7,8,9,那么HDFS Client就回到DataNode7去读取Block C。

最后编辑于
?著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,029评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,238评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,576评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,214评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,324评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,392评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,416评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,196评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,631评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,919评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,090评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,767评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,410评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,090评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,328评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,952评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,979评论 2 351

推荐阅读更多精彩内容

  • 首先,我们在使用前先看看HDFS是什麽?这将有助于我们是以后的运维使用和故障排除思路的获得。 HDFS采用mast...
    W_Bousquet阅读 4,187评论 0 2
  • Hadoop部署方式 本地模式 伪分布模式(在一台机器中模拟,让所有进程在一台机器上运行) 集群模式 服务器只是一...
    陈半仙儿阅读 1,607评论 0 9
  • hadoop HDFS原理解析01 HDFS架构?NameNode?DataNode?Sencondary Nam...
    白菜青萝卜阅读 2,721评论 2 30
  • 感恩,知足,珍惜。
    诗水年华阅读 217评论 0 0
  • 冬天东北的风,是凛冽的,是刺骨的,北风吹得鼻涕次啦,鼻涕还没流淌出鼻孔,鼻孔内就感觉到硬硬的冰点。北风吹得脸颊刺痛...
    Iris_虹阅读 250评论 0 0