HDFS读写流程

本文章主题:

  • 写流程
  • 读流程
HDFS遵循一次写入多次读取的原则,因此已经写入文件系统的文件是无法修改的,只能进行删除,添加,读取操作。
  • 写流程

write.png
  1. 客户端调用DistributedFileSystem的Create()方法来创建一个新文件,DistributedFileSystem通过RPC向NameNode申请写入新文件;
  • NameNode通过对文件的权限以及文件是否已存在进行校验,校验通过则返回具体blockId以及DataNode列表给DistributedFileSystem,并在日志文件中追加记录。否则返回失败信息;

  • DistributedFileSystem返回给客户端一个FSDataOutputStream对象,供客户端进行写操作。FSDataOutputStream对象中封装了一个DFSOutputStream对象,管理着NameNode与DataNode之间的通信;

  • 客户端调用FSDataOutputStream对象的write()方法开始写入数据,DFSOutputStream对象将数据分成一个个数据包(package)并写入“数据队列”(data queue) ;

  • DataStreamer根据DataNode列表要求NameNode分配合适的新块来处理数据复本;

  • 这组DataNode组成一条管线,假如复本数为3,则这条管线就拥有3个复本。-- DataStreamer将数据包流式传输到管线中的第1个DataNode中,DataNode存储数据并将数据包传输给第2个,以此类推直至传输到管线中的最后一个节点;

  • DFSOutputStream同时维护着一个“确认队列”(ack queue) 来等待DataNode存储成功的确认回执,数据包从最后一个节点依次往前传递,DFSOutputStream收到所有确认信息之后,则删除数据包;

  • 客户端完成数据的写入之后,调用close()方法,关闭FSDataOutputStream;

  • DistributedFileSystem通知NameNode文件写入成功,NameNode同时将元数据写入内存;

  • 写过程故障处理:

    • 关闭管线,将数据包添加回数据队列的最前端,以确保下游的DataNode不会漏掉任何一个数据包;
    • 找到一个存储着当前数据块的DataNode(正常的),为它加上一个新的标识,并且将该标识传送给NameNode,便于在故障DataNode在恢复之后可以删除存储的部分数据块;
    • 从管线中删除故障节点,并且将数据块写入另外两个正常节点;
    • 当NameNode发现block复本数不足的时候,会在另外一个节点上创建一个新复本。
  • 读流程

read.png
  1. 客户端调用DistributedFileSystem的open()方法,告诉分布式文件系统对象(DistributedFileSystem)希望打开某个文件;
  • DistributedFileSystem通过RPC来调用NameNode节点,并从中获取block文件块的在datanode地址;
  • DistributedFileSystem将位置信息封装成FSDataInputStream对象返回给客户端,FSDataInputStream对象中封装了一个DFSInputStream对象,它管理着DataNode与NameNode之间的I/O;
  • 客户端调用FSDataInputStream对象的read()方法,DFSInputStream对象随即连接最近的DataNode,通过反复调用read()方法,将数据从DataNode传输给客户端;
  • 当客户端将所有的数据块读取完成,调用FSDataInputStream的close()方法,关闭数据流;
  • 在读取过程中出错,DFSInputStream会尝试读取临近DataNode中的block;
  • 在每读完一个block,DFSInputStream都会检验数据的完整性,如果有损坏,会试图在从其它DataNode读取复本之前通知NameNode。

** RPC是通过Java的动态代理以及Java的NIO实现的。

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

推荐阅读更多精彩内容

  • HDFS读写流程剖析 本文为 《Hadoop The Definitive Guide 4th Edition》的...
    希尔大阅读 3,760评论 0 2
  • 先思考问题 我们处在一个大数据的时代已经是不争的事实,这主要表现在数据源多且大,如互联网数据,人们也认识到数据里往...
    墙角儿的花阅读 7,355评论 0 9
  • 一、操作方式 Hadoop支持的文件系统由很多(见下图),HDFS只是其中一种实现。Java抽象类org.apac...
    Mervey阅读 1,303评论 0 0
  • 正如标题所示,这个系列纯属是为了了解世界,生活在现代,我们都有自己的圈子,也有了微信的朋友圈去观望一下他人的世界,...
    思践于人阅读 365评论 0 0
  • 我的家乡在云台山脚下,小村庄就像一个孩子,依偎在云台山的怀抱。 没有人去测量山的海拔,因为崇敬它不会在...
    gwm阅读 293评论 0 2