1.HDFS架构
Hadoop分布式文件系统(HDFS)是一个分布式文件系统,设计用于在商品硬件上运行。它与现有的分布式文件系统有许多相似之处。但是,与其他分布式文件系统的区别是显著的。HDFS具有高度的容错性,设计用于部署在低成本硬件上。HDFS提供对应用程序数据的高吞吐量访问,适用于具有大数据集的应用程序。HDFS放宽了一些POSIX要求,以实现对文件系统数据的流式访问。HDFS最初是作为ApacheNutch Web搜索引擎项目的基础设施构建的。HDFS是ApacheHadoop核心项目的一部分。
HDFS具有master/slave架构。HDFS集群由单个namenode组成,namenode管理文件系统名称空间并控制客户机对文件的访问。此外,还有许多datanode,通常是集群中每个节点一个,它们管理连接到运行它们的节点的存储。HDFS公开了一个文件系统名称空间,并允许用户数据存储在文件中。在内部,文件被分割成一个或多个块,这些块存储在一组datanode中。namenode执行文件系统命名空间操作,如打开、关闭和重命名文件和目录。它还确定块到数据节点的映射。datanode负责提供来自文件系统客户机的读写请求。datanode还根据来自名称节点的指令执行块创建、删除和复制。
2.namenode(NN)
存储: 文件系统的命名空间
维护文件系统的命名空间,主要维护以下内容:
a.文件名称
b.文件目录结构
c.文件属性(权限 创建时间 副本数)
d.文件对应的哪些块(副本块)–》块对应在哪些DN节点上
不会持久化存储这个map映射关系,一般是集群启动和运行时,dn定期的发送blockreport给nn,那么nn就在内存中动态维护这种映射关系
3.datanode(DN)
存储: 数据块和数据块校验和
与NN通信:
a.每隔3秒发送一个心跳包 参数:dfs.heartbeat.interval
b.每隔n秒发送一次blockreport 块报告
dfs.blockreport.intervalMsec 21600000ms=6小时
主要作用: 读写文件的数据块
4.secondarynamenode(SNN)
作用: 定期合并NN节点的fsimage+editlog为新的fsimage,推送给NN,简称检查点 checkpoint
SNN有两种模式,secondary|standby
fs.checkpoint.period默认1小时;
dfs.namenode.checkpoint.txns,默认设置为1百万,也就是Edits中的事务条数达到1百万就会触发一次合并,即使未达到检查点期间。
1.首先NN先生成新的editlog,类似这种edits_inprogress_0000000000000000764
2.将需要合并的editlogs文件跟fsimage传输到SNN节点
3.在SNN将editlogs文件跟fsimage合并为新的fsimage
4.将SNN新的fsimage传输到NN
5.滚动新的editlog写满,就滚动到下一个editlog
查找哪些是需要传输到SNN合并的文件,示例:
edits_0000000000000000760-0000000000000000761
edits_0000000000000000762-0000000000000000763
edits_inprogress_0000000000000000764
fsimage_0000000000000000761
fsimage_0000000000000000761.md5
fsimage_0000000000000000763
fsimage_0000000000000000763.md5
首先找到包含inprogress字样的文件edits_inprogress_0000000000000000764,查看最新的fsimage文件fsimage_0000000000000000763,上一个fsimage_0000000000000000761是我们所需要传输到SNN的image文件,发现最新的fsimage序号是763,需要将762-763的editlog传输到SNN进行合并。
5.副本放置策略
第一个副本:
提交节点为DN,自己写一份;否则为集群外提交,则随机挑选一个不太慢、cpu不太忙的节点上
第二个副本:
放置在于第一个副本的不同机架的节点上。
第三个副本:
与第二个副本相同机架的不同节点上。