美文网首页
HDFS笔记

HDFS笔记

作者: lyoungzzz | 来源:发表于2017-08-11 10:05 被阅读61次

    Hadoop Distributed File System (HDFS)


    提纲

    1.什么是HDFS & 为什么要使用HDFS?
    2.HDFS的基本命令
    3.HDFS结构的简介
    4.HDFS系统设计
    

    什么是HDFS?

    1.Hadoop 分布式 文件系统。特点:性能高、效率高、速度快
    2.可以在廉价的机器上运行的可容错文件系统。
    当集群中有机器挂掉时,HDFS会自动将挂掉的机器上的任务分配给正常的机器,使任务继续保持正常工作。

    为什么要使用 HDFS?

    1.HDFS处理速度更快。 读取1TB数据

    2.HDFS处理更加容易。当对一个大型文件进行写操作时,如果将该文件整个写入一个节点,那么该节点的负载便会急剧增加,这样就丧失了分布式文件系统的意义。所以,应该利用HDFS将文件拆分成不同的块,然后将不同的块分配到不同的节点上去,此时,DFS就需要管理者确定文件如何进行拆分,以及每一个块应该分配到哪一个节点。对文件进行操作时,在单机情况下,首先需要知道文件被拆分成多少块,每一个块被放在了哪一个节点上,以及块之间的顺序(文件的粘连)。而HDFS的出现,使得分布式文件集群不再需要人进行管理,利用HDFS读取文件时,我们不需要关心文件如何拆分,分配,粘连。只用告诉HDFS文件的路径即可。


    HDFS的基本命令

    HDFS的指令类似于linux下的指令。
    查看文件:hdfs dfs -ls /查询的文件目录
    删除文件:hdfs dfs -rm r /删除的文件
    创建文件夹:hdfs dfs -mkdir /文件夹名称
    上传文件至HDFS:hdfs dfs -put 需要上传的文件 /上传的文件路径

    HDFS结构的简介

    为什么需要学习HDFS结构?
    1.面试中,能够运用于所有分布式文件系统设计。
    既然分布式系统下是多节点运行,那么节点之间是否通信?slave节点只接受来自master节点的命令,向master节点发送心跳指令,slave节点之间不会主动通信。
    a.Master slaver 模式:
    1.High consistency:一致性。当文件中的一个数据块写入slave节点时,当且仅当数据块被成功写入到所有备份的slave节点,slave节点向client反馈写入操作成功,否则,重传写入;
    2.Simple design:易设计:不需要考虑子节点如何通信。只需要考虑主节点的工作;
    3.单master节点不具有鲁棒性。
    b.Peer peer 模式:
    1.所有的读写操作均匀分布在每一个节点上,每一个节点的负载不会很高;
    2.任意一个节点挂掉不会影响其他节点;
    3.低一致性。没有数据的复制步骤。
    2.更好的理解hadoop生态系统



    a.master节点会传输数据吗?
    不会,master节点只接收client的请求,决定哪一个slave节点进行读写操作,然后,client直接与slave节点进行通信。如果数据从master节点传输,那么master节点就会成为影响数据传输的瓶颈。
    b.slave节点如何存储数据?
    整个大文件?小的文件块?。HDFS借鉴GFS的设计理念,以block为传输单位,将大文件拆分成一个一个小文件,而一个小文件就是block。block的大小可以由Configuration定义,默认大小是128M。
    c.谁来决定将文件拆分成块?
    master?slave?。两者都不是,由HDFS client决定将大文件拆分成block(块)。HDFS的目的是将所有的节点包装起来,可以理解成将所有的节点放在一个黑箱里,我们不需要知道黑箱里到底发生了什么,只需要告诉黑箱需要做什么工作,这里的HDFS client相当于HDFS与user通信的中间媒介。HDFS client相当于一个软件包(api),可以存放在master或者slave或者额外的一个新节点上。



    d.master节点上存储了什么?
    元数据:master需要知道去哪一个slave进行读写操作,以及slave的健康状况,资源使用率。

    e.如果其中的一个slave挂掉,数据会丢失吗?
    不会,HDFS在数据写入时会进行数据复制操作,一般会复制3份,可以其中2份数据放在比较近的位置,另一份放在远一点的位置,当然也可以在xml中自定义。

    f.如果master节点挂掉,元数据会丢失吗?
    不会,HDFS有一个checkpoint节点(备胎),它会每隔一个小时复制master上的所有数据,HDFS不会叫备胎节点启动取代当前挂掉的master,HDFS会重启master,从备胎上复制数据。这里不直接将master上的数据写入disk原因,是因为开销会非常大,既消耗时间,也消耗资源。
    g.如何进行写操作?client应该将block写到哪里?slave节点
    h.如果我们需要将block写入3个slave节点,client是直接写入3个slave中吗?
    不是,这样会产生传输瓶颈。client只会将block写入其中一个slave,并发出指令,让该slave节点将block写入剩余2个slave节点,实现block复制。client顺序(非并行)接收请求,即同一时间,一个client只会接收一个user的请求,而master同一时间会接收到成千上万个user请求,因此,client不会成为传输的瓶颈。


    写入in memory失败(ACK出现问题)时,master会重新选择3个新的slave节点。



    写入disk失败(Block A received出现问题)时,master会选择slave节点替换挂掉的slave节点
    i.如何进行读操作?读相同block时,就近选择slave读操作

    相关文章

      网友评论

          本文标题:HDFS笔记

          本文链接:https://www.haomeiwen.com/subject/gdllrxtx.html