返回顶部
首页 > 资讯 > 精选 >HDFS该如何理解
  • 497
分享到

HDFS该如何理解

2023-06-28 16:06:42 497人浏览 八月长安
摘要

本篇文章给大家分享的是有关hdfs该如何理解,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity

本篇文章给大家分享的是有关hdfs该如何理解,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统。HDFS采用了主从(Master/Slave)结构模型,一个HDFS集群是由一个NameNode和若干个DataNode组成的。

一、HDFS的背景介绍

随着数据量越来越大, 在 一个操作系统管辖的范围存不下了, 那么就 分配到更多的操作系统管理的磁盘中, 但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统。

学术一点的定义就是: 分布式文件系统是一种允许文件通过网络在多台主机上分享的 文件的系统,可让多机器上的多用户分享文件和存储空间。分布式文件管理系统很多,hdfsHDFS 只是其中一种。适用于一次写入、多次查询的情况,不支持并发写情况,小文件不合适。因为小文件也占用一个块,小文件越多(1000个1k文件)块越 多,Namenode压力越大。

二、 HDFS的基本概念

我们通过 hadoop shell上传的文件是存放在 DataNode的block中, 通过 linux shell是看 不到文件的,只能看到block。 可以一句话描述HDFS: 把客户端的大文件存放在很多节点的数据块中 。在这里,出现了三个关键词:文件、节点、数据块。HDFS就是围绕着这三个关键词设计的,我们在学习的时候也要紧抓住这三个关键词来学习。

三、 HDFS的基本结构之 NameNode

作用

NameNode的作用是 管理文件目录结构,接受用户的操作请求,是管理数据节点的。名字节点维护两套数据, 一套 是文件 目录与数据块之间的关系 , 另一套 是 数据块与节点之间的关系 。 前一套 数据是 静态的 ,是存放在磁盘上的, 通过fsimage和edits文件来维护 ; 后一套 数据是 动态的 ,不持久放到到磁盘的,每当集群启动的时候,会自动建立这些信息,所以一般都放在内存中。

所以他是整个文件系统的 管理节点。 它维护着整个文件系统的 文件目录树,文件/目录的 元信息和每个文件对应的 数据块列表。接收用户的操作请求 。

文件包括:

① fsimage (文件系统镜像):元数据镜像文件。存储某一时段NameNode内存 元数据信息。

② edits: 操作日志文件。

③ fstime: 保存最近一次checkpoint的时间

以上这些文件是保存在linux的文件系统中

2. 特点

是一种允许文件 通过网络在多台主机上分享的文件系统,可让多机器上的多用户分享文件和存储空间。

通透性。让实际上是通过网络来访问文件的动作,由程序与用户看来,就像是访问本地的磁盘一般。

容错。即使系统中有某些节点脱机,整体来说系统仍然可以持续运作而不会有数据损失。

适用于 一次写入、 多次查询的情况,不支持并发写情况,小文件不合适

3. 目录结构

既然NameNode维护这么多的信息,那么 这些信息都存放在哪里呢?

在hadoop源代码中有个文件叫做 hdfs-default.xml

HDFS该如何理解

打开这个文件

在第149行和第158行,有两个配置信息,一个是 dfs.name.dir, 另一个是dfs.name.edits.dir 。这两个文件表示的是 NameNode的核心文件fsimage和edits的存放位置,如下图所示

HDFS该如何理解

在对应配置的value值有 ${},这是 变量的表示方式,ER表达式 ,在程序读取文件时,会把变量的值读取出来。那么,第150行的变量 hadoop.tmp.dir的值 (即hadoop临时存储路径),如下图所示。

HDFS该如何理解

但是在我们在上一章的配置文件 core-site.xml中, 配置的值是/usr/local/hadoop/tmp。

我们可以进入linux文件系统

执行命令 cd /usr/local/hadoop/conf,more core-site.xml 查看,如下图所示

HDFS该如何理解

可以看出,这 两个文件的存储位置 是在linux文件系统的/usr/local/hadoop/tmp/dfs/name目录下。

我们进入这个目录

查看这个目录的内容,如下图所示

HDFS该如何理解

从图中可知,NameNode的核心文件 fsimage和 edits的存放在current目录下, 与此同时 name目录下有一个文件 in_use.lock 而查看其内容的时候发现,内容为空,也就是说只能有一个Namenode进程能够访问该目录,读者可以自己试一下,当没有开启hadoop时,该目录下是没有文件 in_use.lock 的,当hadoop启动以后才会生成该文件。

文件 fsimage 是NameNode的核心文件

这个文件非常重要,丢失的话,Namenode无法使用, 那么如何防止该文件丢失而造成不良后果呢。我可以下再次看一下hdfs-default.xml中的一段代码,如下图所示

HDFS该如何理解

由其中的描述可知,该变量,决定DFS NameNode 的NameTable(fsimage)应该在本地文件系统上的存储位置。如果这是 一个用逗号分隔的列表的目录,那么nametable,会被复复制到所有的目录中,来冗余(备份来保证数据的安全性)。 如${hadoop.tmp.dir}/dfs/name,~/name2,~/name3,~/name4。那么fsimage会分别复制到~/name1,~/name2,~/name3,~/name4 目录中。所以这些目录一般是在不同的机器,不同的磁盘,不同的文件夹上,总之越分散越好,这样能保证数据的安全性。有人会问在多台机上怎么实现呢?其实在Linux中有nfs文件共享系统,这里不做详述。

看一下edits的描述

查看一下 hdfs-default.xml 中的一段代码,如下图所示

HDFS该如何理解

由其中的描述可知,该变量,决定DFSNameNode的 存储事务文件(edits)在本地文件系统上的位置。 如果这是一个以逗号分隔的目录列表,那么,事务文件会被复制所有的目录中,来冗余。默认值是dfs.name.dir一样。(edit保存事务过程)

四、 HDFS的基本结构之 DataNode

1.作用

DataNode的作用是HDFS中真正存储数据的。

2. block

如果一个文件非常大,比如100GB,那么怎么存储在DataNode中呢?DataNode在存储数据的时候是按照block为单位读写数据的。block是hdfs读写数据的基本单位。

假设文件大小是100GB,从字节位置0开始,每64MB字节划分为一个block,依此类推,可以划分出很多的block。每个block就是64MB大小。

1 我们看一下 org.apache.hadoop.hdfs.protocol.Block类

这里面的属性有以下几个,下图所示。

HDFS该如何理解

由上图可知,类中的属性没有一个是可以存储数据的。 所以block本质上是一个 逻辑概念,意味着block里面不会真正的存储数据,只是划分文件的。

2 为什么一定要划分为64MB大小呢?

因为这是在默认配置文件中设置的,我们查看 core-default.xml 文件,如下图所示。

HDFS该如何理解

上图中的参数ds.block.name指的就是block的大小,值是67 108 864字节,可以换算为64MB。如果我们不希望使用64MB大小,可以在core-site.xml中覆盖该值。注意单位是字节。

3 副本

副本就是备份,目的当时是为了 安全。 正是因为集群环境的 不可靠 ,所以才使用副本机制来保证数据的 安全性 。

副本的缺点就是会占用大量的存储空间。副本越多,占用的空间越多。相比数据丢失的风险,存储空间的花费还是值得的。

那么,一个文件有几个副本合适呢?我们查看hdfs-default.xml文件,如下图所示。

HDFS该如何理解

从图4.3中可以看到,默认的副本数量是3。意味着HDFS中的每个数据块都有3份。当然,每一份肯定会尽力分配在不同的DataNode服务器中。试想:如果备份的3份数据都在同一台服务器上,那么这台服务器停机了,是不是所有的数据都丢了啊?

3. 目录结构

1 DataNode是按block来划分文件的

那么划分后的文件到底存放在哪里哪?我们查看文件core-default.xml,如下图所示。

HDFS该如何理解

参数 dfs.data.dir的值就是 block存放在linux文件系统中的位置。变量 hadoop.tmp.dir的值 前面已经介绍了,是 /usr/local/hadoop/tmp ,那么 dfs.data.dir 的完整路径是/usr/local/hadoop/tmp/dfs/data。 通过linux命令查看,结果如图4.5所示。

2 上传一个文件

我们首先点击PieTTY打开另一个Linux终端,上传一个文件 jdk-6u24-linux-i586.bin,文件大小为 84927175k,如下图所示。

HDFS该如何理解

然后我们可以在原来终端,查看上传文件,就是在该Linux文件系统的/usr/local/hadoop/tmp/dfs/data目录下, 如下图所示

HDFS该如何理解

上图中以 “blk_”开头的文件就是 存储数据的block。这里的命名是有规律的,除了block文件外,还有后 缀是“meta”的文件 ,这是block的源数据文件,存放一些元数据信息。因此,上图中只有2个block文件。

注意:我们从linux 磁盘上传一个完整的文件到hdfs 中,这个文件在linux 是可以看到的,但是上传到hdfs 后,就不会有一个对应的文件存在,而是被划分成很多的block 存在的。而且由于我们的hadoop安装方式是 伪分布安装 ,只有一个节点,DataNode和NameNode都在这一个节点上,所以上传的block块最终还是在该Linux系统中。

五、 HDFS的基本结构之 SecondaryNode

HA的一个解决方案。但不支持热备。配置即可。由于数据操作越多edits文件膨胀越大,但不能让他无限的膨胀下去,所以要把日志过程转换出来 放到fsimage中。由于NameNode要接受用户的操作请求,必须能够快速响应用户请求,为了保证NameNode的快速响应给用户,所以将此项工 作交给了 SecondaryNode ,所以他也备份一部分fsimage的一部分内容。

执行过程:从NameNode上 下载元数据信息(fsimage,edits),然后把二者合并,生成新的fsimage,在本地保存,并将其推送到NameNode,同时重置NameNode的edits.默认在安装在NameNode节点上,但这样…不安全!

合并原理 如下图所示。

HDFS该如何理解

HDFS有着高容错性(fault-tolerant)的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高吞吐量(high throughput)来访问应用程序的数据。

以上就是HDFS该如何理解,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网精选频道。

--结束END--

本文标题: HDFS该如何理解

本文链接: https://lsjlt.com/news/320468.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • HDFS该如何理解
    本篇文章给大家分享的是有关HDFS该如何理解,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity ...
    99+
    2023-06-28
  • Keepalived原理该如何理解
    今天就跟大家聊聊有关Keepalived原理该如何理解,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Keepalived 定义Keepalived 是一个基于VRRP协议来实现的LV...
    99+
    2023-06-04
  • core sync该如何理解
    这篇文章跟大家分析一下“core sync该如何理解”。内容详细易懂,对“core sync该如何理解”感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有所帮助。下面跟着小编一起深入学习“core sync该如何理解”...
    99+
    2023-06-28
  • Java ClassLoader该如何理解
    这篇文章的内容主要围绕Java ClassLoader该如何理解进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!ClassLoader 是 Java ...
    99+
    2023-06-02
  • HDFS原理深入理解
    1.HDFS概述   1)数据量越来越多,在一个操作系统管辖的范围存不下了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,因此迫切需要一种系统来管理多台机器上的文件,这就       是分布式文件管理系统。 2)是一种允许...
    99+
    2017-01-26
    HDFS原理深入理解
  • SQL注入该如何理解
    SQL注入该如何理解,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。SQL是什么?结构化查询语⾔(Structured Query Langua...
    99+
    2024-04-02
  • JSF和MVC该如何理解
    这篇文章将为大家详细讲解有关JSF和MVC该如何理解,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。JSF是一种标准的 J2EE 表示层的技术,其主旨是为了使 Java 开发人员能够快速的开发...
    99+
    2023-06-17
  • atx机箱该如何理解
    atx机箱该如何理解,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。atx机箱是指使用ATX规范制作的机箱。atx的英文全称为AT Extended,是PC机的一...
    99+
    2023-06-26
  • php icu库该如何理解
    本篇文章为大家展示了php icu库该如何理解,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。php icu库是指International Component for Unicode,是一套稳定成熟...
    99+
    2023-06-29
  • Maven命令该如何理解
    Maven命令该如何理解,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1、创建 Maven 工程①、在 src/main/java 新建包 com.ys.maven,然后在...
    99+
    2023-06-28
  • java 变量该如何理解
    这篇文章的内容主要围绕java 变量该如何理解进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!变量是Java 程序的一个基本存储单元。变量由一个标识符...
    99+
    2023-06-03
  • HDFS中DataNode磁盘如何管理
    这篇文章将为大家详细讲解有关HDFS中DataNode磁盘如何管理,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在单一DataNode管理多个磁盘的情况下,执行普通写操作时的每个磁盘用量比较平均。但是,添...
    99+
    2023-06-02
  • hdfs空间满了如何清理
    当HDFS空间满了时,可以通过以下方式进行清理: 删除不必要的文件:查看HDFS中哪些文件占用了大量空间,删除不需要的文件或者将...
    99+
    2024-04-18
    hdfs
  • Linux软连接该如何理解
    Linux软连接该如何理解,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、软链接创建 1、创建软链接 ln -s 【目...
    99+
    2023-06-28
  • SAP OData编程该如何理解
    SAP OData编程该如何理解,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。OData(Open Data Protocol)协议是一个开放的工业标准,用于定...
    99+
    2023-06-05
  • NET类库封装该如何理解
    这篇文章跟大家分析一下“NET类库封装该如何理解”。内容详细易懂,对“NET类库封装该如何理解”感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有所帮助。下面跟着小编一起深入学习“NET类库封装该如何理解”的知识吧。目...
    99+
    2023-06-17
  • Java SpringAOP切面类该如何理解
    这篇文章给大家介绍Java SpringAOP切面类该如何理解,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。切面类是什么简单的来说,就是动态的在方法的指定位置添加指定的代码。为什么需要切面类在软件开发的过程中...
    99+
    2023-06-22
  • C++框架该如何正确理解
    本篇文章为大家展示了C++框架该如何正确理解,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。C++编程语言中,有很多比较重要的内容值得我们去深入研究。这些基础内容的理解不但能帮助我们掌握C++,而且还...
    99+
    2023-06-17
  • Java工厂模式该如何理解
    这篇文章将为大家详细讲解有关Java工厂模式该如何理解,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、简单工厂模式何为简单工厂模式?首先先通过一个案例来理解我有一个需求,要买车,买车有不同...
    99+
    2023-06-22
  • Linux管道命令该如何理解
    这期内容当中小编将会给大家带来有关Linux管道命令该如何理解,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。 示例假设我们想要知道 /etc/ 底下有多少文件,那么可以利用 ls /etc 来查...
    99+
    2023-06-28
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作