锁屏面试题百日百刷,每个工作日保持更新面试题。请看到最初就能获取你想要的, 接下来的是今日的面试题:
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);}
从下面咱们能够看到每一个HTable的实例化过程都要创立一个新的conf,咱们甚至能够认为一个conf对应的是一个HTable的connection,因而如果客户端对于同一个表,每次新new 一个configuration对象的话,那么意味着这两个HTable尽管操作的是同一个table,然而建设的是两条链接connection,它们的socket不是共用的,在多线程的状况下,常常会有new Htable的状况产生,而每一次的new都可能是一个新的connection,而咱们晓得zk上的链接是有限度的如果链接达到肯定阈值的话,那么新建设的链接很有可能挤掉原先的connection,而导致线程不平安。
因而hbase官网文档倡议咱们:HTable不是线程平安的。倡议应用同一个HBaseConfiguration实例来创立HTable实例,这样能够共享ZooKeeper和socket实例。例如,最好这样做:
HBaseConfiguration conf = HBaseConfiguration.create();HTable table1 = new HTable(conf, "myTable");HTable table2 = new HTable(conf, "myTable");
而不是这样:
HBaseConfiguration conf1 = HBaseConfiguration.create();HTable table1 = new HTable(conf1, "myTable");HBaseConfiguration conf2 = HBaseConfiguration.create();HTable table2 = new HTable(conf2, "myTable");
当然最不便的办法就是应用HTablepool了,维持一个线程平安的map外面寄存的是tablename和其援用的映射,能够认为是一个简略的计数器,当须要new 一个HTable实例时间接从该pool中取,用完放回。
3.HBase有没有并发问题?**
针对HBase在高并发状况下的性能,咱们进行如下测试:
测试版本:hbase 0.94.1、 hadoop 1.0.2、 jdk-6u32-linux-x64.bin、snappy-1.0.5.tar.gz
测试hbase搭建:14台存储机器+2台master、DataNode和regionserver放在一起。
测试一:高并发读(4w+/s) + 大量写(容许分拆、负载平衡)
症状:1-2天后,hbase挂掉(零碎性能极差,不到失常的10%)。其实并非全副挂掉,而是某些regionserver挂了,并在几个小时内引发其余regionserver挂掉。零碎无奈复原:独自启regionserver无奈恢复正常。重启后失常。
测试二:高并发读(4w+/s)
症状:1-2天后,hbase挂掉(零碎性能极差,不到失常的10%)。后发现是因为zookeeper.session.timeout设置不正确导致(参见regionserver局部:http://hbase.apache.org/book.html#trouble)。重启后失常。
测试三:高并发读(4w+/s)
症状:1-2天后,hbase挂掉(零碎性能极差,不到失常的10%)。从log未看出问题,但regionserver宕机,且datanode也宕机。重启后失常。
测试四:高并发读(4w+/s)+禁止分拆、禁止majorcompaction、禁止负载平衡(balance_switch命令)症状:1-2天后,hbase挂掉(零碎性能极差,不到失常的10%)。从log未看出问题,但regionserver宕机,且datanode也宕机。重启后失常。
测试期间,还发现过:无奈获取".MATE."表的内容(想晓得regionserver的散布状况)、hbase无奈正确进行、hbase无奈正确启动(日志复原失败,文件谬误,最终手动删除日志重启)。
全部内容在git上,理解更多请点我头像或到我的主页去取得,谢谢**