欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

HDFS Hadoop分布式文件系统

程序员文章站 2022-07-14 15:25:50
...

本质

Hadoop Distributed File System Hadoop文件存储系统,相当于磁盘上的磁盘,可以看成磁盘一体。

作用

三个重要作用:存储超大的文件、采用流式的数据访问方式、运行于商业硬件上

架构

架构分为1.X和 2.X架构 2.X解决了1.X的问题

1.X架构
HDFS Hadoop分布式文件系统
2.X高可用架构
HDFS Hadoop分布式文件系统

1.X和2.X对比

HDFS Hadoop分布式文件系统
1、namenode

	存储块儿的元数据、接收客户端的读写请求、获取block快的位置

2、datanode

	存储block、存储block副本、处理客户端的读写块儿的请求

3、secondaryNamenode(1.x有的,2.x去掉)

主要进行进行镜像文件和操作日志的合并工作
fsimage 元数据镜像文件
edits log 数据的操作日志

4、Client:就是客户端。

文件切分。文件上传 HDFS 的时候,Client 将文件切分成 一个一个的Block,然后进行存储。
与 NameNode 交互,获取文件的位置信息。
与 DataNode 交互,读取或者写入数据。
Client 提供一些命令来管理 HDFS,比如启动或者关闭HDFS。
Client 可以通过一些命令来访问 HDFS。

5、jobTracker

	负责管理集群中的资源
	负责分配要执行的任务

6、taskTracker

	实际工作的任务节点

7、JournalNode(2.x 引入)

存储对应的元数据信息
执行过程
	当处于active的NN的命名空间发生数据变化的时候,会通知大部分的JN,超过半数生效
	另一个处于standby的NN会监控JN的数据变化,当有变化的时候,同步数据到本台命名空间(为了保证数据同步,实时切换)

8、zkfc

监控NN的健康状态,实时切换

1.X和2.X对比 总结

1.X存在问题:
1、nn单点故障
2、nn压力过大,内存受限,不可扩展
3、jobtracter 压力过大,无法扩展
4、无法兼容除了MR之外 的其他任意框架(比如:storm,spark)
2.X解决了1.X问题
解决问题1:
hdfs HA :通过一个主备切换的nn 完成

	集群中包含两台nn,一台处于active,另一台处于standby
	切换策略
		手动切换
		自动切换

解决问题2,3的改进:hdfs Federation

	将存储的元数据信息分布在多台NN
	所有的NN共享DN的数据

解决问题4的改进:引入了yarn 资源管理框架

	实现了高可用的ResourceManager
	spark,storm可以运行在yarn的资源管理框架上

流程

HDFS Hadoop分布式文件系统

写文件的流程:

	1、客户端client调用create函数创建文件;
	2、DistributedFileSystem用RPC调用元数据节点,在文件系统的命名空间中创建一个新的文件;
	3、元数据节点首先确定文件是否存在,并且客户端是否有创建文件的权限,然后创建新文件;
	4、DistributedFileSystem返回FSDataOutputStream给客户端用于写数据;
	5、客户端开始写入数据,FSDataOutputStream将数据分成块,写入data queue;			
	6、Data queue由DataStreamer读取,并通知元数据节点分配数据节点,用来存储数据块
		(每块默认复制3块),分配的数据节点放在一个pipeline里;
	7、DataStreamer将数据块写入pipeline中的第一个数据节点,第一个数据节点将数据块发送给
		第二个数据节点,第二个数据节点将数据发送给第三个数据节点;
	8、FSDataOutputStream为发出去的数据块保存了ack queue,等待pipeline中的数据节点告知
		数据已经写入成功;
	9、如果数据节点在写入的过程中失败,则进行以下几个操作:
		一是关闭pipeline并将ack queue中的数据块放入data queue的开始;
		二是当前数据块在已写入的数据节点中被元数据节点赋予新的标示,错误节点重启后察觉其数据块过时而被删除;
		三是失败的数据节点从pipeline中移除,另外的数据块则写入pipeline中的另外两个数据节点;
		四是元数据节点被通知此数据块的复制块数不足,从而再创建第三份备份;
	10、当客户端结束写入数据,则调用close函数将所有的数据块写入pipeline中的数据节点,
		并等待ack queue返回成功,最后通知元数据节点写入完毕

HDFS Hadoop分布式文件系统

读文件的流程:

	1、客户端client使用open函数打开文件;
	2、DistributedFileSystem用RPC调用元数据节点,得到文件的数据块信息;
	3、对于每一个数据块,元数据节点返回保存数据块的数据节点的地址;
	4、DistributedFileSystem返回FSDataInputStream给客户端,用来读取数据;
	5、客户端调用FSDataInputStream的read函数开始读取数据;
	6、FSDataInputStream连接保存此文件第一个数据块的最近的数据节点;
	7、Data从数据节点读到客户端;
	8、当此数据块读取完毕时,FSDataInputStream关闭和此数据节点的连接,
		然后连接此文件下一个数据块的最近的数据节点;
	9、当客户端读取数据完毕时,调用FSDataInputStream的close函数;
	10、在读取数据的过程中,如果客户端在与数据节点通信出现错误,则尝试
		连接包含此数据块的下一个数据节点。失败的数据节点将被记录,以后不再连接。

优缺点

优点

1、高容错性、可构建在廉价的机器上
2、适合批处理
3、适合大数据处理
4、流式文件访问

缺点

1、不支持低延迟访问
2、不适合小文件存储
3、不支持并发写入
4、不支持修改

常用

hadoop fs 等同于 hdfs fs,作为命令头
1.启动hdfs集群 start-dfs.sh

2.启动yarn集群 start-yarn.sh

3.查看hdfs系统的根目录 hadoop fs -ls /

4.创建文件夹 hadoop fs -mkdir /a

5.级联创建文件夹 hadoop fs -mkdir -p /aa/bb/cc

6.查看根目录下的所有文件包括子文件夹里面的文件 hadoop fs -ls -R /aa

7.上传文件

hadoop fs -put a.txt /aa	
hadoop fs -copyFromLocal words.txt /aa/bb

8.下载文件

hadoop fs -get /aa/word.txt /aa
hadoop fs -copyToLocal /aa/word.txt /aa

9.合并下载 hadoop fs -getmerge /aa/word.txt /aa/bb/word.txt /aa

10.复制 hadoop fs -cp /aa/word.txt /a

11.移动 hadoop fs -mv /a/word.txt /a/b

12.删除文件 hadoop fs -rm /a/bword.txt

13.删除空目录 hadoop fs -rmdir /a/b

14.强制删除 hadoop fs -rm -r /aa/bb

15.从本地剪切到hdfs上 hadoop fs -moveFromLocal /a/word.txt /a/b

16.追加文件 hadoop fs -appendToFile /hello.txt /aa/bb/word.txt

17.查看文件内容 hadoop fs -cat /a/b/word.txt

常见问题

HDFS 副本存放策略

HDFS Hadoop分布式文件系统

异议

有差错的地方,还望大家评论指出,并详细论证,相互学习,共同进步哈!

上一篇: token踩坑日常

下一篇: LeetCode算法