共计 2661 个字符,预计需要花费 7 分钟才能阅读完成。
锁屏面试题百日百刷,每个工作日保持更新面试题。锁屏面试题 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 即可