此文章用于记录在学习Hadoop过程中,对于理论性知识的总结
文章目录
一、Hadoop的组成部分
HDFS
管理者:NameNode
NameNode的作用:
1、维护管理文件系统的名字空间。
2、负责确定指定的文件块到具体的DataNode节点的映射关系。
3、维护管理DataNode上报的心跳信息。
辅助管理者:SecondaryNameNode
SecondaryNameNode的作用:
负责辅助NameNode管理工作。
工作者:DataNode
DataNode的作用
1、执行数据的读写。
2、周期性向NameNode做汇报(包括数据的信息、校验和)。
若DataNode10分钟没有向NameNode做汇报,表示已宕机。
3、执行流水线式复制。
MapReduce
Yarn
管理者:ResourceManager
工作者:NodeManager
二、HDFS的副本存放机制
第一副本来源于客户端。
第二副本按照一定的规则存放在与第一副本相同机架上的不同节点。
第三副本按照一定的规则存放在与第一第二副本逻辑距离最近的不同机架上的节点。
存放的规则根据CPU、内存、IO使用率和磁盘剩余容量决定。
三、如何验证Hadoop集群可用
- NameNode所在节点的IP + 50070端口,查看HDFS的web界面是否可用。
- 在HDFS系统中创建一个文件或文件夹,若能创建成功则表示集群可用。
jps命令用于验证集群服务的启动情况,严格意义来讲该命令不是验证Hadoop集群是否可用的一种方式。
四、HDFS数据读取流程
1、客户端通过调用FileSystem对象的open()来读取希望打开的文件。
2、 Client向NameNode发起RPC请求,来确定请求文件block所在的位置;
3、 NameNode会视情况返回文件的部分或者全部block列表,对于每个block,NameNode 都会返回含有该 block 副本的 DataNode 地址; 这些返回的 DN 地址,会按照集群拓扑结构得出 DataNode 与客户端的距离,然后进行排序,排序两个规则:网络拓扑结构中距离 Client 近的排靠前;心跳机制中超时汇报的 DN 状态为 STALE,这样的排 靠后。
4、Client 选取排序靠前的 DataNode 来读取 block,如果客户端本身就是DataNode,那么将从本地直接获取数据(短 路读取特性)。
5、 底层上本质是建立 Socket Stream(FSDataInputStream),重复的调用父类 DataInputStream 的 read 方法, 直到这个块上的数据读取完毕。
6、并行读取,若失败重新读取。
7、 当读完列表的 block 后,若文件读取还没有结束,客户端会继续向NameNode 获取下一批的 block 列表。并返回后续block列表。
8、 最终关闭读取流,并将读取来所有的 block 合并成一个完整的最终文件。
五、HDFS数据写入流程
1、 client发起文件上传请求,通过RPC与NameNode建立通讯,NameNode检查目标文件是否已存在,父目录是否 存在,返回是否可以上传;
2、 client请求第一个block该传输到哪些DataNode服务器上;
3、 NameNode根据配置文件中指定的备份数量及机架感知原理进行文件分配,返回可用的DataNode的地址如: A,B,C;
4、 client请求3台DataNode中的一台A上传数据(本质上是一个RPC调用,建立pipeline),A收到请求会继续调用 B,然后B调用C,将整个pipeline建立完成,后逐级返回client;
5、 client开始往A上传第一个block(先从磁盘读取数据放到一个本地内存缓存),以packet为单位(默认64K),A 收到一个packet就会传给B,B传给C;A每传一个packet会放入一个应答队列等待应答。
6、 数据被分割成一个个packet数据包在pipeline上依次传输,在pipeline反方向上,逐个发送ack(命令正确应 答),最终由pipeline中第一个DataNode节点A将pipelineack发送给client;。
7、关闭写入流。
8、 当一个block传输完成之后,client再次请求NameNode上传第二个block到服务器。
六、RPC是什么
RPC(Remote Procedure Call)是远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。是集群中多个组件、多个模块进行数据通信的一种方式。
七、HDFS数据完整性
数据在写入之后进行校验和的计算,DataNode周期性进行校验和计算,将计算结果与第一次的结果进行对比。若相同表示无数据丢失,若不相同表示数据有丢失,丢失进行数据恢复。
数据读取之前对数据进行校验,与第一次的结果进行对比。若相同表示数据没有丢失,可以读取。若不相同表示数据 有所丢失。到其他副本读取。
八、HDFS特性
1、海量数据存储: HDFS可横向扩展,其存储的文件可以支持PB级别数据。
2、高容错性:节点丢失,系统依然可用,数据保存多个副本,副本丢失后自动恢复。可构建在廉价(与小型机大型机比)的机器上,实现线性扩展(随着节点数量的增加,集群的存储能力,计算能力随之增加)。
3、大文件存储:DFS采用数据块的方式存储数据,将一个大文件切分成多个小文件,分布存储。
九、HDFS的缺点
1、 不能做到低延迟数据访问: HDFS 针对一次性读取大量数据继续了优化,牺牲了延迟性。
2、不适合大量的小文件存储 :
A:由于NameNode将文件系统的元数据存储在内存中,因此该文件系统所能存储的文件总数受限于NameNode的内存容量。
B:每个文件、目录和数据块的存储信息大约占150字节。
由于以上两个原因,所以导致HDFS不适合大量的小文件存储。
3、文件的修改; 不适合多次写入,一次读取(少量读取)。
4、不支持多用户的并行写。
十、HDFS安全模式
HDFS安全模式是HDFS所处的一种特殊状态,在这种状态下,文件系统只接受读取数据请求,而不接受删除、修改等变更请求。
HDFS什么时候进入安全模式?
在NameNode主节点启动时,HDFS首先进入安全模式
在安全模式下做了什么?
DataNode在启动的时候会向NameNode汇报可用的Block状态
HDFS安全模式相关操作
查看HDFS当前处于什么模式:
hdfs dfsadmin -safemode get
进入HDFS安全模式
hdfs -dfsadmin -safemode enter
退出HDFS安全模式
hdfs dfsadmin -safemode leave
十一、SecondaryNameNode的工作原理
FSImage和Edits
FSImage
FSImage 记录HDFS文件系统的镜像或快照(周期性记录)文件占用空间相对较小。
Edits
Edits 记录客户端进行的所有增、删、改、追加等操作(没有使用SecondaryNameNode之前,不是周期性生成)文件占用空间相对较大。
在不使用SecondaryNameNode的情况下,Edits日志文件占用空间日渐增大,导致集群恢复到上次关机前的状态花费的时间很长,同时,集群长时间处于安全模式,导致集群不可用。
目标:为了加快集群二次启动的速度(其实就是减少Fsimage与Edits的合并时间)
SecondaryNameNode如何辅助NameNode管理FSImage和Edits文件
SecondaryNamenode周期性复制NameNode的FSImage和Edits到本机(SecondaryNameNode本机),将两个文件进行合并,最终生成全新的Fsimage,将最新的Fsimage发送回NameNode。
什么时候进行文件拷贝合并?
默认情况下,每小时进行一次周期性拷贝合并或进行1000000(100W)次集群操作进行一次拷贝合并