hdfs与hbase关系原理简述

hdfs本质是分布式文件系统,可部署于大量价格低廉的服务器,提供了可扩展的、高容错性的文件读写服务。

hbase本身不负责文件层面的高可用和扩展性,通过把文件存储在hdfs实现大容量文件存储和备份。

与其他的分布式文件系统相比,HDFS擅长的场景是大文件(一般认为字节数超过数十MB的文件为大文件)的顺序读、随机读和顺序写。

一个线上的高可用HDFS集群主要由4个重要的服务组成:NameNode、DataNode、JournalNode、ZkFailoverController。

数据块(Block,大小默认为128MB),读取的时候只需要依次读取组成这个文件的Block即可完整读取整个文件。

线上需要部署2个NameNode :一个节点是Active状态并对外提供服务;另一个节点是StandBy状态,作为Active的备份,备份状态下不提供对外服务,也就是说HDFS客户端无法通过请求StandBy状态的NameNode来实现修改文件元数据的目的。如果ZkFailoverController服务检测到Active状态的节点发生异常,会自动把StandBy状态的NameNode服务切换成Active的NameNode。

NameNode存储并管理HDFS的文件元数据,这些元数据主要包括文件属性(文件大小、文件拥有者、组以及各个用户的文件访问权限等)以及文件的多个数据块分布在哪些存储节点上。文件元数据是在不断更新的

NameNode本质上是一个独立的维护所有文件元数据的高可用KV数据库系统(键值对存储数据的数据库)。

NameNode采用写EditLog(日志)和FsImage(镜像)的方式来保证元数据的高效持久化。

NameNode会把所有文件的元数据全部维护在内存中。HDFS中存放大量的小文件,则造成分配大量的Block,这样可能耗尽NameNode所有内存而导致OOM

组成文件的所有Block都是存放在DataNode节点上的。一个逻辑上的Block会存放在N个不同的DataNode上

存在一个问题——在StandBy状态下的NameNode切换成Active状态后,如何才能保证新Active的NameNode和切换前Active状态的NameNode拥有完全一致的数据?
HDFS单独实现了一个叫做JournalNode的服务。线上集群一般部署奇数个JournalNode(一般是3个,或者5个),在这些JournalNode内部,通过Paxos协议来保证数据一致性。因此可以认为,JournalNode其实就是用来维护EditLog一致性的Paxos组。

ZKFailoverController主要用来实现NameNode的自动切换。

HDFS的视角看,HBase就是它的客户端。

HBase本身并不存储文件,它只规定文件格式以及文件内容,实际文件存储由HDFS实现。

HBase不提供机制保证存储数据的高可靠,数据的高可靠性由HDFS的多副本机制保证。

HBase-HDFS体系是典型的计算存储分离架构。

详细请参考《HBase原理与实践》
————————————————
版权声明:本文为CSDN博主「侬本多情。」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44692890/article/details/120074611

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值