点一下关注吧!!!非常感谢!!持续更新!!!
🚀 AI篇持续更新中!(长期更新)
目前2025年06月05日更新到: AI炼丹日志-28 - Audiblez 将你的电子书epub转换为音频mp3 做有声书,持续打造实用AI工具指南!📐🤖
💻 Java篇正式开启!(300篇)
目前2025年06月05日更新到: Java-39 深入浅出 Spring - AOP切面增强 核心概念 通知类型 XML+注解方式 附代码 MyBatis 已完结,Spring 正在火热更新中,深入浅出助你打牢基础!
📊 大数据板块已完成多项干货更新(300篇):
包括 Hadoop、Hive、Kafka、Flink、ClickHouse、Elasticsearch 等二十余项核心组件,覆盖离线+实时数仓全栈! 目前2025年06月05日更新到: 大数据-278 Spark MLib - 基础介绍 机器学习算法 梯度提升树 GBDT案例 详解
👉 点个关注,不迷路!后续还将持续更新更多大模型+数据智能+工程实战内容,敬请期待!
章节内容
上一节完成:
- Hadoop历史服务器配置
- Hadoop历史日志聚集
- Hadoop历史日志可视化
背景介绍
这里是三台公网云服务器,每台 2C4G,搭建一个Hadoop的学习环境,供我学习。 之前已经在 VM 虚拟机上搭建过一次,但是没留下笔记,这次趁着前几天薅羊毛的3台机器,赶紧尝试在公网上搭建体验一下。
注意,如果你和我一样,打算用公网部署,那一定要做好防火墙策略,避免不必要的麻烦!!! 请大家都以学习为目的,也请不要对我的服务进行嗅探或者攻击!!!
但是有一台公网服务器我还运行着别的服务,比如前几天发的:autodl-keeper 自己写的小工具,防止AutoDL机器过期的。还跑着别的Web服务,所以只能挤出一台 2C2G 的机器。那我的配置如下了:
- 2C4G 编号 h121
- 2C4G 编号 h122
- 2C2G 编号 h123
请确保上一章节已经全部跑通!
HDFS 简介
HDFS (全称:Hadoop Distribute File System,Hadoop 分布式文件系统)是 Hadoop 核心组成,是分布式存储服务。
分布式文件系统横跨多台计算机,在大数据时代有着广泛的应用前景,它们为存储和处理超大规模数据提供所需的扩展能力。
HDFS是分布式文件系统中的一种。
HDFS 通过统一的命名空间目录树来定位文件; 另外,它是分布式的,由很多服务器联合起来实现。集群中的服务器有各自的角色。
- 典型的
Master/Slave架构 集群往往是 一个NameNode + 多个DataNode(HA下是2个NameNode)NameNode是主节点,DataNode是从节点。 - 分块机制(
block机制)HDFS中是按分块存储的,Hadoop2.x版本默认是128MB一块 - 命名空间(
NameSpace)支持传统的文件组织结构,用户或程序可以创建目录,将文件保存到文件夹中。NameNode负责维护文件系统的名字空间,所有操作都会被NameNode记录下来。 - NameNode元数据管理,元数据中记录
每一个文件对应的block信息 - DataNode数据存储,文件的
各个block具体由DataNode节点承担,一个block会由多个DataNode进行存储。DataNode定时向NameNode来汇报自己的信息。 - 副本机制。为了容错,每个block都有自己的
副本。每个文件的block大小和副本系数都是可以配置的。副本系数可以在创建文件的时候指定,也可以在之后改变,副本数量默认是3个。 一次写入,多次写出。HDFS设计成一次写多次读的场景。且不支持修改,支持追加写入,但是不能随机写更新。
具体的组成结构如下图:
NameNode
NameNode(nn)HDFS集群的管理者,Master
维护管理HDFS的名称空间 NameSpace维护副本策略记录文件块Block的映射信息- 负责
处理客户端的读写请求
DataNode
NameNode下达命令,DataNode执行实际操作,Slave。
- 保存
实际的数据块 负责数据块的读写
Client
- 上传文件到HDFS的时候,Client负责将文件
切分成Block,然后进程上传。 请求NameNode交互,获取文件的位置信息- 读取或写入文件,
与DataNode交互 - Client可以使用一些命令来管理HDFS或者访问HDFS
HDFS 读数据
- 客户端Distributed FileSystem
向 NameNode请求下载文件,NameNode通过查询元数据,找到文件块所在的DataNode地址。 挑选一台DataNode(就近选择,然后随机),请求读取数据DataNode开始传输数据给客户端,从磁盘里读取数据输入流,以Packet单位来做校验。- 客户端以Packet为单位接收,
先在本地缓存,然后写入目标文件。
HDFS 写数据
- 客户端通过Distributed FileSystem模块
向NameNode请求上传文件,NameNode检查目标文件是否已存在,父目录是否存在。 - NameNode
返回是否可以上传 - 客户端请求
第一个Block上传到哪几个DataNode服务器 - NameNode返回3个DataNode节点,分别为
dn1, dn2, dn3 - 客户端通过 FSDataOutputStream模块请求上传 dn1,dn1接到请求后会
继续调用dn2,dn2再调用dn3。然后dn1,dn2、dn3逐级应答客户端。 - 客户端开始往dn1上传第一个Block(先从磁盘读取数据放到一个本地缓存),以Packet为单位,dn1收到一个Packet就传给dn2,dn2给dn3,dn1每传一个Packet会
放入一个确认队列等待确认。 - 当一个Block传输完成之后,客户端
再次请求NameNode上传第二个Block的服务器
HDFS的应用场景
- 大数据处理:如Hadoop MapReduce、Spark等大数据处理框架,通常需要处理大量结构化和非结构化数据,而HDFS提供了大规模数据存储的基础。
- 数据存档:HDFS适合用于存储企业的大数据备份、归档文件,因为其具备高容错和高吞吐的特点。
- 日志存储与分析:HDFS适用于存储和管理日志数据,很多公司会把日志数据直接导入HDFS,然后进行分布式计算和分析。
HDFS集群的管理
HDFS作为Hadoop生态中的核心组件,为大规模数据存储和处理提供了可靠的基础设施。它采用了分布式的存储方式,具有高容错性和可扩展性,非常适合批处理大数据分析任务。尽管它在小文件处理和实时更新方面存在一定的限制,但HDFS依然是目前广泛应用于数据密集型行业的数据存储解决方案。
- 配置管理:集群管理员需要配置文件系统的路径、副本数、块大小、DataNode数量等。通常使用hdfs-site.xml和core-site.xml来配置HDFS参数。
- 监控和维护:HDFS提供了多种监控工具,如Hadoop的Web UI,通过它可以监控节点的状态、查看元数据和数据块的分布情况。
- 容灾与备份:可以通过设置备份NameNode或使用分布式的文件系统管理来实现灾难恢复。同时,还可以定期备份HDFS的数据。