分布式存储框架HDFS详解

部署运行你感兴趣的模型镜像

一、HDFS的基础架构

NameNode:

  • HDFS系统的主角色,是一个独立的进程
  • 负责管理HDFS整个文件系统
  • 负责管理DataNode

DataNode:

  • HDFS系统的从角色,是一个独立的进程
  • 主要负责数据的存储,即存入数据和取出数据

SecondaryNameNode:

  • NameNode的辅助,是一个独立进程
  • 主要帮助NameNode完成元数据整理工作

二、HDFS存储原理

1. 分布式存储,将数据放在多个服务器中,并行处理读写

2. 设定统一的管理单位,Block块,最小存储单位,每个256MB

3. 副本机制,每个块的副本放在别的服务器上,增加容错

三、 NameNode元数据

Edits文件:记录了HDFS中的每一次操作,以及本次操作影响的文件及其对应的Block

FsImage文件:对Edits文件的合并,记录了文件及其对应的Block的最终信息

NameNode基于Edits和FSImage的配合,完成整个文件系统文件的管理:

1. 每次对HDFS的操作,均被Edits文件记录

2. Edits文件达到大小上线后,开启新的Edits记录

3. 定期进行Edits的合并操作

  • 如当前没有FsImage文件,将全部Edits合并为第一个FsImage
  • 如当前已存在FsImage文件,将全部Edits和已存在的FsImage进行合并,形成新的FsImage

SecondaryNameNode会通过http从NameNode拉取数据(edits和fsimage),然后合并完成后提供给NameNode使用

四、HDFS数据的读写流程

数据写入流程

1. 客户端向NameNode发起请求

2. NameNode审核权限、剩余空间后,满足条件允许写入,并告知客户端写入的DataNode地址

3. 客户端向指定的DataNode发送数据包

4. 被写入数据的DataNode同时完成数据副本的复制工作,将其接受的数据分发给其他的DataNode

5. DataNode以管道的方式一个接一个将数据副本复制到所有的DataNode节点上

6. 写入完成客户端通知NameNode,NameNode做元数据记录工作

关键点:

  • NameNode不负责数据写入,只负责元数据的记录和权限审批
  • 客户端直接向1台DataNode写数据,这个DataNode一般是离客户端最近(网络距离)的那一个
  • 数据块副本的复制工作,由DataNode之间自行完成(构建一个管道,按顺序复制分发)

数据读取流程

1. 客户端向NameNode申请读取某文件

2. NameNode判断客户端权限等细节后,允许读取,并返回此文件的Block列表

3. 客户端拿到Block列表后自行寻找DataNode读取即可

关键点:

  • 数据同样不通过NameNode提供
  • NameNode提供的Block列表,会基于网络距离计算尽量提供离客户端最近的                                                                             

五、HDFS常用命令

--启动hdfs集群
start-dfs.sh
 
--关闭hdfs集群
stop-dfs.sh

--单进程启停,单独控制所在机器的进程启停
hdfs --daemon (start|status|stop) (namenode|secondarynamenode|datanode)

--创建文件夹
hdfs dfs -mkdir [-p] <path> ...

--查看指定目录下的内容
hdfs dfs -ls [-h] [-R] [<path> ...]

--上传文件到HDFS指定目录下
hdfs dfs -put [-f] [-p] <localsrc> ... <dst>

--查看HDFS文件内容
hdfs dfs -cat <src> ...
--读取大文件可以使用管道符配合more实现分页
hdfs dfs -cat <src> | more

--下载HDFS文件
hdfs dfs -get [-f] [-p] <src> ... <localdst>

--拷贝HDFS文件
hdfs dfs -cp [-f] <src> ... <dst>

--追加数据到HDFS文件中
hdfs dfs -appendTofile <localsrc> ... <dst>

--HDFS数据移动操作
hdfs dfs -mv <src> ... <dst>

--HDFS数据删除操作
hdfs dfs -rm -r [-skipTrash] URI [URI ...]

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

Python3.8

Python3.8

Conda
Python

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值