Hadoop-分布式文件系统HDFS

本文介绍了Hadoop的分布式文件系统HDFS,包括其shell命令、架构组成如NameNode、DataNode和Secondary NameNode。详细阐述了文件上传过程中NameNode如何管理元数据,以及DataNode的工作原理。NameNode在接收到客户端上传文件请求后,分配DataNode并记录元数据,DataNode负责接收和存储block,并在必要时进行故障恢复。
部署运行你感兴趣的模型镜像

HDFS的shell命令

既然是一个文件系统,它有对文件的基本操作(类似linux里面的cp、mv、ls等)
调用方式:把hadoop里面的bin添加到环境变量,以下一些操作hadoop3可以直接通过web页面操作

hadoop fs -ls /  #查看HDFS的根目录
hadoop fs -mkdir /test #在根目录下建立test文件夹
hadoop fs -put ./xx   #上传
hadoop fs -get /test/test.txt #下载
hadoop fs -appendToFile  xxlocal.txt /test/text.txt #将xxlocal.txt里面内容追加到hdfs/test/text.txt中
hadoop fs -moveFromLocal xxlocal.txt /test #将xxlocal.txt移动到hdfs上,本地没有了

hadoop fs -du -s -h /test #统计文件夹的大小(包含所有副本),去掉-s 查看文件夹内部细节的大小
hadoop fs -setrep 10 /test/xx.txt #设置文件为10个副本(前提是至少有10个节点),否则实际存储还是节点的数量
。。。



HDFS的架构

  • NameNode
  • DataNode
  • Secondary NameNode

例子:上传一个文件的过程

  1. 客户端请求上传一个文件(请求NameNode)
  2. NameNode会分配哪几个DataNode给客户端,NameNode里面记录元数据(文件分成几个block,每个block在那个DataNode上)
  3. 客户端将文件上传到DataNode上
    (1)上传block1,上传完了之后到block2,再到block3,如果完成了,接下来的过程跟客户端无关了
    (2)同时当block1上传完之后,由block1上传副本到另一个DataNode,再由副本上传另一个副本到另一个DataNode
    (3)如果第三个副本由第二个传输的时候失败了,第二个响应第一个,第一个响应NameNode,NameNode知道第三个副本上传失败,会重新再分配一个DataNode,由第一或者第二个中任意一个再去上传
    在这里插入图片描述

NameNode如何管理元数据

在这里插入图片描述

  1. 客户端请求写数据,NN(NameNode)会分配DataNode,这些数据会先在edits_log(很小,做缓存用)里面保存为日志
  2. 当客户端写完之后,给NN响应,NN将日志以元数据的形式读到内存里(方便查询速度、实时响应多个客户端)
  3. 等到edits_log满了之后,它会和fsimage(存在硬盘的元数据,和内存中是同步的)进行合并,需要借助Secondary NameNode(因为这个过程需要将log数据转到元数据的格式,需要计算时间),合并过程如下:

注释:Checkpoint:合并操作
在这里插入图片描述

  • 元数据的存储格式

在这里插入图片描述

  1. /test/a.log : HDFS的虚拟路径
  2. 3 :副本数
  3. {blk_1, blk_2}:几个block
  4. [{blk_1:[h0,h1,h3]}]:blk_1三个副本在哪几个DataNode主机上(h0,h1,h3)

NameNode的职责

  1. 管理元数据
  2. 维护HDFS的目录
  3. 响应客户端的请求

DataNode的工作原理

在这里插入图片描述

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

### Hadoop 分布式文件系统 (HDFS) 介绍 HDFS 是一种专为运行在通用硬件上的分布式文件系统而设计的解决方案[^1]。作为一种高度容错性的系统,HDFS 特别适合部署于成本低廉的机器之上,并且能够提供高吞吐量的数据访问能力,这使得它成为处理大规模数据集的理想选择。 #### HDFS 的核心特性 - **可扩展性强**:随着业务增长需求增加时,只需简单地向集群中添加更多节点即可轻松扩大存储容量; - **可靠性高**:即使部分物理设备发生故障也不会影响整个系统的正常运作;为了保障数据的安全性和可用性,在默认情况下会保存三个副本; - **性能优越**:针对大文件进行了优化,提供了高效的顺序读取速度以及批量写入效率。 #### 工作机制概述 当应用程序请求创建新文件或将现有文件追加内容时: 1. 客户端先联系 NameNode 获取目标 DataNodes 列表; 2. 接着客户端直接与这些 DataNodes 进行通信完成实际的数据传输操作; 3. 对于每一个 block,默认会在多个不同的 DataNodes 上面保留多份拷贝以确保可靠性和提高并发度。 而在读取过程中,则是从最近的一个拥有该block副件的DataNode获取所需信息。 ```bash hdfs dfs -put localfile /user/hadoop/hadoopfile # 将本地文件上传到HDFS hdfs dfs -cat /user/hadoop/hadoopfile # 查看HDFS中的文件内容 ``` 上述命令展示了如何使用 `fs` 命令来管理 HDFS 文件系统,包括但不限于查看目录结构、上传和下载数据等基本功能[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值