Hadoop-HDFS

本文介绍了Hadoop分布式文件系统HDFS的架构,包括NameNode和DataNode的角色,以及数据备份策略。HDFS采用master/slave结构,NameNode负责文件系统命名空间管理和数据访问控制,DataNode则存储数据并执行NameNode的指令。数据备份通过replication实现,通常设置为3份,分布在不同机架。通信协议主要涉及ClientProtocol和DataNode Protocol,所有通信基于TCP。HDFS提供FileSystem Java API和命令行工具进行文件操作。

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

对于框架/工具来说,最好的学习和参考来源还是官网。

链接:https://hadoop.apache.org/docs/r3.2.0/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html#Introduction

HDFS:Hadoop 分布式文件系统,用于为有大量数据集的application提供高速数据访问,将数据以高容错的方式部署在众多廉价机器组成的集群上。

HDFS架构

HDFS的架构为 master/slave 结构(architecture),master以NameNode表示,slave以DataNode表示。

NameNode

NameNode是一个主服务器(master server),用于管理文件系统空间( file system namespace)与客户端(client)对这些文件的访问。

DataNode

DataNode是从属节点,通常集群上的一台机器为一个节点,属于slave的为DataNode,用于管理分配到该节点上的数据。

HDFS对外暴露一个文件系统空间,让使用者以文件的形式存储数据,一个文件会被分割成多个块(block)存储在不同的DataNode,而NameNode用于管理和操作这个文件系统空间,执行诸如读写文件这样的操作,同时NameNode也管理block如何分配到DataNode。NameNode响应client请求,DataNode作为实际执行者响应来自NameNode的指令。

HDFS Architecture

Data Replication(数据备份)

为了容错,数据备份是必不可少的,每个DataNode都存放不同的block,block size和备份(replication)都可以进行配置。HDFS中的文件是一次写入的(除了追加和截断),并且在任何时候都有一个写入器。NameNode做出有关块复制的所有决定,它定期从集群中的每个DataNode接收Heartbeat和Blockreport。收到Heartbeat意味着DataNode正常运行,Blockreport包含DataNode上所有块的列表。

HDFS DataNodes

replication的数量通常被设置为3,一份保存在本地机架(rack),另外两份保存在远地的机架中。优先读取本地数据(lcoal data)副本。

NameNode定期接收DataNode的Heartbeat和Blockreport,在Blockreprt中接收整合现有block的信息,每个block必须达到最小副本数量,如果block的副本数量未达到要求,NameNode决定复制副本并放于那些DataNode中。

HDFS中的文件系统

HDFS对外提供一整个命名空间(namespace),就是一个逻辑文件系统,由NameNode进行维护。NameNode将所有文件操作记入日志,即EditLog。同时,block到文件和文件系统的映射记录在名为FsImage的文件中。EditLog与FsImage都存储在NameNode本地。和数据库中的事务(transcation)与检查点(checkpoint)一样,NameNode为保持数据的一致性,也维护一个检查点,每次启动时或检查点被触发时,检查点存储在FsImage和EditLog中,每次启动时,读取EditLog,FsImage中的数据,强制执行事务并将更新后的EditLog,FsImage刷新到磁盘。

通信协议

 HDFS的所有通信协议都属于应用层协议,使用TCP。client和NameNode通信使用ClientProtocol,DataNode和NameNode通信使用DataNode Protocol。通信过程中,NameNode接收client与DataNode的RPC(remote procedure call远程过程调用),并返回响应。

HDFS文件访问

HDFS提供一整套API(FileSystem Java API)以供调用http://hadoop.apache.org/docs/current/api/。同时也提供命令行工具能在bash中使用,其操作与bash中操作文件的指令类似。

操控FileSystem namespace的方式:例如hadoop dfs -mkdir /foodir这样的形式,直接使用hadoop命令,即在HDFS文件系统下面创建目录foodir,hadoop表示hadoop指令, dfs表示dfs(分布式文件系统)文件操作,加上前缀-,然后就是常规bash操作。这种方式已不被推荐使用。

实际上,所有的hdfs指令都被./bin/hdfs脚本所执行

执行./bin/hdfs需要给予参数完成执行,其格式为./bin/hdfs [SHELL_OPTIONS] COMMAND

其中,SHELL_OPTIONS表示与hdfs相关的命令,表示某类功能,COMMAND表示实际执行的某种功能,常见的有:

  • dfs:执行与FileSystem相关的功能,如 ./bin/hdfs dfs -mkdir /test 即创建目录,./bin/hdfs dfs -ls即查看
  • envvars:只有一个功能,执行./bin/hdfs envvars查看所配置的环境变量
  • getconf:返回相关配置信息,如./bin/hdfs getconf -namenodes 返回namenodes的配置信息
  • https:一个功能,执行./bin/hdfs httpfs返回hdfs http 网关
  • datanode:运行数据节点,如./bin/hdfs datanode -regular 默认方式启动datanode
  • dfsadmin:执行dfs管理员操作,如./bin/hdfs dfsadmin -report 打印当前dfs状况
  • dfsrouter:一个功能,执行./bin/hdfs dfsrouter查看dfs路由
  • dfsrouteradmin:执行dfs路由管理操作

命令太多了,有需要再查:https://hadoop.apache.org/docs/r3.2.0/hadoop-project-dist/hadoop-hdfs/HDFSCommands.html#Overview

 

 

 

 

 

 

 

 

 

 

再如:hadoop dfsadmin -report ,dfsadmin表示操作集群,只能由管理员来进行操作。

与本地文件类似,删除dfs文件会先放到回收站(trash directory),同时因为是dfs,所以删除时会有延迟。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值