大数据技术之HBase原理与实战归纳分享-中( 二 )

  • StoreFile
    • memStore内存中的数据写到文件后就是StoreFile(即memstore的每次flush操作都会生成一个新的StoreFile),StoreFile底层是以HFile的格式保存 。
  • HFile
    • HFile是HBase中KeyValue数据的存储格式,是hadoop的二进制格式文件 。一个StoreFile对应着一个HFile 。而HFile是存储在HDFS之上的 。HFile文件格式是基于Google Bigtable中的SSTable,如下图所示:

  • 大数据技术之HBase原理与实战归纳分享-中

    文章插图
    首先HFile文件是不定长的,长度固定的只有其中的两块:Trailer和FileInfo 。Trailer中又指针指向其他数据块的起始点,FileInfo记录了文件的一些meta信息 。
    写流程
    大数据技术之HBase原理与实战归纳分享-中

    文章插图
    • 首先访问 zookeeper,获取 hbase:meta 表位于哪个 Region Server;
    • 访问对应的 Region Server,获取 hbase:meta 表,将其缓存到连接中,作为连接属性 MetaCache,由于 Meta 表格具有一定的数据量,导致了创建连接比较慢; 之后使用创建的连接获取 Table,这是一个轻量级的连接,只有在第一次创建的时候会检查表格是否存在访问 RegionServer,之后在获取 Table 时不会访问 RegionServer;
    • 调用Table的put方法写入数据,此时还需要解析RowKey,对照缓存的MetaCache,查看具体写入的位置有哪个 RegionServer;
    • 将数据顺序写入(追加)到 WAL,此处写入是直接落盘的,并设置专门的线程控制 WAL 预写日志的滚动(类似 Flume);
    • 根据写入命令的 RowKey 和 ColumnFamily 查看具体写入到哪个 MemStory,并且在 MemStory 中排序;
    • 向客户端发送 ack;
    • 等达到 MemStore 的刷写时机后,将数据刷写到对应的 story 中 。
    写缓存刷写MemStore Flush也即是写缓存刷写,MemStore 刷写由多个线程控制,条件互相独立:主要的刷写规则是控制刷写文件的大小,在每一个刷写线程中都会进行监控