1.HBase内部机制是什么?
Hbase是一个能适应联机业务的数据库系统
物理存储:hbase的持久化数据是将数据存储在HDFS上。
存储管理:一个表是划分为很多region的,这些region分布式地存放在很多regionserver上Region内部还可以
划分为store,store内部有memstore和storefile。
版本管理:hbase中的数据更新本质上是不断追加新的版本,通过compact操作来做版本间的文件合并Region
的split。
集群管理:ZooKeeper + HMaster + HRegionServer。
2.HTable API有没有线程安全问题,在程序是单例还是多例?
在单线程环境下使用hbase的htable是没有问题,但是突然高并发多线程情况下就可能出现问题。
以下为Htable的API说明:
This class is not thread safe for updates; the underlying write buffer can be corrupted if multiple threads contend over a single HTable instance. 当有多个线程竞争时可能把当前正在写的线程corrupted,那么原因是什么呢?
根据Htable的源码:
public HTable(final byte [] tableName)throws IOException{ this(HBaseConfiguration.create(), tableName);}public static Configuration create() { Configuration conf = new Configuration(); return addHbaseResources(conf);}