1HDFS概述
概述:
HDFS它是一个文件系统,用于存储文件,通过目录树来定位文件;其次,它是分布式的有很多服务器联合起来实现其功能,集群中的服务器有各自的角色。
使用场景:适合一次写入,多次读出的场景切不支持文件的修改。适合用来做数据分析,并不适合用来做网盘应用
优点:
1容错性高,数据自动保存多个副本,它通过副本的形式,提高容错性。某一个副本丢失以后,它可以自动恢复。
2适合做大数据分析
1数据规模:能够处理数据规模达到GB TB 甚至PB的数据
2文件规模:能够处理百万规模以上的文件数量,数量相当之大
3可构架再廉价机器上,通过多副本机制,提高可靠性。
缺点:
1不适合低延迟时数据的访问,比如毫秒级的数据,是做不到的。
2无法高效的对大量小文件进行存储
1存储大量得小文件的话,它会占用NameNode大量的内存来存储文件目录和块信息,这样是不可取的,因为NameNode的内存总会是有限的
2小文件存储的寻址时间会超过读取时间,它违反了HDFS的设计目标
3不支持并发写入,文件随机修改。
1一个文件只能有一个些,不允许多个线程同时写;
2仅支持数据append,不支持文件的随机修改。
2HDFS组成架构
1 NameNode(nn):就是Master,它是一个主管,管理者
1:管理HDFS的名称空间;
2配置副本策略;
3管理数据块映射信息
4处理客户断读写请求。
2 DateNode:就是Slave。NameNode下达命令,DataNode执行实际的操作
1存储实际的数据块
2执行数据的读写操作
3 Client:就是客户端
1文件切分,文件上HDFS的时候,Client将文件切分成一个一个的Block块然后进行上传
2与NameNode交互,获取文件的位置信息;
3与DateNode交互,读取或写入数据;
4Client提供一些命令来管理HDFS,比如NameNode格式化;
5Client提供一些命令来访问HDFS,比如对HDFS增删查改
4 Secondary NameNode: 并非NameNode的热备份。当NameNode挂掉的时候,它并不会能马上替换掉NameNode并提供服务。
1辅助NameNode 分担其工作量。比如定期合并Fsimage和Edits,并推送给NameNode;
2在紧急情况下,可辅助恢复NameNode。
HDFS的Shell操作
上传 :
-moveFromLocal:从本地剪切粘到HDFS
-copyFromLocal : 从本地文件系统拷贝文件到HDFS路径去
-appendToFile: 追加一个文件到已存在的文件末尾
-put:等同于copyFromLocal
下载:
-copyToLocal:从HDFS拷贝到本地
-get:等同于CopyToLocal,就是HDFS下载文件到本地
-getmerge:合并下载多个文件
直接操作:
-ls:显示目录信息
-mkdir:在HDFS上创建目录
-cat:显示文件内容
-chgrp,-chmod ,-chown 和Liunx文件系统用法一样
-cp:从HDFS的一个路径拷贝到HDFS的另一个路径
-mv:在HDFS目录中移动文件
-tail:显示一个文件的末尾1kb的数据
-rm: 删除文件或文件夹
-rmdir:删除空目录
-du:统计文件夹的大小信息
-setrep:设置HFDS中文件的副本数量
3HDFS的读写流程
1 客户端通关DistributedFileSystem向NameNode发起请求上传文件,NameNode检查是否具有权限和该文件是否已经存在。
2 NameNode检查完毕会向客户端返回响应可以上传文件
3客户端请求上传第一个Block存储到那几个节点,请求返回DataNode,
4 Name返回节点,采用这几个节点存储数据
5 客户端FSDataOutputStream会向这几个Datanode1请求上传数据,Datanode1收到请求会继续调用Datanode2,然后Datanode2调用Datanode3,将这个通信管道建立完成。
6建立成功向客户端返回应答信息
7 FSDataOutputStream开始往DataNode1上传第一个Block(先从磁盘读取数据放到一个本地内存缓存),以Packet为单位,Datanode1收到一个Packet就会传给Datanode2,Datanode2传给Datanode3;Datanode1每传一个packet会放入一个应答队列等待应答。
8 当一个Block传输完成之后,客户端再次请求NameNode上传第二个Block的服务器。
Hadoop3.1.3副本节点选择
HDFS读数据流程
1客户端通过DistributedFileSystem向NameNode请求下载文件,NameNode通过查元数据,找到文件块所在的DataNode地址
2 挑选一台最近的服务器,请求读取数据。
3 DataNode开始传输数据给客户端(从磁盘里读取数据输入流,以Packet为单位来做校验)。
4 客户端以Packet为单位接收,先在本地缓存,然后写入目标文件。
4 NameNode和SecondaryNameNode
NameNode
1 第一次启动NameNode,先加载编辑日志和镜像文件到内存中,如果是第一次启动NameNode格式化后,创建Fsimage和Edits文件。
2 客户端进行发起操作请求。
3 NameNode记录操作日志,更新滚动日志。
4 NameNode在内存中对元数据进行操作
Secondary NameNode
1 Sencodedary NameNode询问NameNode是否需要CheckPoint。直接带回NameNode是否检查结果。
2 Sencodedary NameNode请求执行CheckPoint
3 NameNode滚动正在写的Edits日志
4 将滚动前的编辑日志和镜像文件拷贝到Secondary NameNode。
5 Secondary NameNode 加载编辑日志和镜像文件到内存,并合并
6 生成新的镜像文件fsimage.chkpoint。并拷贝到NameNode,NameNode将fsimage.chkpoint重新命名fsimage。
CheckPoint触发的两种条件,1 每一小时执行一次,2 一分钟检查一次操作次数,当操作次数达到1百万时执行
5 DataNode工作机制
(1)一个数据块在DataNode上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳。
(2)DataNode启动后向NameNode注册,通过后,周期性(1小时)的向NameNode上报所有的块信息。
(3)心跳是每3秒一次,心跳返回结果带有NameNode给该DataNode的命令如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟没有收到某个DataNode的心跳,则认为该节点不可用。
(4)集群运行中可以安全加入和退出一些机器。