嗨,各位小伙伴,恭喜大家学习到这里,不知道关于大数据前面的知识遗忘程度怎么样了,又或者是对大数据后面的知识是否感兴趣,本文是《大数据从入门到精通(超详细版)》
的一部分,小伙伴们如果对此感谢兴趣的话,推荐大家按照大数据学习路径开始学习哦。
以下就是完整的学习路径哦。
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
大数据从入门到精通文章体系!!!!!!!!!!!!!!
↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
推荐大家认真学习哦!!!
前面的文章里面我们已经对Hadoop大数据框架已经有了初步的认识了,我们知道了Hadoop框架主要作用于大数据领域,完成数据的海量存储,对海量数据完成高速的存储。这些功能的完成得益于其内部的众多组件。
今天我们介绍其核心组件之一,HDFS。
HDFS(Hadoop Distributed File System)
是 Hadoop 的分布式文件系统,用于存储大规模数据集并在 Hadoop 集群中进行分布式处理。
这里怎么理解呢?
就类似于这种关系,所有用户,系统等等都会产生数据,这些数据会存储在哪里呢,就存储在HDFS当中,HDFS作为Hadoop集群框架当中存储数据的空间,Hive讲HDFS当中的数据转为可分析的结构化数据,Yarn负责对这些数据的任何操作,这三大组件各司其职,完成了整个Hadoop框架的运行,完成了大数据相关的业务流程
HDFS 的设计目标是在廉价的硬件上提供高容错性、高吞吐量的数据存储和处理能力。它是一种被设计成适合运行在通用硬件上的分布式文件系统。由很多服务器联合起来实现其功能的系统,集群中的服务器有各自的角色。
我们先搞清楚一个重要的概念:分布式
相信各位小伙伴都或多或少听过过分布式这个概念,到底啥是分布式呢?
先来看看最官方的解释:
分布式(Distributed)是指将计算任务或数据分散到多台计算机或服务器上进行处理和存储的计算模型。在分布式系统中,多台计算机通过网络进行通信和协调,共同完成任务或存储数据。
分布式系统的主要目标是提高计算能力、可靠性、扩展性和容错性,以应对大规模的计算和数据处理需求。与传统的集中式系统相比,分布式系统具有以下特点:
是不是很多话呀~~~
其实分布式总结下来就一句话:多台不同的计算机完成同一个任务
说我了分布式,接下来我们说一下什么是HDFS的分布式存储。
涉及到分布式,那么肯定涉及到多台电脑,那么这么多台电脑是怎么协调工作,完成大量数据的存储的呢?
这里我们就需要介绍一下HDFS集群的三种节点了。
分别是NameNode , DataNode , SecondaryNameNode
元数据管理(Metadata Management):NameNode 负责管理整个文件系统的命名空间和元数据,包括文件和目录的创建、删除、重命名等操作。它维护了文件与数据块的映射关系,记录每个文件被分成哪些数据块以及这些数据块存储在哪些数据节点上。
数据节点管理(DataNode Management):NameNode 跟踪监视数据节点的状态,包括数据节点的存活状态、容量使用情况等。它**定期从数据节点接收心跳信息,并通过心跳来确认数据节点的可用性。如果一个数据节点长时间未发送心跳,NameNode 将视其为不可用的节点。**
块位置管理(Block Location Management):NameNode 记录每个数据块
的位置信息,即数据块在哪些数据节点上的副本。客户端在访问文件时,可以向 NameNode 查询获取数据块
的位置信息,然后直接与数据节点通信进行数据的读取或写入。
文章的后半部分会详细介绍HDFS文件的分块,耐心看完哦。
故障处理(Fault Tolerance):NameNode 负责监测数据节点的故障,并根据副本的数量和副本放置策略来确保数据的可靠性和容错性。如果某个数据块的一个副本损坏或数据节点故障,NameNode 将负责复制新的副本或指定其他数据节点上的副本。
NameNode这四个作用非常重要,他可以算做一个HDFS集群的脑部,协调整个身体(集群)进行运作。
DataNode 执行以下主要功能:
数据存储:DataNode 负责存储实际的数据块。它接收来自客户端或其他 DataNode 的数据写入请求,并将数据块保存在本地磁盘上。数据块通常以本地文件的形式存在,DataNode 使用一种称为本地文件系统(Local File System)的方式来管理这些文件。
存储数据是作为DataNode最主要的功能。
数据块复制:DataNode 被要求根据 HDFS 的副本策略,通过与其他 DataNode 之间进行数据传输,复制和同步数据块的副本。每个数据块的副本数量由配置参数决定,默认情况下为三个。DataNode 与其他 DataNode 之间通过高速网络进行数据传输,以确保数据的可靠性和容错性。
副本可以在一开始存储数据的时候就对其进行指定,默认为3个副本,所以这里建议HDFSDataNode节点至少有三台,防止业务节点宕机导致数据丢失。
数据块读取:DataNode 提供数据访问服务,当客户端请求读取数据块
时,DataNode 会根据元数据中的信息定位到所需数据块
,并将数据块传输给客户端。客户端可以直接从 DataNode 获取数据块,从而实现数据的高效读取。
心跳和状态报告:DataNode 定期向 NameNode 发送心跳信号,用于确定 DataNode 的可用性。同时,DataNode 还会通过状态报告向 NameNode 提供有关本地存储的信息,包括磁盘空间的使用情况、存储的数据块列表等。
故障处理:DataNode 监测自身和其他 DataNode 的故障情况,并与 NameNode 协同工作以确保数据的完整性和可用性。如果某个数据块的副本损坏或所在的 DataNode 失效,NameNode 将通知其他 DataNode 进行恢复操作,以保持数据的一致性。
在早期版本的 Hadoop 中,SecondaryNameNode 是 HDFS 的一个组件,它的主要作用是协助 NameNode 来处理元数据备份和检查点操作,以提高系统的可靠性和恢复能力。然而,从 Hadoop 2.x 开始,SecondaryNameNode 被改进为 CheckpointNode,并且完全不再是 HDFS 的必需组件。
现在,HDFS 中不再需要 SecondaryNameNode 来执行元数据备份和检查点操作,而是使用了一种被称为 NameNode HA (High Availability) 的新机制。NameNode HA 让多个 NameNode 实例在集群中同时工作,其中一个为活跃状态的 NameNode 处理客户端请求,而另一个则作为备用状态的 NameNode 用于故障切换。这样可以避免单点故障,并提供更好的可用性和容错性。
尽管 SecondaryNameNode 不再是 HDFS 的必需组件,但它仍然存在于 Hadoop 中,仍然有一些特定的用途。SecondaryNameNode 在某些情况下仍然可以用于执行部分元数据备份和检查点操作,以减轻 NameNode 的工作负载,或者用于特定的维护和调试任务。
由SecondaryNameNode完成的工作主要是完成NameNode里面日志文件的重写,有点像Redis的bgsave的rewrite,只保存当前状态下的数据情况。
其实HDFS的分块与ElasticSearch的分片极其相似,副本的思想也是如出一辙。
一个完整的文件由所有的DataNode的块组成 , 如果丢掉了其中的一个块, 则文件不可用了. 块越多, 则丢失的概率越高, 所以是一个很重要的问题.
这里就需要使用到副本 ,有了副本, 就是其他块丢失了,副本存在依然能是该数据完整的查询和使用。
副本数量可以进行修改的 , 在hdfs-site.xml
配置文件当中进行修改, 默认是3个副本。
或者上传文件到dhfs当中时 , -D dfs.replication=2
也可以临时修改这个文件的副本数量。或者一个setrep
命令, 修改文件的副本数量。
HDFS 将文件切分为**固定大小的数据块,默认情况下为 128MB。这种固定大小的数据块有助于简化数据管理和读写操作,并提供更好的并行处理能力。**
HDFS 通过在数据块副本的选择上考虑数据本地性,将数据尽可能地存储在离数据计算节点近的位置。这有助于减少数据传输的网络开销,并提高数据访问的性能。
写入流程:
客户端向NameNode发起请求
NameNode审核权限, 确定剩余空间后, 满足条件则告知客户端DataNode的locations
客户端向指定的DataNode发送数据包
被写入数据的DataNode同时完成数据副本的复制操作, 将其接收的数据分发给其他的DataNode, 相当于PipeLine的流程
写入完成客户端通知NameNode, NameNode做元数据的记录工作、
过程中有几点需要注意
读取流程
以上就是HDFS文章的全部内容,相信学习完之后对HDFS已经产生了足够的认识,接下来我们学习如何完成HDFS的安装部署。