Hbase面试题(持续更新)「建议收藏」

Hbase面试题(持续更新)「建议收藏」1、每天百亿数据存入HBase,如何保证数据的存储正确和在规定的时间里全部录入完毕,不残留数据1)百亿数据:证明数据量非常大2)存入HBase:证明是跟HBase的写入数据有关3)保证数据的正确:要设计正确的数据结构保证正确性4)在规定时间内完成:对存入速度是有要求的那么针对以上的四个问题我们来一一分析1)数据量百亿条,什么概念呢?假设一整天60x60x24=86400秒都在写入数据,那么每秒的写入条数高达100万条,HBase当然是支持不了每秒百万条数据的,所以这百亿条数据可能不是通过实时

大家好,又见面了,我是你们的朋友全栈君。

1、每天百亿数据存入HBase,如何保证数据的存储正确和在规定的时间里全部录入完毕,不残留数据

1)百亿数据:证明数据量非常大
2)存入HBase:证明是跟HBase的写入数据有关
3)保证数据的正确:要设计正确的数据结构保证正确性
4)在规定时间内完成:对存入速度是有要求的

那么针对以上的四个问题我们来一一分析
1)数据量百亿条,什么概念呢?假设一整天60x60x24 = 86400秒都在写入数据,那么每秒的写入条数高达100万条,HBase当然是支持不了每秒百万条数据的,所以这百亿条数据可能不是通过实时地写入,而是批量地导入。批量导入推荐使用BulkLoad方式(
2)存入HBase:普通写入是用JavaAPI put来实现,批量导入推荐使用BulkLoad
3)保证数据的正确:这里需要考虑RowKey的设计、预建分区和列族设计等问题
4)在规定时间内完成也就是存入速度不能过慢,并且当然是越快越好,使用BulkLoad

2、Hbase的六大特点

(1)表大:一个表可以有数亿行,上百万列。
(2)无模式:每行都有一个可排序的主键和任意多的列,列可以根据需要动态增加,同一个表中的不同行的可以有截然不同的列。
(3)面向列:HBase是面向列的的存储和权限控制,列族独立索引。
(4)稀疏:空(null)列并不占用空间,表可以设计的非常稀疏。
(5)数据类型单一:HBase中的数据都是字符串,没有类型。
(6)数据多版本:每个单元中的数据可以有多个版本,默认情况下版本号自动分配,是单元格插入时的时间戳。

3、Hbase的rowkey设计原则:

(1)rowkey长度原则:rowkey是一个二进制流,长度开发者建议是10-100字节,不过建议越短越好,最好不超过16字节。原因是:数据持久化文件HFile中是按照按照key/value存储的,如果rowkey太长的话就会影响HFile的存储效率。Memstore将缓存数据到内存,如果rowkey字段过长内存的有效利用会降低,系统将会无法缓存更多的数据,降低检索的效率。
(2)rowkey散列原则:如果rowkey是按照时间戳方式递增的话,不要将时间放在二进制码的前面,建议将rowkey的高位作为散列字段,如果没有散列字段就会出现一个regionServer上堆积的热点现象。
(3)rowkey的唯一原则:rowkey不能为空且唯一。

4、Hbase的查询方式

1、全表查询:scan tableName
2、基于rowkey的单行查询:get tableName,‘1’
3、基于rowkey的范围扫描:scan tableName, {STARTROW=>‘1’,STOPROW=>‘2’}
4、get和scan方法:
(1)、按指定的rowkey获取唯一一条数据,get方法:分为两种,分别是设置了closestRowBefore和没有设置的rowlock,只要保证行的事务性,即每一个get是以一个row来标记的,一个row中可以有多个family和column。
(2)、按指定的条件获取一批记录,条件查询。1、scan可以通过setCaching和setBatch方法来提高速度;2、scan也可以通过setStartRow和setEndRow来限定范围(左闭右开),3、scan还可以通过setFileter方法来添加过滤器。
ps:setCache和setBatch方法:
setCache方法:这个方法设置即一次RPC请求放回的行数,对于缓存操作来说,如果返回行数太多了,就可能内存溢出,那么这个时候就需要setBatch方法,。
setBatch:设置这个之后客户端可以选择取回的列数,如果一行包括的列数超过了设置的值,那么就可以将这个列分片。例如:如果一行17列,如果batch设置为5的话,就会返回四组,分别是5,5,5,2。、
※:Cache设置了服务器一次返回的行数,而Batch设置了服务器一次返回的列数。
ps:Batch参数决定了一行数据分为几个result,它只针对一行数据,Cache决定了一次RPC返回的result个数。
RPC请求次数 = (行数 * 每行列数) / Min(每行的列数,批量大小) / 扫描器缓存

5、Hbase的读写流程:

1、HBase的读流程:
(1)、HRegisonServer保存着.meta.表及数据表,首先client先访问zk,访问-ROOT-表,然后在zk上面获取.meta.表所在的位置信息,找到这个meta表在哪个HRegionServer上面保存着。
(2)、接着client访问HRegionServer表从而读取.meta.进而获取.meta.表中存放的元数据。
(3)、client通过.meta.中的元数据信息,访问对应的HRegionServer,然后扫描HRegionServer的Memstore和StoreFile来查询数据。
(4)、最后把HRegionServer把数据反馈给client。
2、HBase的写流程:
(1)client访问zk中的-ROOT-表,然后后在访问.meta.表,并获取.meta.中的元数据。
(2)确定当前要写入的HRegion和HRegionServer。
(3)clinet向HRegionServer发出写相应的请求,HRegionServer收到请求并响应。
(4)client先将数据写入到HLog中,以防数据丢失。
(5)然后将数据写入到MemStore中。
(6)如果HLog和MemStore都写入成功了,那么表示这个条数据写入成功了。
(7)如果MemStore写入的数据达到了阈值,那么将会flush到StoreFile中。
(8)当StoreFile越来越多,会触发Compact合并操作,将过多的StoteFile合并成一个大的StoreFile。
(9)当StoreFile越来越多时,Region也会越来越大,当达到阈值时,会触发spilit操作,将这个Region一分为二。
ps:HBase中所有的更新和删除操作都会在后续的compact中进行,使得用户的写操作只需要进入内存中就行了。实现了HBase的 I/O高性能。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/138181.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 调幅收音机原理图及分析_调频调幅收音机区别

    调幅收音机原理图及分析_调频调幅收音机区别标题:致小白:详解调幅收音机的原理妈妈再也不用担心我不懂收音机啦!作者:Pleiades_Antares出品:BDF元培调查组北京市内包小组版权声明:本作系完全原创,他人不得在原作者不知

    2022年8月2日
    8
  • python用于表示逻辑非运算_python and运算符

    python用于表示逻辑非运算_python and运算符在看python的时候逻辑运算符没看懂。xandy布尔”与”-如果x为False,xandy返回x的值,否则返回y的计算值。(aandb)返回20就这一段话,看的我有点懵逼,然后我就去上网搜了别人的解说,然后写了一篇文章,供大家理解。先学习其他语言里的与或非。短路与(逻辑与)和非短路与。或也是如此,不在重复,接下来拿与举例子。一.短路与(逻辑与)和非短路与先来…

    2022年10月8日
    3
  • 模式先行全新解读微商分销系统

    模式先行全新解读微商分销系统在微商迅速发展的时代下,微商分销系统的需求也日渐上升,这对微商分销系统也有着更高的要求。一款好的微商分销系统需要具备“快速搭建、功能强大、顺畅分销、管理有序,支付便捷,扩展性强”等条件,模式先行,分销模式也是恒量分销系统的一个非常重要的指标。微商分销系统通常为一级/二级/三级分销模式,即品牌商可以发展一级/二级/三级分销商,每一级分销商均可以往下再发展一级/二级分销商。我们以三级分销模式为例解读A…

    2022年5月17日
    40
  • JQuery-学习笔记03【基础——DOM操作】「建议收藏」

    JQuery-学习笔记03【基础——DOM操作】「建议收藏」JQuery-学习笔记03【基础——DOM操作】

    2025年10月29日
    3
  • python 0o_python中0o1010是多少

    python 0o_python中0o1010是多少python0o1010是多少?它以0开头,满足八进制的要求,是个八进制的数,下面来了解一下整数的四种表现形式:对于整数:有四种表现形式二进制:0,1满2进1八进制:0-7满8进1,用0开头表示十进制:0-9满10进1十六进制:0-9,A-F满16进1,用0x表示位(bit):存储信息的最小单位,表示一个二进制数字。字节(Byte):一个字节由8位二进制数字组成(1Byte=8bit)…

    2022年6月24日
    41
  • NoSQL数据库介绍

    NoSQL在2010年风生水起,大大小小的Web站点在追求高性能高可靠性方面,不由自主都选择了NoSQL技术作为优先考虑的方面。今年伊始,InfoQ中文站有幸邀请到凤凰网的孙立先生,为大家分享他之于N

    2021年12月26日
    57

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号