关于后端:面试题百日百刷描述HBase的rowKey的设计原则

2次阅读

共计 2108 个字符,预计需要花费 6 分钟才能阅读完成。

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

1. 形容 HBase 的 rowKey 的设计准则?**

① Rowkey 长度准则

Rowkey 是一个二进制码流,Rowkey 的长度被很多开发者倡议说设计在 10~100 个字节,不过倡议是越短越好,不要超过 16 个字节。

起因如下:

(1)数据的长久化文件 HFile 中是依照 KeyValue 存储的,如果 Rowkey 过长比方 100 个字节,1000 万列数据光 Rowkey 就要占用 100*1000 万 =10 亿个字节,将近 1G 数据,这会极大影响 HFile 的存储效率;

(2)MemStore 将缓存局部数据到内存,如果 Rowkey 字段过长内存的无效利用率会升高,零碎将无奈缓存更多的数据,这会升高检索效率。因而 Rowkey 的字节长度越短越好。

(3)目前操作系统是都是 64 位零碎,内存 8 字节对齐。管制在 16 个字节,8 字节的整数倍利用操作系统的最佳个性。

② Rowkey 散列准则

如果 Rowkey 是按工夫戳的形式递增,不要将工夫放在二进制码的后面,倡议将 Rowkey 的高位作为散列字段,由程序循环生成,低位放工夫字段,这样将进步数据平衡散布在每个 Regionserver 实现负载平衡的几率。如果没有散列字段,首字段间接是工夫信息将产生所有新数据都在一个 RegionServer 上沉积的热点景象,这样在做数据检索的时候负载将会集中在个别 RegionServer,升高查问效率。

③ Rowkey 惟一准则

必须在设计上保障其唯一性。

2. 形容 HBase 中 scan 和 get 的性能以及实现的异同?**

HBase 的查问实现只提供两种形式:

1)按指定 RowKey 获取惟一一条记录,get 办法(org.apache.hadoop.hbase.client.Get)

Get 的办法解决分两种 : 设置了 ClosestRowBefore 和没有设置 ClosestRowBefore 的 rowlock。次要是用来保障行的事务性,即每个 get 是以一个 row 来标记的。一个 row 中能够有很多 family 和 column。

2)按指定的条件获取一批记录,scan 办法 (org.apache.Hadoop.hbase.client.Scan)实现条件查问性能应用的就是 scan 形式。

(1)scan 能够通过 setCaching 与 setBatch 办法进步速度 (以空间换工夫);

(2)scan 能够通过 setStartRow 与 setEndRow 来限定范畴 ([start,end)start 是闭区间,end 是开区间 )。范畴越小,性能越高。

(3)scan 能够通过 setFilter 办法增加过滤器,这也是分页、多条件查问的根底。

3. 请形容 HBase 中 scan 对象的 setCache 和 setBatch 办法的应用?**

setCache 用于设置缓存,即设置一次 RPC 申请能够获取多行数据。对于缓存操作,如果行的数据量十分大,多行数据有可能超过客户端过程的内存容量,由此引入批量解决这一解决方案。

setBatch 用于设置批量解决,批量能够让用户抉择每一次 ResultScanner 实例的 next 操作要取回多少列,例如,在扫描中设置 setBatch(5),则一次 next() 返回的 Result 实例会包含 5 列。如果一行包含的列数超过了批量中设置的值,则能够将这一行分片,每次 next 操作返回一片,当一行的列数不能被批量中设置的值整除时,最初一次返回的 Result 实例会蕴含比拟少的列,如,一行 17 列,batch 设置为 5,则一共返回 4 个 Result 实例,这 4 个实例中包含的列数别离为 5、5、5、2。

组合应用扫描器缓存和批量大小,能够让用户不便地管制扫描一个范畴内的行键所须要的 RPC 调用次数。

Cache 设置了服务器一次返回的行数,而 Batch 设置了服务器一次返回的列数。

如果咱们建设了一张有两个列族的表,增加了 10 行数据,每个行的每个列族下有 10 列,这意味着整个表一共有 200 列(或单元格,因为每个列只有一个版本),其中每行有 20 列。

① Batch 参数决定了一行数据分为几个 Result,它只针对一行数据,Batch 再大,也只能将一行的数据放入一个 Result 中。所以当一行数据有 10 列,而 Batch 为 100 时,也只能将一行的所有列都放入一个 Result,不会混合其余行;

② 缓存值决定一次 RPC 返回几个 Result,依据 Batch 划分的 Result 个数除以缓存个数能够失去 RPC 音讯个数(之前定义缓存值决定一次返回的行数,这是不精确的,精确来说是决定一次 RPC 返回的 Result 个数,因为在引入 Batch 之前,一行封装为一个 Result,因而定义缓存值决定一次返回的行数,但引入 Batch 后,更精确的说法是缓存值决定了一次 RPC 返回的 Result 个数);

正文完
 0