概念
元数据
NameNode,主
DataNode,从
HDFS文件系统:单名称节点体系
一个文件分为多个数据块,分存在不同dataNode中(可冗余,默认3份,可设置)
- NameNode 唯一
存储元数据,内存中,block与datanode的映射关系 - DataNode 多节点
存储文件内容,磁盘中
交互
-
client --TCP-- nameNode --数据节点协议/RPC-- dataNode 特性及解决
-
nameNode (NameNode【standby】备份) 单点的备份,,容错性
-
日志机制(SecondaryNameNode): EditLog(操作日志) --更改–> FsImage(元数据存储)
-
多个nameNode:HDFS联邦 (2.0以后)
吞吐量,打破元数据内存限制
操作及读写 :java API http shell命令
如何实现分布式存储?
1.数据分片:将数据分成多个block
2.block存储到不同DataNode上,并且有备份(2个)存储在另外的DataNode上(选择上先在发起申请的DataNode上存一个,,其他两个随机)
eg.
file1 分为3个block,BlockID分别为{1,3,5}
file2 分为4个block,BlockID分别为{2,4,6,9}
NameNode 的存储:(filename, numReplicas,block_ids,…)
file1,r:3,{1,3,5}…
file2,r:4,{2,4,6,9}…
如何保证高容错性,高可用性?
- nameNode出错
FsImage
EditLog
汇成新的元数据的过程交给secondaryNameNode来做:
hadoop 1.0 需要停服一段时间
Hadoop 2.0实现了热备份
-
DataNode出错数据本身出错
nameNode发现DataNode出错,则将此DataNode标识为宕机,,把存在此机器上的数据保存到其他DataNode(有多个副本) -
数据出错
每个数据块有校验码,取时会使用校验码进行数据校验,发现传输时有错误,则会重新备份
读写操作:
configuration 加载两个xml得到基本配置信息
FileSystem 文件操作的通用基类 ,隐藏在里面的是DistributesFileSystem
读数据
写数据