HDFS读写原理

namenode职责:

    1. 响应所有客户端的请求

    2.维护整个文件系统元数据(目录树,文件快的对应信息)

    3.管理众多datanode

hadoop fs -put 1.txt /aaa(shell客户端上传文件流程,写数据)

    1. shell客户端请求(RPC)namenode上传文件,namenode检查datanode的节点健康状况和磁盘使用情况

    2. namenode自我检测元数据中是否存在datanode,客户端将分块的文件上传到namenode,namenode(元数据和datanode信息池)根据请求找出3台可用的datanode地址(默认3副本策略)

        a. 如果客户端那台机器上就有datanode,且健康有空间,则第一份就放在那台机器上

        b. 第二份放在同一台机架的不同机器上, 因为距离最近

        c. 第三份则最忌放在其他机器上

    3. 信息池返回给客户端3台可用的datanode地址

    4. shell客户端请求建立传输数据的pipeline(管道),用于连接datanode存储数据,之后shell客户端以packet(包的大小为64k)的形式一个一个的发送到datanode的指定目录下保存,并且把包继续往其他datanode服务器分发并保存

    5. 在pipeline(管道)的反方向逐个校验数据包,逐个发送ack(命令正确应答)

    6. 当所有的block都上传完毕,通知namenode建立数据结构,并记录下来

    注: pipeline只要有一块上传写成功,就认为这个块是写成功的,缺少的那块由namenode根据datanode信息池找其他副本来进行赋值,只要最终集群上你上传的文件块数==你设置的副本数即可满足需求


HDFS读数据流程(hadoop fs -get /aaa/1.txt)

    1. shell客户端请求namenode下载文件

    2. namenode根据请求并结合元数据,将数据列表(坐标)返回给客户端

        注:namenode返回给客户端的block所在的集群列表是排好序的

    3. shell客户端连接datanode请求下载(读取)1.txt,当该文件的所有block都读取到客户端本地,按照block的顺序追加拼接成文件最终的样子

    注: namenode与datanode通过心跳机制进行通信, 用于监视datanode是否活着

MapReduce  分而治之  先分再合

Map: 负责分

Reduce: 负责合  把map的数据聚合

MapReduce处理数据形式都是采用键值对



你可能感兴趣的:(HDFS读写原理)