hdfs讲义

本文详细介绍了Hadoop的分布式文件系统HDFS,包括其分布式存储概念、设计目标、核心组件(NameNode、DataNode、Secondary NameNode)、数据复制策略、文件读写流程以及HDFS的健壮性机制。此外,还涵盖了HDFS的shell命令使用,为理解和操作HDFS提供了全面的指导。
摘要由CSDN通过智能技术生成

Hadoop分布式文件系统—HDFS

  1. 什么是分布式文件系统

    所谓的分布式文件系统,我的个人理解是管理网络中把数据存储在不止一台机器上的系统,这样的存储方式被称为分布式存储。(管理网络中跨多台计算机存储的文件系统称为分布式文件系统。)

  2. 分布式文件系统能干什么

    (1)分布式文件系统可以存储数据量较大的文件。 (GB,TB,PB级别的海量数据)

    (2)一次写入,多次夺取。(一个文件经过创建、写入和关闭之后就不需要改变。这一假设简化了数据一致性问题,并且使高吞吐量的数据访问成为可能。Map/Reduce应用或者网络爬虫应用都非常适合这个模型。目前还有计划在将来扩充这个模型,使之支持文件的附加写操作。)

    (3)搭建在普通的商业集群机器上就可以了,节省成本

  • HDFS原理

    HDFS(Hadoop Distributed File System)是一个分布式文件系统。它具有高容错性并提供了高吞吐量的数据访问,非常适合大规模数据集上的应用,它提供了一个高度容错性和高吞吐量的海量数据存储解决方案。

  • HDFS在设计时已考虑硬件错误等情况,具有高容错性等特征。HDFS的假设前提术设计目标包括以下几个方面。

    1.硬件错误
    硬件错误是常态而不是异常。HDFS 可能由成百上千台服务器构成,每台服务器上存储着文件系统的部分数据。我们面对的现实是构成系统的组件数量是巨大的,而且任一-组件都有可能失效,这意味着总是有一-部分HDFS的组件是不工作的。因此,错误检测和快速、自动的恢复是HDFS的核心架构目标。

    2.大规模数据集
    运行在HDPFS上的应用具有很大的数据集。HDPFS上一个典型文件的大小般在吉字节至太字节量级。因此,HDFS被配置以支持大文件存储。它能提供整体上较高的数据传输带宽,能在一个集群里扩 展到数百个节点。一个单一的HDFS实例能支撑数以千万计的文件存储和访问。

    3.简单的一致性模型
    HDFS应用需要一个“一 次写人、 多次读取”的文件访问模型。-一个文件经过创建、写人和关闭之后就不需要改变。这一-假设简化了数据一致性问题, 并且使高吞吐量的数据访问成为可能。MapReduce 应用或者网络爬虫应用都非常适合这个模型。

    4.移动计算比移动数据更划算
    一个应用请求的计算,离它操作的数据越近就越高效,在数据达到海量级别的时候更是如此。因为这样就能降低网络阻塞的影响,提高系统数据的吞吐量。将计算移动到数据附近,比将数据移动到应用所在位置显然更好。HDFS提供了将应用移动到数据附近的接口。

    5.异构软硬件 平台间的可移植性
    HDFS在设计的时候就考虑到平台的可移植性,这种特性方便了HDFS作为大规模数据应用平台的推广。

  • HDFS 的组件

    HDFS包含Namenode、Datanode、 Secondary Namenode三个组件。

    1.NameNode
    NameNode负责管理文件目录、文件和block的对应关系以及block和datanode的对应关系。NameNode节点也成为元数据节点,用来管理文件系统的命名空间,维护目录树,接管用户的请求。
    (1) 将文件的元数据保存在一个文件目录树中
    (2) 在磁盘上保存为:fsimage 和 edits
    (3) 保存datanode的数据信息的文件,在系统启动的时候读入内存。

    2.DataNode
    Datanode是文件系统的工作节点。他们根据需要存储并检索数据块(受客户端或namenode调度),并且定期向nameNode发送他们所存储的块的列表。

    3.Sconday Namend:辅助后台程序,与NameNode进行通信,以便定期保存HDFS元数据的快照,用以备份和恢复数据。

           在Namenode节点上,fimge保存了元数据镜像文件(文件系统的目录树),而cdis中完整记录了元数据的操作日志(针对文件系统做的修改操作记录)。Namende内存中存储的元数据可以用imgetd"来表达。 hecoay Namnde负贲定时(默认1小时)从Nameo上获取fimnge和dis进行合井,然后再发送给Namenode,减少Namenode的工作量。这是HA (高可用性)的一个常用解决方案,但不支持热备。要使用这种方式来完成高可用性,直接修改配置即可。

  • HDFS架构

    如图所示,HDFS是一个主从结构,一个HDFS集群是由一个管理节点NameNode,它是一个管理文件命名空间和调节客户端访问文件的主服务器,还有一些数据节点DataNode,通常是一个节点一个机器,它来管理对应节点的存储。
    在这里插入图片描述

    文件写入流程:

    (1)客户端向Namenode发起文件写人的请求;

    (2)Namenode根据文件大小和文件块配置情况,返回给客户端所管理部分Datanode的信息;

    (3)客户端将文件划分为多个块,根据Datanode的地址信息,按顺序写入到每一个Datanode块中。

    文件读取流程:

    (1)客户端向Namenode发起文件读取的请求;

    (2)Namenode返回文件存储的Datanode的信息;

    (3)客户端读取文件信息。

  • HDFS数据复制

    HDFS被设计成能够在一个大集群中跨机器可靠地存储超大文件。它将每个文件存储成一系列的数据块,除了最后一个以外, 所有的数据块都是同样大小的( Hadoop 1.X 默认每个数据块大小为64MB. Hadoop 2.X和Hadoop 3.X默认每个数据块大小为128MB)。为了容错,文件的所有数据块都会有副本。每个文件的数据块大小和副本系数都是可配置的。应用程序可以指定某个文件的副本数量。副本系数可以在文件创建的时候指定,也可以在之后改变。HDFS中的文件都是一-次性写 人的,并且严格要求在任何时候都只能有一个写人者。

    Namenode全权管理数据块的复制,它周期性地从集群中的每个Datanode 接收心跳信号和块状态报告。接收到心跳信号意味着该Datanode 节点工作正常。块状态报告包含了该Datanode上所有数据块的列表。

    副本的存放是HDFS可靠性和性能的关键。优化的副本存放策略是HDFS区分于其他大部分分布式文件系统的重要特性。HDFS 采用一种称为机架感知(rack-aware)的策略来改进数据的可靠性、可用性和网络带宽的利用率。在大多数情况下,副本系数是3,HDFS的存放策略是将-个副本存放在 本地机架的节点上,一个副本存放在同一机架的另一个节点上,最后一个副本存放在不同机架的节点上。

    这种策略减少了机架间的数据传输,提高了写操作的效率。机架的错误远远比节点的错误少,所以这个策略不会影响到数据的可靠性和可用性。与此同时,因为数据块只放在两个(不是三个)不同的机架上,所以此策略减少了读取数据时需要的网络传输总带宽。在这种策略下,副本并不是均匀分布在不同的机架上。

    三分之一的副本在一 一个节点上,三分之二的副本在一- 个机架上,这-策略在 不损害数据可靠性和读取性能的情况下改进了写的性能。为了降低整体的带宽消耗和读取延时,HIDFS会尽量让读取程序读取离它最近的副本。如果在读取程序的同一个机架上有一个副本,那么就读取该剧本。如果一个HIDFS集群跨越多个数据中心,那么客户端也将首先读本地数据中心的副本。

  • HDFS 健壮性

    HDFS的主要目标就是即使在出错的情况F也要保证数据存储的可靠性。常见的三种出错情况是Namenode出错、Datanode出错和网络制裂。1.磁盘数据错误,心跳检测和重新复制

    每个Datanode节点周期性地向Namenode发送心跳信号。网络割裂可能导致部分 Datanode与Namenode失去联系。Namenode通过心做信号的缺失来检测这一情况。并将这些近期不再发送心跳信号的 Datanode标记为死机,不会再将新的IO请求发给它们。任何存储在死机Datanode上的数据将不再有效。Datanode的死机可能会引起一些数据块的副本系数低于指定值,Namenode不断地检测这些需要复制的数据块,一旦发现就启动复制操作。在下列情况下,可能需要重新复制:某个Datanode 节点失效,某个副本遭到损坏,Datanode上的硬盘错误,文件的副本系数增大。

    2.集群均衡

    HDFS的架构支持数据均衡策略。如果某个Datanode节点上的空闲空间低于特定的临界点,按照均衡策略系统就会自动地将数据从这个Datanode 移动到其他空闲的Datanode。当对某个文件的请求突然增加时,也可能启动-个计划创建该文件新的副本,并且同时重新平衡集群中的其他数据。

    3.数据完整性

    从某个Datanode获取的数据块有可能是损坏的,损坏可能是由Datanode的存储设备错误、网络错误或者软件漏洞造成的。HDFS客户端软件实现了对HDFS文件内容的校验和(checksum)检查。当客户端创建一个 新的HDFS文件时,会计算这个文件每个数据块的校验和,并将校验和作为一个单独的隐藏文件保存在同一个HDFS名字空间下。当客户端获取文件内容后,它会检验从Datanode获取的数据以及相应的校验和与文件中的校验和是否匹配,如果不匹配,客户端可以选择从其他Datanode获取该数据块的副本。

    4.元数据磁盘错误

    FsImage和Editlog是HDFS的核心数据结构。如果这些文件损坏,整个HDFS实例都将失效。因而,Namenode 可以配置成支持维护多个FsImage和Edilog的副本。任何对Fslmage或者Editlog的修改,都将同步到它们的副本上。这种多副本的同步操作可能会降低Namenode每秒处理的名字空间事务数量。然而这个代价是可以接受的,因为即使HDFS的应用是数据密集的,它们也非元数据密集的。当Namenode重启的时候,它会选取最近的完整的FsImage和Editlog来使用。

    5.快照

    快照支持某-特定时刻的数据的复制备份。利用快照,可以让HDFS在数据损坏时恢复到过去一个已知 正确的时间点。

  • HDFS 数据组织

    HDTS数湘组织包括HDS的数据块存储流水线复制、文件的制除和恢复等机制,保障了HDFS高效和可靠地存储数据。

    1.数据块存储

    HDFS被设计成支持大文件。适用HDFS的是那些需要处理大规模的数据集的应用。这些应用都是只写人数据一一次, 但读取一次或多次,并且读取速度应能满足流式读取的需要。HDFS支持文件的“-次写人、多次读取” 语义。一个典型的数据块大小是 128MB。因而,HIDFS 中的文件总是按照128MB被切分成不同的块,每个块尽可能地存储于不同的Datanode中。

    2.流水线复制

    当客户端向HDFS文件写人数据时,一-开始是写到本地临时 文件中。假设该文件的副本系数设置为3,当本地临时文件累积到一.个数据块的大小时,客户端会从Namenode获取一个Datanode列表用于存放副本。然后客户端开始向第一个Datanode传输数据,第-个Datanode一小部分一小部分(4 KB)地接收数据,将每一部分写 人本地仓库,并同时传输该部分到列表中第二个Datanode。第二个Datanode 也是这样,一小部分 一小部分地接收数据,写人本地仓库,并同时传给第三个Datanode。最后,第三个Datanode 接收数据并存储在本地。因此,Datanode 能流水线式地从前-个节点接收数据 ,并在同时转发给下一个 节点,数据以流水线的方式从前一个Datanode复制到下个Datanode。

    3.文件的删除和恢复

    当用户或应用程序删除某个文件时,这个文件并没有立刻从HDFS中删除。实际上,HDFS会将这个文件重命名转移到/rah目录。只要文件还在tah目录中,该文件就可以被迅速地恢复。文件在trash中保存的时间是可配置的,当超过这个时间时,Namende就会将这文件从名字空间中删除。删除文件会使得该文件相关的数据块被释放。只要玻别除的文件还在Irah目录中,用户就可以恢复这个文件。

    如果用户希组恢过被删除的文件,可以湖觉tnh目录我回该文件。hosh 目录仅仅保任饮制除文件的最后剧本。Mms目录与其他的目录没有什么区别,除了一点: 在该自录上HDFS会应用一个特殊策略来自动删除文件。目前的默认策略是删除/rash中保留时间超过6小时的文件。

  • HDFS Shell命令

    概述
    HDFS Shell命令允许使用命令行在HDFS存储中进行文件夹和文件操作。

    如文件夹的增删改查、文件的增删改查等。

    开始练习hadoop时,打开Linux之后要用 start-dfs.sh

    启动HDFS。
    HDFS不是开机启动的
    在这里插入图片描述

    常用命令
    命令格式

    hdfs dfs -操作命令 参数

    前面的【hdfs dfs -】部分是固定的,后面的【操作命令 参数】部分是变化的

    命令练习(练习时可结合Hadoop站点观察操作结果)
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/2020102621222170.png#pic_center

    hdfs dfs -mkdir /abc #创建名为/abc的文件夹

    hdfs dfs -ls / 0 #列出根目录中的内容

    hdfs dfs -ls -R / #递归列出多层文件夹的内容

    hdfs dfs -put /etc/hosts /abc/hosts #把Linux系统中/etc/hosts文件上传到HDFS中

    hdfs dfs -appendToFile /etc/hosts /abc/hosts

    #向文件中追加内容

    hdfs dfs -checksum /abc/hosts #查看文件的MD5值

    hdfs dfs -du -h / #查看文件/文件夹的大小

    -h以人类友好的方式显示大小(过大时带单位)

    hdfs dfs -get /abc/hosts ./hosts #把HDFS中的文件下载到本地Linux中

    注意./hosts是下载后保存到本地的位置

    hdfs dfs -cat /abc/hosts #查看HDFS中文本文件的内容

    注意:只能查看文件文件

    hdfs dfs -tail /abc/hosts #列出文件结尾处1KB的文件内容
    hdfs dfs -mv /abc/hosts /abc/xyz #修改文件名字或移动位置

    hdfs dfs -cp /abc/xyz /abc/hosts #复制文件

    hdfs dfs -find / -name xyz #查找名字为xyz的文件的位置

    hdfs dfs -rmdir /abc #删除名为/abc的文件夹

    注意:如果其中还有文件则不能删除

    hdfs dfs -rm /abc/hosts #删除文件

    hdfs dfs -rm -r /abc #递归删除文件/文件夹,文件夹中有文件也能删除

    hdfs dfs -df #查看HDFS文件系统的磁盘使用情况

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值