- HDFS架构:
- 1Master(NameNode、NN),带N个Slaves(DataNode,DN)
- 心跳机制:
- DN定期发送心跳包,给NN,报告自身及block信息。
- NN汇总Blockreport,维护Metadata(元数据信息)
- 包括filename、number of Relicas、block ids等等
- 文件分块(block)
- 副本机制
- 基于block的复制
- 默认副本系数(Replication Factor)是3
- 类似Elasticsearch的分片、复制
- 副本分布策略
- 第一个block副本放在和client所在的node里(如果client不在集群范围内,则这第一个node是随机选取的)。
- 第二个副本放置在与第一个节点不同的机架中的node中(随机选择)。
- 第三个副本放置在与第二个副本所在节点同一机架的另一个节点上
- 注意:这里指定一个network interface 地址(hostname),如果指定本地回环地址(localhost、127.0.0.1)将无法远程访问。
- 配置Hadoop临时目录(防止Linux重启,数据丢失)
- hdfs-site.xml
- 格式化HDFS
- 第一次启动HDFS之前执行。
- bin/hdfs namenode -format
- 每个daemon服务进程,都会有logs日志的概念
- HDFS写数据流程
- client 通过blocksize和Replication Factor ,将文件切分成block,
- Client,请求NameNode,
- Client只向first DataNode发送block数据
- sorted DataNodes 内部,通过Replication Pipeline,完成副本的复制
- 一旦当前block传输、复制完毕,sorted DataNodes发送Done给NameNode
- HDFS读文件流程:
- Client向NameNode请求 file相关的Metadata
- 获取两部分:all blocks(primary) for this file 和 list of sorted DataNodes(副本) for each block
- Client 从first sorted DataNode 读取数据
- HDFS读写数据,本质上,都需要两次交互:
- 第一次,Client与NameNode交互,获取相关信息(sorted NameNode地址等)
- 第二次,Client与sorted NameNodes交互,读写数据
- HDFS不适合小文件存储:
- HDFS文件存储,会以Metadata信息占用NameNode的资源。大量小文件,对NN造成压力。
- HDFS访问延迟比较高。
相关文章: