数据结构论坛

首页 » 分类 » 分类 » 技术分享BAT大数据面试常问面试题之
TUhjnbcbe - 2023/8/5 20:23:00
临沂白癜风医院 http://news.39.net/bjzkhbzy/171023/5784188.html

1.HBase特点是什么?

1)大:一个表可以有数十亿行,上百万列;

2)无模式:每行都有一个可排序的主键和任意多的列,列可以根据需要动态的增加,同一张表中不同的行可以有截然不同的列;

3)面向列:面向列(族)的存储和权限控制,列(族)独立检索;

4)稀疏:空(null)列并不占用存储空间,表可以设计的非常稀疏;

5)数据多版本:每个单元中的数据可以有多个版本,默认情况下版本号自动分配,是单元格插入时的时间戳;

6)数据类型单一:Hbase中的数据都是字符串,没有类型。

2.HBase适用于怎样的情景?

①半结构化或非结构化数据:对于数据结构字段不够确定或杂乱无章很难按一个概念去进行抽取的数据适合用HBase。以上面的例子为例,当业务发展需要存储author的email,phone,address信息时RDBMS需要停机维护,而HBase支持动态增加。

②记录非常稀疏RDBMS的行有多少列是固定的,为null的列浪费了存储空间。而如上文提到的,HBase为null的Column不会被存储,这样既节省了空间又提高了读性能。

③多版本数据:如上文提到的根据Rowkey和Columnkey定位到的Value可以有任意数量的版本值,因此对于需要存储变动历史记录的数据,用HBase就非常方便了。比如上例中的author的Address是会变动的,业务上一般只需要最新的值,但有时可能需要查询到历史值。

④超大数据量:当数据量越来越大,RDBMS数据库撑不住了,就出现了读写分离策略,通过一个Master专门负责写操作,多个Slave负责读操作,服务器成本倍增。随着压力增加,Master撑不住了,这时就要分库了,把关联不大的数据分开部署,一些join查询不能用了,需要借助中间层。随着数据量的进一步增加,一个表的记录越来越大,查询就变得很慢,于是又得搞分表,比如按ID取模分成多个表以减少单个表的记录数。经历过这些事的人都知道过程是多么的折腾。采用HBase就简单了,只需要加机器即可,HBase会自动水平切分扩展,跟Hadoop的无缝集成保障了其数据可靠性(HDFS)和海量数据分析的高性能(MapReduce)。

3.描述HBase的rowKey的设计原则?

(1)Rowkey长度原则

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

原因如下:

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

②MemStore将缓存部分数据到内存,如果Rowkey字段过长内存的有效利用率会降低,系统将无法缓存更多的数据,这会降低检索效率。因此Rowkey的字节长度越短越好。

③目前操作系统是都是64位系统,内存8字节对齐。控制在16个字节,8字节的整数倍利用操作系统的最佳特性。

(2)Rowkey散列原则

如果Rowkey是按时间戳的方式递增,不要将时间放在二进制码的前面,建议将Rowkey的高位作为散列字段,由程序循环生成,低位放时间字段,这样将提高数据均衡分布在每个Regionserver实现负载均衡的几率。如果没有散列字段,首字段直接是时间信息将产生所有新数据都在一个RegionServer上堆积的热点现象,这样在做数据检索的时候负载将会集中在个别RegionServer,降低查询效率。

(3)Rowkey唯一原则

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

4.描述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方法添加过滤器,这也是分页、多条件查询的基础。

5.请详细描述HBase中一个cell的结构?

HBase中通过row和columns确定的为一个存贮单元称为cell。Cell:由{rowkey,column(=+),version}唯一确定的单元。cell中的数据是没有类型的,全部是字节码形式存贮。

6.简述HBase中

1
查看完整版本: 技术分享BAT大数据面试常问面试题之