HBase写入数据的过程

写入数据的详细过程?

怎么确认写入操作成功呢?
只要在WAL(write ahead log要提前写的文件)和MemCache中同时写入成功了,那么hbase的put(写)操作成功了。
WAL:HBase为了保证写入数据的可靠性,提出了WAL的概念;打个比方:迅雷在下载的时候,会把大文件分解成一个一个的小碎片数据,然后把这些小碎片文件下载完后再组装起来,那么这个大文件就下载完了。
WAL就是这样的原理,先把文件的一块一块的下载下来,就算集群挂了,只要这些小文件都在,就不会有数据丢失, 因为查询操作是从列簇中查找数据。

问:用户如何做到写入之后,立刻查询?
答:数据同时写入到WAL和MemCache中,用户查询的时候从MemCache中获取。
问:那么同时写入会不会增加IO操作?
答:为了保证数据的安全性和查询的快速性,增加的IO开销是必须的。
问:往内存中写,是不是非常容易造成内存溢出(就是内存满了)?
答:内存满了就写到磁盘文件(HFile)中,每次满了就写入一次到HFile中,HFile是HBase写入到hdfs的基本数据单位,
       每次写到HFile中的文件大小是64k,一个HFile装一个Block,Block里面存放着数据和索引,Block是数据结构,而不
       仅仅是数据文件, 这样就会有大量的HFile写入到hdfs中,那么大量的HFile就会造成以后读写hdfs费时,
       这就需要对HFile进行合并,  文件越多,读写的速度越慢。

对很多小的HFile合并成大的HFile,HFile是不断产生的,合并操作也是在不断的进行着,称作小合并minor compaction。
文件越多,读写的速度越慢,把大量HFile文件合并成一个大的HFile,称作大合并major compaction。

问:经过一次大合并之后,1个列簇与HFile的对应关系是什么?
答:1:1。也就是说一个列簇就形成了一个文件。


这时可以把每个HFile的 大小调大,那么写入到hdfs中的文件就少了,但是

从节点有大量的读写操作,读操作意味着客户端要对hdfs操作, 查询操作意味着从节点要负担很大的查询任务
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值