HBase写入数据的过程

来源:互联网 发布:全职高手周边衬衫淘宝 编辑:程序博客网 时间:2024/05/14 20:36
写入数据的详细过程?
见此地址 http://my.oschina.net/u/1464779/blog/265137

怎么确认写入操作成功呢?
只要在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
原创粉丝点击