锁屏面试题百日百刷,每个工作日保持更新面试题。锁屏面试题app、小程序现已上线,官网地址:https://www.demosoftware.cn。已收录了每日更新的面试题的所有内容,还蕴含特色的解锁屏幕温习面试题、每日编程题目邮件推送等性能。让你在面试中后人一步!接下来的是今日的面试题:

1.HBase如何给web前端提供接口来拜访?**

应用JavaAPI来编写WEB利用,应用HBase提供的RESTFul接口。

2.请列举几个HBase优化办法?**

1)缩小调整

缩小调整这个如何了解呢?HBase中有几个内容会动静调整,如region(分区)、HFile,所以通过一些办法来缩小这些会带来I/O开销的调整。

· Region

如果没有预建分区的话,那么随着region中条数的减少,region会进行决裂,这将减少I/O开销,所以解决办法就是依据你的RowKey设计来进行预建分区,缩小region的动静决裂。

· HFile

HFile是数据底层存储文件,在每个memstore进行刷新时会生成一个HFile,当HFile减少到肯定水平时,会将属于一个region的HFile进行合并,这个步骤会带来开销但不可避免,然而合并后HFile大小如果大于设定的值,那么HFile会从新决裂。为了缩小这样的无谓的I/O开销,倡议预计我的项目数据量大小,给HFile设定一个适合的值。

2)缩小启停

数据库事务机制就是为了更好地实现批量写入,较少数据库的开启敞开带来的开销,那么HBase中也存在频繁开启敞开带来的问题。

· 敞开Compaction,在闲时进行手动Compaction。

因为HBase中存在Minor Compaction和Major Compaction,也就是对HFile进行合并,所谓合并就是I/O读写,大量的HFile进行必定会带来I/O开销,甚至是I/O风暴,所以为了防止这种不受管制的意外产生,倡议敞开主动Compaction,在闲时进行compaction。

· 批量数据写入时采纳BulkLoad。

如果通过HBase-Shell或者JavaAPI的put来实现大量数据的写入,那么性能差是必定并且还可能带来一些意想不到的问题,所以当须要写入大量离线数据时倡议应用BulkLoad

3)缩小数据量

尽管咱们是在进行大数据开发,然而如果能够通过某些形式在保证数据准确性同时缩小数据量,何乐而不为呢?

· 开启过滤,进步查问速度

开启BloomFilter,BloomFilter是列族级别的过滤,在生成一个StoreFile同时会生成一个MetaBlock,用于查问时过滤数据

· 应用压缩:个别举荐应用Snappy和LZO压缩

4)正当设计

在一张HBase表格中RowKey和ColumnFamily的设计是十分重要,好的设计可能进步性能和保证数据的准确性

· RowKey设计:应该具备以下几个属性

散列性:散列性可能保障雷同类似的rowkey聚合,相异的rowkey扩散,有利于查问。

简短性:rowkey作为key的一部分存储在HFile中,如果为了可读性将rowKey设计得过长,那么将会减少存储压力。

唯一性:rowKey必须具备显著的区别性。

业务性:举例来说:

如果我的查问条件比拟多,而且不是针对列的条件,那么rowKey的设计就应该反对多条件查问。

如果我的查问要求是最近插入的数据优先,那么rowKey则能够采纳叫上Long.Max-工夫戳的形式,这样rowKey就是递加排列。

· 列族的设计

列族的设计须要看利用场景

多列族设计的优劣:

劣势:HBase中数据时按列进行存储的,那么查问某一列族的某一列时就不须要全盘扫描,只须要扫描某一列族,缩小了读I/O;其实多列族设计对缩小的作用不是很显著,实用于读多写少的场景

劣势:升高了写的I/O性能。起因如下:数据写到store当前是先缓存在memstore中,同一个region中存在多个列族则存在多个store,每个store都一个memstore,当其实memstore进行flush时,属于同一个region的store中的memstore都会进行flush,减少I/O开销。

3.HBase中RowFilter和BloomFilter原理?**

1)RowFilter原理简析

RowFilter顾名思义就是对rowkey进行过滤,那么rowkey的过滤无非就是相等(EQUAL)、大于(GREATER)、

小于(LESS),大于等于(GREATER_OR_EQUAL),小于等于(LESS_OR_EQUAL)和不等于(NOT_EQUAL)几种过滤形式。

Hbase中的RowFilter采纳比拟符联合比拟器的形式来进行过滤。

比拟器的类型如下:

BinaryComparator

BinaryPrefixComparator

NullComparator

BitComparator

RegexStringComparator

SubStringComparator

例子:

Filter rowFilter = new RowFilter(CompareFilter.CompareOp.EQUAL,

new BinaryComparator(Bytes.toBytes(rowKeyValue)));

Scan scan = new Scan();

scan.setFilter(rowFilter)

在下面例子中,比拟符为EQUAL,比拟器为BinaryComparator

2)BloomFilter原理简析

· 次要性能:提供随机读的性能

· 存储开销:BloomFilter是列族级别的配置,一旦表格中开启BloomFilter,那么在生成StoreFile时同时会生成一份蕴含BloomFilter构造的文件MetaBlock,所以会减少肯定的存储开销和内存开销

· 粒度管制:ROW和ROWCOL · BloomFilter的原理

简略说一下BloomFilter原理:

① 外部是一个bit数组,初始值均为0

② 插入元素时对元素进行hash并且映射到数组中的某一个index,将其置为1,再进行屡次不同的hash算法,将映射到的index置为1,同一个index只须要置1次。

③ 查问时应用跟插入时雷同的hash算法,如果在对应的index的值都为1,那么就能够认为该元素可能存在,留神,只是可能存在

④ 所以BlomFilter只能保障过滤掉不蕴含的元素,而不能保障误判蕴含

· 设置:在建表时对某一列设置BloomFilter即可