HBase数据是最终存放到hdfs上的,而我们知道hdfs是不支持随机写,只能提供append的形式追加,然后一旦写入后是不可变的。那么HBase是如何提供所谓的低延时写入和读取?下面我们就分析下其中的奥秘。
写路径就是指HBase怎样完成put和delete操作的。该路径开始于客户端,然后到regionserver,最后被写入到一个叫做HFile的数据文件中。其中还包括了HBase为了防止数据丢失写路径的优化设计。因此,理解写路径对于HBase的可能数据出现丢失情况会有一个更加深入的理解。
每个HBase表被托管到一系列服务器上面,主要分为以下三类:
1、一个active状态的master server;
2、一个或多个backup severs;
3、多个regionserver。
regionserver用于托管HBase的表。因为HBase表可能特别大,会被分为多个部分,叫做多个region。每个regionserver上具有一个或多个regions。由于regionsever才处理regions,所以如果master server崩溃了却不会引起数据丢失或不可用。
由于rowkey是排序的,很容易确认哪个regionserver管理哪个key。每个更改请求都会指定一个具体的row。每个rowkey属于一个特定regionserver上的region。客户端会首先定位到哪个regionserver, 然后本地缓存这部分location数据,失效的情况会更新。
当一个请求被特定的regionserver收到后,改变不会马上被写入HFile的,因为数据写入HFile是必须是排序好的rowkey,这样当读数据的适合可以允许随机的row高效率搜索。数据不能被随机插入HFile。如果每个更新都写入一个新的文件,许多小文件将会被创建。这种方案是非常不