1.Hbase中master进行负载均衡算法?

全局、随机、批量启动。

2.hbase的特点?

1.hbase是一个分布式基于列存储的数据库,基于hadoop的hdfs存储,zookeeper进行管理。
2.hbase适合存储半结构化或者非结构化数据
3.hbase 为null 的记录不会被存储
4.基于表包含rowkey,时间戳,和列族。新写入数据时,时间戳更新,同时可以查询到以前的版本
5.hbase是主从架构。master作为主节点,regionserver作为从节点。

3.hbase中列族设计原则?

1.在建立表的时候至少要指定一个列族,但是列族的数量不要过多,一般不要超过三个,在HBase中,高表比宽表性能好,可以设计多张表来满足需求。
2.同一个列族里存储相似访问模式的所有有数据。
有一对一关系的两张表,在HBase中可以存储在一张表中,放到不同的列族。

4.Hbase 中的cell的结构?

Hbase中通过row和columns确定的为一个存储单元为cell
cell是由{rowkey,column:family+列)+版本version唯一确定的单元。cell是没有类型,全是字节码形式。

5.hbase中的region太小和region太大带来的冲突,以及如何解决?

region过大会发生多次的compact,将数据读一遍并重写一遍到hdfs上。占用io。
region过小会造成多次的split,region会下线,影响服务。调整 max.filesize为256M。

6.hbase建表时的注意事项?

1.考虑rowkey
2.考虑列族的数量:因为flush和compact都是以region为单位,需要注意的是memstore的最小flush单位是region而不是memstore。在建表的时候要减少列族的个数。
3.要少创建表的实例,因为创建实例扫描meta表检查表是否存在。推荐一个表创建一个实例,如果是用户要多个实例,使用Htablepool。

7.hive 与hbase整合后,什么时候创建外部表以及内部表?

7.hive 与hbase整合后,什么时候创建外部表以及内部表?
创建外部表适用于某表的hbase已经存在。但hive中没有相关信息,创建内部表适用于hive和hbase都没有相关表的信息。

8.Hbase中的Htable与HtablePool ?

HTable和HTablePool都是HBase客户端API的一部分,可以使用它们对HBase表进行CRUD操作。下面结合在项目中的应用情况,对二者使用过程中的注意事项做一下概括总结。

Configuration conf = HBaseConfiguration.create();
HTable table = new HTable(conf, "tablename");
//TODO CRUD Operation……

HTable使用时的一些注意事项:

  1. 规避HTable对象的创建开销
    因为客户端创建HTable对象后,需要进行一系列的操作:检查.META.表确认指定名称的HBase表是否存在,表是否有效等等,整个时间开销比较重。
  2. HTable对象不是线程安全的
    HTable对象对于客户端读写数据来说不是线程安全的,因此多线程时,要为每个线程单独创建复用一个HTable对象,不同对象间不要共享HTable对象使用。如果想线程安全就是HtablePool
  3. HTable对象之间共享Configuration
    HTable对象共享Configuration对象,这样的好处在于:
    共享ZooKeeper的连接:每个客户端需要与ZooKeeper建立连接,查询用户的table regions位置,这些信息可以在连接建立后缓存起来共享使用;
    共享公共的资源:客户端需要通过ZooKeeper查找-ROOT-和.META.表,这个需要网络传输开销,客户端缓存这些公共资源后能够减少后续的网络传输开销,加快查找过程速度。
    Configuration conf = HBaseConfiguration.create();
    HTable table1 = new HTable(conf, “table1”);
    HTable table2 = new HTable(conf, “table2”);
    HTablePool
    HTablePool可以解决HTable存在的线程不安全问题,同时通过维护固定数量的HTable对象,能够在程序运行期间复用这些HTable资源对象。
Configuration conf = HBaseConfiguration.create();
HTablePool pool = new HTablePool(conf, 10);
  1. HTablePool可以自动创建HTable对象,而且对客户端来说使用上是完全透明的,可以避免多线程间数据并发修改问题。
  2. HTablePool中的HTable对象之间是公用Configuration连接的,能够可以减少网络开销。
9.Hbase目录结构 ?

log目录:即wal,在此目录下为每一个regionserver创建一个子目录
表目录:有一个tableinfo文件,记录表的元信息,其次为每个一个region创建一个子目录,每一个region目录下为每一列族创建一个子目录。

10.Hbase 的Hfile结构 ?

hbase常见的面试题 hbase填空题_hive


dataBlock:保存表中数据

metaBlock:保存用户自定义的k,v

file info:Hfile原元信息。

data block index 是data block的索引.

meta block index是meta block的索引

trailer:这一段是定长的。保存每一段的偏移量,读取Hfile时,会首先读取trailer。trailer存储了meta index和data index,file info信息。