暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Hadoop相关介绍之——HDFS

码农然 2019-12-24
266

Hadoop是什么呢?
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。
集群:
其中集群的概念就是通过多台计算机完成同一个工作,以达到更高的效率。
分布式:
将一个非常大的数据块分成许多小的数据块并交由多台计算机进行处理,最后再汇总得到最终结果。
节点:

节点是指一个可以独立按照分布式协议完成一组逻辑的程序个体。在具体的项目中,一个节点表示的是一个操作系统上的进程。

Hadoop的框架最核心的设计就是:HDFSMapReduce。HDFS为海量的数据提供了存储,而MapReduce则为海量的数据提供了计算。

一、HDFS又是什么呢?

分布式文件管理系统中的一种,其具体定义就是把客户端的大文件存放在很多节点的数据块中。



NameNode
NameNode的作用是管理文件目录结构,接受用户的操作请求,是管理数据节点
    NameNode维护两套数据:
    ① 文件目录与数据块之间的关系。是静态的,存放在磁盘上的,通过fsimage和edits文件来维护;
    ② 数据块与节点之间的关系。不持久放到磁盘,每当集群启动的时候,会自动建    立这些信息,所以一般都放在内存中。
所以它是整个文件系统的管理节点。它维护着整个文件系统的文件目录树,文件/目录的元信息和每个文件对应的数据块列表,接收用户的操作请求。  
文件包括:
fsimage(文件系统镜像):元数据的镜像文件。存储某一时段NameNode内存与元数据信息
edits:操作日志文件,加入操作日志
fstime:保存最近一次checkpoint的时间

DataNode
DataNode的作用是HDFS中真正存储数据的。
内部以block块为单位进行读写的,每128M数据为一个block块。(在hadoop目录下的core-default.xml文件中可以对参数dfs.blocksize的block块的大小进行具体设置)。

二、HDFS常用的shell操作:

hadoop -fs -touchz        创建空白文件

hadoop -fs -ls        显示当前目录结构

hadoop -fs -du        统计目录下各文件大小
hadoop -fs -count        统计文件(夹)数量
hadoop -fs -mkdir        创建空白文件夹
hadoop -fs -mv        剪切移动
hadoop -fs -cp        复制
hadoop -fs -rm         删除文件/空白文件夹
hadoop -fs -rm -r        递归删除(删除非空文件夹)
hadoop -fs -put        上传文件
hadoop -fs -cat        查看文件内容
hadoop -fs -tail        查看文件尾部
hadoop -fs -chmod        修改文件权限
大家可以可以看出来大部分的命令还是同之前的shell命令十分相似的


三、HDFS的读写流程:
    HDFS写入数据流程:

    流程详解:
①、使用HDFS提供的客户端开发库,向远程的NameNode中发送RPC请求
②、NameNode会检查要创建的文件是否存在,创建者是否有权限进行操作,成功则会为文件创建一个记录,失败将抛出异常。
③、当客户端开始写入文件的时候,开发库会将block块分成多个packets(信息包,默认64kb),并在内部以‘data queue’(数据队列:先进先出,且不带数据拷贝)的形式管理这些packets,并向NameNode申请新的Block,获取用来存储replicas(副本,默认是3)的合适的datanodes列表,列表的大小根据在NameNode中对replication的设置而定。
④、开始以管道(pipeline)的形式将packet写入到replicas中。开发库以流的形式写入到第一个DataNode,该DataNode把该packet存储之后,再将其再次pipeline的下一个DataNode,直到最后一个DataNode,这种写数据的方式呈流水线的形式。
⑤、最后一个DataNode成功存储后会返回一个ack packet(确认包),在pipeline中传递至客户端,在客户端的开发库中维护者ack queue,成功收到DataNode返回的ackpacket后会从ack queue中移除相应的packet。
⑥、如果在传输过程中,有某个DataNode出现了故障,那么当前的pipeline会被关闭出现故障的DataNode会从当前的pipeline中移除,剩余的block会继续剩下的DataNode中继续以pipeline的形式传输,同时NameNode会分配一个新的DataNode,保持replicas设定的数量。


    HDFS读取流程:

    流程详解:
①、client访问NameNode,查询元数据信息,获得这个文件的数据块位置列表,         返回输入流对象。
②、就近挑选一台datanode服务器,请求建立输入流
③、DataNode向输入流中写数据,以packet为单位进行校验
④、关闭输入流


四、HDFS的内部机制


1、心跳机制
    目的:为了实现主节点和从节点的通信。
    重点:两个参数和NameNode与DataNode宕机所需的时间
        因为hdfs具有心跳机制,所以在搭建分布式集群时,必须进行时间同步。
    心跳机制的原因:NameNode是集群中的老大,负责进行任务分工,要进行分工,必须知道各个DataNode结点的存活状态。
    NameNode怎么知道DataNode的存活状态?DataNode每隔3秒向NameNode发送心跳报告,如果NameNode连续10次没有收到DataNode的心跳报告,则认为DataNode可能死了,但是并没有断定其死亡(NameNode还需去验证)。这个时候,NameNode向DataNode发送一次检查,发送一次检查的时间是5min,如果一次检查没有返回信息,NameNode还会再进行一次检查,如果再没有收到信息,NameNode就认为该DataNode死亡。
    所以,NameNode最终判断DataNode死亡(宕机)需要10*3+5*60*2= 630秒。

2、安全模式
    (1)HDFS的启动和关闭都是先启动NameNode,在启动DataNode,最后在启动      secondarynamenode。
    (2)决定HDFS集群的启动时长会有两个因素:
  1)磁盘元数据的大小
  2)datanode的节点个数
在HDFS的启动命令start-dfs.sh执行的时候,HDFS会先自动进入安全模式。
为了确保用户的操作是可以高效的执行成功的,在HDFS发现自身不完整的时候,会进入安全模式。保护自己。
    (3)在正常启动之后,如果HDFS发现所有的数据都是齐全的,那么HDFS会启动的退出安全模式。
    (4)安全模式常用操作命令。
    hdfs dfsadmin -safemode leave #强制 NameNode 退出安全模式
    hdfs dfsadmin -safemode enter #进入安全模式
    hdfs dfsadmin -safemode get #查看安全模式状态
    hdfs dfsadmin -safemode wait #等待,一直到安全模式结束
    安全模式下用户可以进行的操作:不修改元数据的操作,例如ls查询、cat查看文件内容、get下载等。用户不能修改的只有抽象目录树。
    不可以进行的操作:修改元数据的操作。例如创建目录、上传、修改文件名、文件追加。

    3、副本机制
        默认情况下,每个数据块有三个副本,这三个副本怎么存放呢?
        在机架充足的条件下:
        第一个副本一般存放在客户端所在的结点上
        第二个副本一般存放在与第一个副本不同机架的任意结点上
            原因:防止同一机架断电,数据访问不到
        第三个副本一般存放在与第一个副本同一机架的不同结点上
            原因:在风险度相同(第三个副本存放在机架1和机架2,机架断电的可能性相同)的情况下,优先选择网络传输少的。


    4、冷备份与热备份
    冷备份(off, 慢, 时间点上恢复)
        冷备份发生在数据库已经正常关闭的情况下,当正常关闭时会提供给我们一个完整的数据库。冷备份是将关键性文件拷贝到另外位置的一种说法。对于备份数据库信息而言,冷备份是最快和最安全的方法。
    简单说法就是:离线(没有新的数据来)复制一份保存,有事就直接用这备份来恢复。


    冷备份的优点:
        (1)是非常快速的备份方法(只需拷贝文件)
        (2)容易归档(简单拷贝即可)
        (3)容易恢复到某个时间点上(只需将文件再拷贝回去)
        (4)能与归档方法相结合,作数据库“最新状态”的恢复。
        (5)低度维护,高度安全。
    冷备份的缺点:
        (1)单独使用时,只能提供到“某一时间点上”的恢复。
        (2)在实施备份的全过程中,数据库必须要作备份而不能作其它工作。也就是说,在冷备份过程中,数据库必须是关闭状态。
        (3)若磁盘空间有限,只能拷贝到磁带等其它外部存储设备上,速度会很慢。
        (4)不能按表或按用户恢复。
    值得注意的是冷备份必须在数据库关闭的情况下进行,当数据库处于打开状态时,执行数据库文件系统备份是无效的 。


    热备份 (on, 快)
    热备份是在数据库运行的情况下,备份数据库操作的sql语句,当数据库发生问题时,可以重新执行一遍备份的sql语句。
    简单说就是:在线的保存对数据库操作的sql语句,有事就再跑一遍这些sql语句。


    热备份的优点:
        (1)可在表空间或数据文件级备份,备份时间短。
        (2)备份时数据库仍可使用。
        (3)可达到秒级恢复(恢复到某一时间点上)。
        (4)可对几乎所有数据库实体作恢复。
        (5)恢复是快速的,在大多数情况下在数据库仍工作时恢复。
    热备份的缺点:
        (1)不能出错,否则后果严重。
        (2)若热备份不成功,所得结果不可用于时间点的恢复。
        (3)因难于维护,所以要特别仔细小心,不允许“以失败而告终”




    HDFS为我们大数据的处理打下了坚实的基础~
    文章转载自码农然,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

    评论