Hadoop-分布式文件系统HDFS

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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的工作原理

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值