HDFS详解

Hadoop概述

  Hadoop是Apache的一个开源分布式计算平台,为用户提供了系统底层细节透明的分布式基础架构。Hadoop是基于Java语言开发的,具有很好的跨平台特性,并且可以部署在廉价的计算机集群中。Hadoop的核心是分布式文件系统HDFS和MapReduce

  Hadoop是一个能够对大量数据进行分布式处理的软件框架,并且是以一种可靠、高效、可伸宿的方式进行处理的,它具有以下几个方面的特性:
    1,高可靠性。采用冗余数据存储方式,即使一个副本发生故障,其他副本也可以保证正常对提供服务。

    2,高效性。作为并行分布式计算平台,Hadoop采用分布式存储和分布式处理两大核心技术。够高效地处理PB级数据。

    3,高可扩展性。Hadoop的设计目标是可以高效稳定地运行在廉价的计算机集群上,可以扩到数以千计的计算机节点上。

    4,高容错性。采用冗余数据存储方式,自动保存数据的多个副本,并且能够自动将失败的任进行重新分配。

    5,成本低。Hadoop采用廉价的计算机集群,成本比较低,普通用户也很容易用自己的PC建Hadoop运行环境。

  经过多年的发展,Hadoop生态系统不断完善和成熟,目前已经包含了多个子项目.除了核心的HDFS和MapReduce以外,Hadoop生态系统还包括Zookeeper、HBase、Hive、Pig、Mahout、Sqoop、Flume、Ambari等功能组件。下图为Hadoop生态圈:

在这里插入图片描述

HDFS相关概念

  在我们的电脑中,为了提高磁盘读写效率,一般以数据块为单位,在计算机组成原理中可以是扇区或者簇,而不是以字节为单位。

  HDFS也同样采用了块的概念,默认的一个大小是64 MB。在HDFS中的文件会被拆分成多个块,每个块作为独立的单元进行存储。 HDFS寻址开销除了磁盘寻道开销,还包括数据块的定位开销。当客户端需要访问一个文件时,首先从名称节点获得组成这个文件的数据块的位置列表,然后根据位置列表获取实际存储各个数据块的数据节点的位置,最后数据节点根据数据块信息在本地Linux 文件系统中找到对应的文件,并把数据返回给客户端。设计一个比较大的块,可以把上述寻址开销分摊到较多的数据中,降低了单位数据的寻址开销。

名称节点

  在HDFS中,名称节点(NameNode)负责管理分布式文件系统的命名空间,保存了两个核心的数据结构,即Fslmage和editLog。Fslmage用于维护文件系统树以及文件树中所有的文件和文件夹的元数据。操作日志文件editLog中记录了所有针对文件的创建新除、重命名等操作。名称节点记录了每文件中各个块所在的数据节点的位置信息,但是并不持久化存储这些信息,而是在系统每次启动时扫描所有数据节点利用Fslmage和editLog文件重构得到这些信息。

  名称节点在启动时,会将 Fslmage的内容加载到内存当中,然后执行EditLog文件中的各项操作,使很内存中的元数据保持最新。这个操作完成以后,就会创建一个新的 FsImage文件和一个空的EditLog文件。名称节点启动成功并进入正常运行状态以后,HDFS中的更新操作都会被写入到EditLog,而不是直接写入FsImage,这是因为对于分布式文件系统而言,FsImage文件通常都很庞大(一般都是GB级别以上),如果所有的更新操作都直接往FsImage文件中添加,那么系统就会变得非常缓慢。相对而言,EditLog通常都要远远小于FsImage,更新操作写入到EditLog是非常高效的。注意:Fsimage的主要作用是在Hadoop文件系统启动时提供元数据信息,这些元数据用于重建文件系统。当NameNode重新启动时,它会首先读取Fsimage文件来恢复元数据信息,然后再读取EditLog文件来应用在上次关闭之后发生的任何变化。

  由于Edit Log是一个增量日志,所以它不包含完整的文件系统状态。因此,如果Edit Log文件在某些情况下发生损坏或丢失,可能会导致文件系统数据的丢失或不一致。

  当HDFS需要进行元数据操作时,例如创建、删除或修改文件或目录,它会首先更新内存中的元数据信息,然后再将这些更改写入editlog,并将定期刷新到硬盘上的fsimage文件中,以防止元数据的丢失或损坏。

在这里插入图片描述

数据节点

  数据节点(DataNode)是分布式文件系统HDFS的工作节点,负责数据的存储和读取,会根据客户端或者名称节点的调度来进行数据的存储和检索,并且向名称节点定期发送自己所存储的块的列表。

第二名称节点

  在名称节点运行期间,HDFS会不断发生更新操作,这些更新操作都是直接被写入到EditLog文件,因此EditLog文件也会逐渐变大。在名称节点运行期间,不断变大的EditLog文件通常对于系统性能不会产生显著影响,但是当名称节点重启时,需要将FsImage加载到内存中,然后逐条执行EditLog中的记录,使得Fslmage保持最新。可想而知,如果EditLog很大,就会导致整个过程变得非常缓慢,使得名称节点在启动过程中长期处于“安全模式”,无法正常对外提供写操作,影响了用户的使用。具体过程如下:

    (1) EditLog与Fslmage的合并操作。每隔一段时间,第二名称节点会和名称节点通信,请求其停止使用 EditLog文件,暂时将新到达的写操作添加到一个新的文件 EditLog.new中。然后,第二名称节点把名称节点中的FsImage文件和EditLog文件拉回到本地,再加载到内存中;对二者执行合并操作,即在内存中逐条执行EditLog中的操作,使得FsImage保持最新。合并结束后,第二名称节点会把合并后得到的最新的FsImage文件发送到名称节点。名称节点收到后,会用最新的FsImage文件去替换旧的Fslmage文件,同时用EditLog.new文件去替换 EditLog文件,从而减小了EditLog文件的大小。

    (2)作为名称节点的“检查点”。从上面的合并过程可以看出,第二名称节点会定期和名称节点通信,从名称节点获取 FsImage文件和 EditLog文件,执行合并操作得到新的FsImage 文件。从这个角度来讲,第二名称节点相当于为名称节点设置了一个“检查点”,周期性地备份名称节点中的元数据信息,当名称节点发生故障时,就可以用第二名称节点中记录的元数据信息进行系统恢复。但是,在第二名称节点上合并操作得到的新的FsImage文件是合并操作发生时(即t时刻)HDFS记录的元数据信息,并没有包含t时刻和t 时刻期间发生的更新操作,如果名称节点在4时刻和t 时刻期间发生故障,系统就会丢失部分元数据。
在这里插入图片描述

HDFS常用命令

1.查看hdfs下根目录下的文件

hdfs dfs -ls /

2.查看hdfs某个目录下的所有文件结构:
如:查看根目录所有文件结构

hdfs dfs -ls -R /
hdfs dfs -lsr /

2
如:查看根文件tmp下的所有文件列表

hdfs dfs -ls -R /tmp/
hdfs dfs -lsr /tmp/

3.创建文件夹
如:在根文件的test目录下,创建test2

hdfs dfs -mkdir /test/test2

或者:

hdfs dfs -mkdir hdfs://49.2.1.1/test/test123/

4.创建文件夹 - 递归创建文件夹

hdfs dfs -mkdir -p /test/test3/test4/

5.本地文件移动上传hdfs某个目录:
如:

hdfs dfs -moveFromLocal /opt/hadoop/servers/test/hellow.txt /test/test123

6.hdfs文件移动到本地:
如:

hdfs dfs -moveToLocal /test/test123/hellow.txt /opt/hadoop/servers/

7.hdfs内部进行文件移动

hdfs dfs -mv /test/test123/ /test/test2/

8.将本地文件放到hdfs某个目录:

hdfs dfs -put /opt/hadoop/servers/test/ /tmp/

9.查看hdfs上某个文件的内容:

hdfs dfs -cat /test/test2/test123/hellow.txt

10.追加一个或者多个文件到hdfs指定文件中.也可以从命令行读取输入
如:追加本地aa.txt 到hdfs 上的 hellow.txt中

hdfs dfs -appendToFile /opt/hadoop/servers/test/aa.txt /test/test2/test123/hellow.txt

如:追加本地bb.txt cc.txt 到hdfs 上的 hellow.txt中:

hdfs dfs -appendToFile /opt/hadoop/servers/test/dd.txt /opt/hadoop/servers/test/cc.txt /test/test2/test123/hellow.txt

11.hdfs间文件拷贝:复制文件(夹),可以覆盖,可以保留原有权限信息

hdfs dfs -cp /test/test2/test123/hellow.txt /test/

12.hdfs删除某个文件

hdfs dfs -rm /test/test2/test123/hellow.txt

13.hfds递归删除

hdfs dfs -rm -r /test

14.hdfs赋予文件夹权限

hdfs dfs -chmod -R -777 /

get

格式   hdfs dfs  -get [-ignorecrc ]  [-crc]  <src> <localdst>

作用:将文件拷贝到本地文件系统。 CRC 校验失败的文件通过-ignorecrc选项拷贝。 文件和CRC校验和可以通过-CRC选项拷贝

hdfs dfs  -get   /install.log  /export/servers

参考文献

https://blog.csdn.net/weixin_42073408/article/details/118308009
大数据技术原理与应用(第二版)     林子雨

点关注,防走丢,如有纰漏之处,请留言指教,非常感谢

以上就是本期全部内容。有问题大家随时留言讨论 ,我们下期见。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值