什么是HDFS?算了,告诉你也不懂。

大数据——HDFS(分布式文件系统) 我的理解就是 ,你上传到服务器的数据,为了保证数据的安全性,如果一个服务器出现了问题 ,那么必须保证你的数据不能丢失,那么在其他服务器上也会备份一份出问题服务器的数据,以保证数据不丢失,就是一个存有你数据的服务器坏掉了,也不会影响你的数据。以上仅仅是我的理解,仅供参考。 阅读详情

前言

只有光头才能变强。

文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y

上一篇已经讲解了「大数据入门」的相关基础概念和知识了,这篇我们来学学HDFS。如果文章有错误的地方,不妨在评论区友善指出~

一、HDFS介绍

上篇文章已经讲到了,随着数据量越来越大,在一台机器上已经无法存储所有的数据了,那我们会将这些数据分配到不同的机器来进行存储,但是这就带来一个问题:不方便管理和维护

所以,我们就希望有一个系统可以将这些分布在不同操作服务器上的数据进行统一管理,这就有了分布式文件系统

  • HDFS是分布式文件系统的其中一种(目前用得最广泛的一种)

在使用HDFS的时候是非常简单的:虽然HDFS是将文件存储到不同的机器上,但是我去使用的时候是把这些文件当做是存储在一台机器的方式去使用(背后却是多台机器在执行):

  • 好比:我调用了一个RPC接口,我给他参数,他返回一个response给我。RPC接口做了什么事其实我都不知道的(可能这个RPC接口又调了其他的RPC接口)-----屏蔽掉实现细节,对用户友好

HDFS使用

明确一下:HDFS就是一个分布式文件系统,一个文件系统,我们用它来做什么?存数据呀。

下面,我们来了解一下HDFS的一些知识,能够帮我们更好地去「使用」HDFS

二、HDFS学习

从上面我们已经提到了,HDFS作为一个分布式文件系统,那么它的数据是保存在多个系统上的。例如,下面的图:一个1GB的文件,会被切分成几个小的文件,每个服务器都会存放一部分。

那肯定会有人会问:那会切分多少个小文件呢?默认以128MB的大小来切分,每个128MB的文件,在HDFS叫做块(block)

显然,这个128MB大小是可配的。如果设置为太小或者太大都不好。如果切分的文件太小,那一份数据可能分布到多台的机器上(寻址时间就很慢)。如果切分的文件太大,那数据传输时间的时间就很慢。

PS:老版本默认是64MB

一个用户发出了一个1GB的文件请求给HDFS客户端,HDFS客户端会根据配置(现在默认是128MB),对这个文件进行切分,所以HDFS客户端会切分为8个文件(也叫做block),然后每个服务器都会存储这些切分后的文件(block)。现在我们假设每个服务器都存储两份。

这些存放真实数据的服务器,在HDFS领域叫做DataNode

现在问题来了,HDFS客户端按照配置切分完以后,怎么知道往哪个服务器(DataNode)放数据呢?这个时候,就需要另一个角色了,管理者(NameNode)。

NameNode实际上就是管理文件的各种信息(这种信息专业点我们叫做MetaData「元数据」),其中包括:文文件路径名,每个Block的ID和存放的位置等等。

所以,无论是读还是写,HDFS客户端都会先去找NameNode,通过NameNode得知相应的信息,再去找DataNode

  • 如果是写操作,HDFS切分完文件以后,会询问NameNode应该将这些切分好的block往哪几台DataNode上写。
  • 如果是读操作,HDFS拿到文件名,也会去询问NameNode应该往哪几台DataNode上读数据。

2.1 HDFS备份

作为一个分布式系统(把大文件切分为多个小文件,存储到不同的机器上),如果没有备份的话,只要有其中的一台机器挂了,那就会导致「数据」是不可用状态的。

写到这里,如果看过我的Kafka和ElasticSearch的文章可能就懂了。其实思想都是一样的。

Kafka对partition备份,ElasticSearch对分片进行备份,而到HDFS就是对Block进行备份。

尽可能将数据备份到不同的机器上,即便某台机器挂了,那就可以将备份数据拉出来用。

对Kafka和ElasticSearch不了解的同学,可以关注我的GitHub,搜索关键字即可查询(我觉得还算写得比较通俗易懂的)

**注:**这里的备份并不需要HDFS客户端去写,只要DataNode之间互相传递数据就好了。

2.2 NameNode的一些事

从上面我们可以看到,NameNode是需要处理hdfs客户端请求的。(因为它是存储元数据的地方,无论读写都需要经过它)。

现在问题就来了,NameNode是怎么存放元数据的呢?

  • 如果NameNode只是把元数据放到内存中,那如果NameNode这台机器重启了,那元数据就没了。
  • 如果NameNode将每次写入的数据都存储到硬盘中,那如果只针对磁盘查找和修改又会很慢(因为这个是纯IO的操作)

说到这里,又想起了Kafka。Kafka也是将partition写到磁盘里边的,但人家是怎么写的?顺序IO

NameNode同样也是做了这个事:修改内存中的元数据,然后把修改的信息append(追加)到一个名为editlog的文件上。

由于append是顺序IO,所以效率也不会低。现在我们增删改查都是走内存,只不过增删改的时候往磁盘文件editlog里边追加一条。这样我们即便重启了NameNode,还是可以通过editlog文件将元数据恢复。

现在也有个问题:如果NameNode一直长期运行的话,那editlog文件应该会越来越大(因为所有的修改元数据信息都需要在这追加一条)。重启的时候需要依赖editlog文件来恢复数据,如果文件特别大,那启动的时候不就特别慢了吗?

的确是如此的,那HDFS是怎么做的呢?为了防止editlog过大,导致在重启的时候需要较长的时间恢复数据,所以NameNode会有一个内存快照,叫做fsimage

说到快照,有没有想起Redis的RDB!!

这样一来,重启的时候只需要加载内存快照fsimage+部分的editlog就可以了。

想法很美好,现实还需要解决一些事:我什么时候生成一个内存快照fsimage?我怎么知道加载哪一部分的editlog?

问题看起来好像复杂,其实我们就只需要一个定时任务。

如果让我自己做的话,我可能会想:我们加一份配置,设置个时间就OK了

  • 如果editlog大到什么程度或者隔了多长时间,我们就把editlog文件的数据跟内存快照fsiamge给合并起来。然后生成一个新的fsimage,把editlog给清空,覆盖旧的fsimage内存快照
  • 这样一来,NameNode每次重启的时候,拿到的都是最新的fsimage文件,editlog里边的都是没合并到fsimage的。根据这两个文件就可以恢复最新的元数据信息了。

HDFS也是类似上面这样干的,只不过它不是在NameNode起个定时的任务跑,而是用了一个新的角色:SecondNameNode。至于为什么?可能HDFS觉得合并所耗费的资源太大了,不同的工作交由不同的服务器来完成,也符合分布式的理念。

现在问题还是来了,此时的架构NameNode是单机的。SecondNameNode的作用只是给NameNode合并editlog和fsimage文件,如果NameNode挂了,那client就请求不到了,而所有的请求都需要走NameNode,这导致整个HDFS集群都不可用了。

于是我们需要保证NameNode是高可用的。一般现在我们会通过Zookeeper来实现。架构图如下:

主NameNode和从NameNode需要保持元数据的信息一致(因为如果主NameNode挂了,那从NameNode需要顶上,这时从NameNode需要有主NameNode的信息)。

所以,引入了Shared Edits来实现主从NameNode之间的同步,Shared Edits也叫做JournalNode。实际上就是主NameNode如果有更新元数据的信息,它的editlog会写到JournalNode,然后从NameNode会在JournalNode读取到变化信息,然后同步。从NameNode也实现了上面所说的SecondNameNode功能(合并editlog和fsimage)

稍微总结一下:

  • NameNode需要处理client请求,它是存储元数据的地方
  • NameNode的元数据操作都在内存中,会把增删改以editlog持续化到硬盘中(因为是顺序io,所以不会太慢)
  • 由于editlog可能存在过大的问题,导致重新启动NameNode过慢(因为要依赖editlog来恢复数据),引出了fsimage内存快照。需要跑一个定时任务来合并fsimage和editlog,引出了SecondNameNode
  • 又因为NameNode是单机的,可能存在单机故障的问题。所以我们可以通过Zookeeper来维护主从NameNode,通过JournalNode(Share Edits)来实现主从NameNode元数据的一致性。最终实现NameNode的高可用。

2.3 学点DataNode

从上面我们就知道,我们的数据是存放在DataNode上的(还会备份)。

如果某个DataNode掉线了,那HDFS是怎么知道的呢?

DataNode启动的时候会去NameNode上注册,他俩会维持心跳,如果超过时间阈值没有收到DataNode的心跳,那HDFS就认为这个DataNode挂了。

还有一个问题就是:我们将Block存到DataNode上,那还是有可能这个DataNode的磁盘损坏了部分,而我们DataNode没有下线,但我们也不知道损坏了。

一个Block除了存放数据的本身,还会存放一份元数据(包括数据块的长度,块数据的校验和,以及时间戳)。DataNode还是会定期向NameNode上报所有当前所有Block的信息,通过元数据就可校验当前的Block是不是正常状态。

最后

其实在学习HDFS的时候,你会发现很多的思想跟之前学过的都类似。就比如提到的Kafka、Elasticsearch这些常用的分布式组件。

如果对Kafka、Elasticsearch、Zookeeper、Redis等不了解的同学,可以在我的GitHub里边找对应的文章哦~我觉得还算写得通俗易懂的。

改天整合一下这些框架的持久化特点,再写一篇(因为可以发现,他们的持久化机制都十分类似)

下一篇无意外的话,会写写MapReduce,感谢你看到这里。

参考资料:

  • HDFS漫画
  • 《从零开始学大数据 -李智慧》

img

涵盖Java后端所有知识点的开源项目(已有6 K star):https://github.com/ZhongFuCheng3y/3y

如果大家想要实时关注我更新的文章以及分享的干货的话,微信搜索Java3y。

PDF文档的内容均为手打,有任何的不懂都可以直接来问我(公众号有我的联系方式)。

Hadoop之HDFS 一.HDFS概述 1.1HDFS产生的背景定义 1)背景:随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的 操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统。HDFS只是分布式文件管理系统中的一种。 2)定义:HDFS(Hadoop Distributed File System),它是一个文件系统,用于存储文件,通过目录树来定位文件;其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。 H 阅读详情

相关推荐

HDFS分布文件系统(Hadoop Distributed File System)

HDFS作为Hadoop生态中的核心组件之一,提供了可靠、高效、可扩展的数据存储服务。通过深入了解HDFS的原理、架构、特性和实战应用,我们可以更好地利用HDFS来处理和分析大数据,为企业创造更大的价值。同时,随着大数据技术的不断发展,HDFS也在不断地演进和完善,相信未来HDFS将在大数据领域发挥更加重要的作用。

2301_79641790的博客 3009

深入解析HDFS:定义、架构、原理、应用场景及常用命令

HDFS是Hadoop生态系统中的一个分布式文件系统,旨在在集群的廉价硬件上可靠地存储大数据集。HDFS设计为高容错,并为高吞吐量数据访问而优化,适用于在商用硬件上运行的大数据应用。

CloudJourney的博客 1万+

python使用hdfs库操作Hadoop的HDFS

此次使用python的hdfs库操作HDFS,首相安装该库:pip install hdfs 其次,要保证HDFS可用,如下图就代表可用,当然你列出的文件和我的不同 老规矩,先来看看它这个库的大概结构,方便以后调用。先 import hdfs ,然后跟进hdfs库,查看定义它的地方。如下,既然是连接的库,那么这个client就是连接的客户端了,这里出现了三个client,它们有什么不同 首先是Client类,转到定义处之后,可以发现它里面有很多操作,基本的增删查改都有了,看它的 __init__ 方法,

名狱的博客 1万+

HDFS详解

HDFS,Hadoop Distribute File System(Hadoop分布式文件系统)的简称,它是Hadoop核心组件之一,是大数据生态圈最底层的分布式存储服务。将计算靠近数据,而不是将数据移动到离计算更近的地方,使得应用的计算更有效率。HDFS遵循主从架构(master/slave)。通常包括一个主节点和多个从节点。主节点为NameNode,从节点为DataNode。在内部,文件分块存储,每个块根据复制因子存储在不同的从节点(DataNode)计算机上形成备份。

m0_37967990的博客 7198

HDFS是啥?HDFS原理 HDFS详解

HDFS概念 HDFS(Hadoop Distributed File System): 它是一个分布式文件系统,用于存储文件,通过目录树来定位文件; HDFS的设计适合一次写入,多次读出的场景,且不支持文件的修改。适合用来做数据分析,并不适合用来做网盘应用。 HDFS优缺点 优点 1)高容错性 (1)数据自动保存多个副本。它通过增加副本的形式,提高容错性; (2)某一个副本丢失以后,它可以自动恢...

lljazxx的博客 3845

用命令获取hdfs的基本信息 - hdfs getconf 和 hdfs dfsadmin

用hdfs getconf 和  hdfs dfsadmin 可以获得hdfs的基本信息。

老胡的笔记 6334

hdfs 备份数配置_什么是HDFS?算了,告诉你也不懂。

一、HDFS介绍上篇文章已经讲到了,随着数据量越来越大,在一台机器上已经无法存储所有的数据了,那我们会将这些数据分配到不同的机器来进行存储,但是这就带来一个问题:不方便管理和维护所以,我们就希望有一个系统可以将这些分布在不同操作服务器上的数据进行统一管理,这就有了分布式文件系统HDFS是分布式文件系统的其中一种(目前用得最广泛的一种)在使用HDFS的时候是非常简单的:虽然HDFS是将文件存储到不同...

weixin_36379084的博客 780

HDFS是什么

认识HDFS HDFS 是一个具有高度容错性的分布式文件系统, 适合部署在廉价的机器上。 HDFS 能提供高吞吐量的数据访问, 非常适合大规模数据集上的应用。HDFS 的架构如图所示, 总体上采用了 master/slave 架构, 主要由以下几个组件组成 :Client、 NameNode、 Secondary NameNode 和 DataNode。 下面分别对这几个组件进行介绍: Cli...

夜路破晓的博客 3789

HDFS全面详解

文章目录课程大纲(HDFS详解)学习目标:HDFS基本概念篇1.1HDFS前言1.2HDFS的概念和特性HDFS基本操作篇2.1HDFS的shell(命令行客户端)操作2.1.1 HDFS命令行客户端使用2.2 命令行客户端支持的命令参数2.3 常用命令参数介绍HDFS原理篇hdfs的工作机制3.1 概述3.2 HDFS写数据流程3.2.1 概述3.2.2 详细步骤图3.2.3 详细步骤解析3.3...

大圣即大盗 5万+

【HDFS】【HDFS架构】【HDFS Architecture】【架构】

1 Introduction介绍 The Hadoop Distributed File System (HDFS) is a distributed file system designed to run on commodity hardware. It has many similarities with existing distributed file systems. However, the differences from other distributed file systems

wq6qeg88的博客 1596

HDFS总结

一、简介 1.什么是HDFS? 利用网络将文件存储在多个主机上 2.特点 1)流数据读写:HDFS目标是处理批量数据,为了提高数据吞吐量,采用流数据的读取方式; 2)简单一致的文件模型:一次写入、多次读取的简单模型,文件一次写入,之后只能读取; 3)超大规模数据集:可以存储PB级别的数据; 4)高可用性:可以自动检测硬件故障,并自动恢复; 3.基本概念 1)数据块 默认块的大小...

厚积薄发 4521

用distcp实现ftp到hdfs、hdfs到hdfs、hdfs到ftp的文件传输

  文件本身存在ftp上,为了文件内的数据和数仓hive中的数据做分析,需要将ftp的数据上传 到hdfs,方法有很多,如果不是需要完全实时监控的话,可以采取hdfs自带的指令distcp抽取;    题外话:完全实时上传可以采取flume监控ftp文件件,再读取存入kafka,后续消费者消费kafka获取文件数据的方式,后续再讲,这节只讲distcp; 1. 指令用法   distcp不仅可以实现hdfs集群1到hdfs集群2的文件传输,也可以实现ftp和hdfs之间的文件传输,只需要切换相应的协议头即

LXWalaz1s1s的博客 2655

HDFS 原理分析

客户端拿到数据存放节点位置信息后,会和对应的DataNode节点进行直接交互,进行数据写入,由于数据块具有副本replication,在数据写入时采用的方式是先写第一个副本,写完后再从第一个副本的节点将数据拷贝到其它节点,依次类推,直到所有副本都写完了,才算数据成功写入到HDFS上,副本写入采用的是串行,每个副本写的过程中都会逐级向上反馈写进度,以保证实时知道副本的写入情况;、NameNode会将子节点的相关元数据信息缓存在内存中,对于文件与Block块的信息会通过。

qq_64412267的博客 1013

HDFS 简介 与HDFS 架构

3.1 HDFS 简介 任务目的 了解传统文件系统到分布式文件系统的演变过程 理解 HDFS 中重要角色的相关概念 理解 HDFS 的优缺点 任务1:HDFS 的演变 HDFS 源于Google在2003年10月份发表的GFS(Google File System)论文,接下来从传统的文件系统入手,开始学习分布式文件系统,以及分布式文件系统是如何演变而来。 传统的文件系统对海量数据的处理方式是将数据文件直接存储在一台服务器上。如下图所示:    从上图可以看出,传统的文件系统在存储数据

weixin_51633501的博客 4615

U盘安装单系统ubuntu10.04之全过程&拔掉U盘后系统无法启动

借助U盘把电脑装成ubuntu单系统之过程记录,以及遇到拔掉U盘后系统无法启动问题,电脑就显示: Non-System disk or disk error, replace and strike any key when ready

CXHPLY的专栏 8680

解决用加速器以后,电脑无法连接网络的问题

相信很多朋友也遇到过,用加速器以后,电脑网络直接断了,或者访问外网时打不开的情况解决办法是。

qq_46368050的博客 1万+

hdfs的实验总结_HDFS原理及操作

HDFS实验报告目录:一、三个实验总结步骤二、三个实验具体步骤三、实验心得一、三个实验总结步骤(1)测试例子1.编译代码读取HDFS文件内容在/app/hadoop-1.1.2目录下建立myclass和input目录,在hdfs中建立目录/class4;input目录下建立并编写quangle.txt文件,将本地quangle.txt文件复制到class4目录下;myclass目录下建立、编写并编...

weixin_39608988的博客 8668

先楫HPM6E00EVK EtherCAT从站配置与CIA402 8轴运动控制实战解析

本文详细解析了先楫HPM6E00EVK开发板的EtherCAT从站配置与CIA402 8轴运动控制实战。从环境准备、XML文件配置、代码移植到TwinCAT工程设置,提供了完整的移植指南,帮助开发者实现高效的多轴同步运动控制。

o5p6q的博客 415

【HDFS】HDFS简要说明

HDFS简介一级目录二级目录三级目录 一级目录 二级目录 三级目录

phoenix990258817的博客 1083

Visio中高效绘制空间坐标系的实用技巧

本文详细介绍了在Visio中从零开始高效绘制精准空间坐标系的实用技巧。文章摒弃了现成形状的局限,重点讲解了如何利用直线、箭头和文本框等基础工具,结合网格设置、绘图比例调整和图层管理,构建完全可控的三维坐标系。通过分步指南,帮助用户掌握刻度添加、标注对齐及模板创建等高级方法,从而在科研绘图与工程制图中实现专业级的视觉效果。

e3f4g5的博客 558

【Bug已解决】Context window exceeded / Token limit reached — Claude Code 上下文窗口超限解决方案

Claude Code 长会话中报上下文窗口/Token 超限,本质是对话历史、文件内容、工具结果累积超过 200K 上限。文中给出 /clear、/compact、分批读大文件、限制工具输出、配置 autoCompact 等完整方案。

一键难忘的博客 6728

HDFS实验二:部署HDFS/学习搭建HDFS

一、HDFS实验:部署HDFS指导 2.1 实验目的 1. 理解HDFS存在的原因; 2. 理解HDFS体系架构; 3. 理解master/slave架构; 4. 理解为何配置文件里只需指定主服务、无需指定从服务; 5. 理解为何需要客户端节点; 6. 学会逐一启动HDFS和统一启动HDFS; 7. 学会在HDFS中上传文件。 2.2 实验要求 要求实验结束时,已构建出以下H...

WistWill的博客 4339

不会C# Winform用户界面设计?是因为没有掌握这些控件(建议收藏)

文章目录6.1 常用控件6.1.1 单选按钮(RadioButton)6.1.2 复选框(CheckBox)6.1.3 框架1. 面板控件Panel2. 分组框GroupBox3. TabControl控件6.1.4 应用实例6. 2 列表框和组合框6.2.1 列表框(ListBox)6.2.2 组合框(ComboBox )6.2.3 应用实例6.3 用户交互界面6.3.1 滚动条和进度条6.3.2 定时器6.3.3 菜单设计菜单设计概述MenuStrip和ContextMenuSt

智慧空间实验室 2920
上一篇: 面试官:什么是二叉树
下一篇: 这篇NIO文章,你看不懂来找我领红包
Java3y
Java3y 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 1万+粉丝 509原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值