HDFS的实现思路:
1.HDFS通过分布式集群来存储文件,为客户端提供便捷的访问方式
2.文件存储到HDFS集群去的时候,被切分为block
3.HDFS存放在若干datanode节点 上
4.HDFS文件系统与真实的block之间有映射关系,由于NameNode管理
5.每个block在集群中会存储多个副本,好处:提高数据的可靠性,吞吐量
HDFS架构:
NameNode
DataNode
SecondaryNameNode
问题:
1)若将元数据存在文件里面,那么就属于文件的随机访问,要查询一条元数据,得定位到哪一行,速度很慢,
2)若放到内存里面,万一宕机了怎么办?断电了呢?那么元数据就丢失了。
3)定期flush到磁盘文件,可是内存很大,很容易丢失
解决:
1.
2.NN + SN
NN+SN: (非HA机制)
可以保证数据的可靠性,却不能保证可用性,即当NN宕机的时候,那么集群就不可用了,
那么Client就无法访问了,而且很多基于此集群的应用也就停止工作了。
元数据可恢复但是集群没法对外服务,这个怎么解决?
1)找两个集群吗?那也会存在问题?
-
速度
-
数据同步
-
成本高
2)两个NN吗?
一个主一个备,可是它们之间怎么同步数据呢?当两个NN同时存在的时候,可能两个都 往里面写数据,那么如何保证数据的一致性呢?