IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 大数据面试题(二)HBase -> 正文阅读

[大数据]大数据面试题(二)HBase

二.HBase

目录

二.HBase

1.HBase调优

2.hbase的rowkey怎么创建好?列簇怎么创建比较好?

3.hbase过滤器实现用途

4.HBase宕机如何处理

5.hive和hbase的区别是?

6.hbase写流程

7.hbase读流程

8.hbase数据flush过程

9.数据合并过程

10.Hmaster和Regionserver职责

11.HBase列簇和region的关系

12.请简述Hbase的物理模型是什么

13.请问如果使用Hbase做即席查询,如何设计二级索引

14.如何避免读、写HBase是访问热点的问题

15.布隆过滤器在HBase中的应用

16.Hbase是用来干什么的?什么样的数据会放到hbase中?

17.hbase在建表时的设计原则

18.Hbase中的regionserver发生故障后的处理方法(zk-->WAL)

19.用phenix和es作为hbase二级索引的区别,最新的hbase已经支持二级索引了,你清楚吗?


1.HBase调优

HBase应该如何优化?

高可用

在HBase中Hmaster负责监控RegionServer的生命周期,均衡RegionServer的负载,如果Hmaster挂掉了,那么整个HBase集群将陷入不健康的状态,并且此时的工作状态并不会维持太久。所以HBase支持对Hmaster的高可用配置。

预分区

每一个region维护着startRow与endRowKey,如果加入的数据符合某个region维护的rowKey范围,则该数据交给这个region 维护。那么依照这个原则,我们可以将数据所要投放的分区提前大致的规划好,以提高HBase性能。

优化RowKey设计

一条数据的唯一标识就是rowkey,那么这条数据存储于哪个分区,取决于rowkey处于哪个一个预分区的区间内,设计rowkey 的主要目的 ,就是让数据均匀的分布于所有的region中,在一定程度上防止数据倾斜

内存优化

HBase操作过程中需要大量的内存开销,毕竟Table是可以缓存在内存中的,一般会分配整个可用内存的70%给HBase的Java堆。但是不建议分配非常大的堆内存,因为GC过程持续太久会导致RegionServer处于长期不可用状态,一般16~48G内存就可以了,如果因为框架占用内存过高导致系统内存不足,框架一样会被系统服务拖死。
?

2.hbase的rowkey怎么创建好?列簇怎么创建比较好?

HBase-Rowkey设计

1、预分区

Hbase默认建表时有一个 region,这个 region的 rowkey是没有边界的,即没有 startkey和 endkey在数据写入时,所有数据都会写入这个默认的 region,随着数据量的不断增加,会进行 split,分成2个 region在此过程中,会产生两个问题:

1.数据往一个 region写,会有写热点问题。2. region split会消耗宝贵的集群I/0资源。我们可以控制在建表的时候,创建多个空 region,并确定每个 region的 startkey和 endkey,这样只要我们的 rowkey设计能均匀的命中各个 region,就不会存在写热点问题。自然 split的几率也会大大降低。

2、 rowkey设计原则

? (1) rowkey长度越短越好。数据的持久化文件 Hfile中是按照 Keyvalue存储的,如果 rowkey过长会极大影响File的存储效率; Memstore将缓存部分数据到内存,如果 rowkey字段过长,内存的有效利用率就会降低,系统不能缓存更多的数据,这样会降低检索效率。

(2)rowkey尽量散列。建议将 rowkey的高位作为散列字段,将提高数据均衡分布在每个 Regionserver以实现负载均衡的几率。(哈希、反转等也可以避免热点问题)
? (3) rowkey保证唯一性。
?

一个列族在数据底层是一个文件,所以将经常一起查询的列放到一个列族中,列族尽量少,减少文件的寻址时间。

(1)建表至少指定一个列族,但一般不超过三个,一般一个,因为 flush和 compact是以 region为单位,所以,某个 column family在 flush的时候,它邻近的 column family也会因关联效应被触发f1ush,最终导致系统产生更多的1/0

2)列族名字不宜过长,会冗余存储。

3)不同列族的记录的数量级不易相差太大,比如A,B两个列族,A为100万条,B为100亿条,则A会被分散到多个 region(可能会跨 reglon server),导致对A的扫描效率低下
?

3.hbase过滤器实现用途

增强hbase查询数据的功能
减少服务端返回给客户端的数据量

简单讲讲布隆过滤器及其在HBase中的应用

4.HBase宕机如何处理

HMaster宕机:
HMaster没有单点问题,HBase中可以启动多个HMaster,通过ZooKeeper的选举机制保证总有一个HMaster运行及对外提供服务。

RegionServer宕机:
当RegionServer宕机时,HMaster会将其所管理的region重新分布到其他活动的RegionServer上,同时将该RegionServer上存在MemStore中还未持久化到磁盘中的数据通过WAL重播进行恢复,由于数据和日志都持久在HDFS中,该操作不会导致数据丢失所以数据的一致性和安全性是有保障的。但是重新分配的region需要根据日志恢复原RegionServer中的内存MemoryStore表,这会导致宕机的region在这段时间内无法对外提供服务。而一旦重分布,宕机的节点重新启动后就相当于一个新的RegionServer加入集群,为了平衡,需要再次将某些region分布到该server。

5.hive和hbase的区别是?

Hive与HBase的区别及应用场景

6.hbase写流程

1/ 客户端要连接zookeeper, 从zk的/hbase节点找到hbase:meta表所在的regionserver(host:port);

2/ regionserver扫描hbase:meta中的每个region的起始行健,对比r000001这条数据在那个region的范围内;

3/ 从对应的 info:server key中存储了region是有哪个regionserver(host:port)在负责的;

4/ 客户端直接请求对应的regionserver;

5/ regionserver接收到客户端发来的请求之后,就会将数据写入到region中

7.hbase读流程

1/ 首先Client连接zookeeper, 找到hbase:meta表所在的regionserver;

2/ 请求对应的regionserver,扫描hbase:meta表,根据namespace、表名和rowkey在meta表中找到r00001所在的region是由那个regionserver负责的;

3/找到这个region对应的regionserver

4/ regionserver收到了请求之后,扫描对应的region返回数据到Client

(先从MemStore找数据,如果没有,再到BlockCache里面读;BlockCache还没有,再到StoreFile上读(为了读取的效率);

如果是从StoreFile里面读取的数据,不是直接返回给客户端,而是先写入BlockCache,再返回给客户端。)

8.hbase数据flush过程

1)当MemStore数据达到阈值(默认是128M,老版本是64M),将数据刷到硬盘,将内存中的数据删除,同时删除HLog中的历史数据;

2)并将数据存储到HDFS中;

3)在HLog中做标记点。

9.数据合并过程

https://blog.csdn.net/x541211190/article/details/108424521

10.Hmaster和Regionserver职责

Hmaster

1.管理RegionServer

2.负责Region到RegionServer分配

3.响应Client端的DDL请求

RegionServer

1.管理Region,负责Region数据读写

2.响应Client端的DML请求

11.HBase列簇和region的关系

HBase有多个RegionServer,每个RegionServer里有多个Region,store对应列簇,有几个列簇每个region下就有几个store,在HDFS文件系统中有对应的文件夹,storefiles则是具体的内容,如果该列簇为空,则没有storefiles

12.请简述Hbase的物理模型是什么

(1)Table在行的方向上分割为多个Region。
(2)Table中的所有行都按照row key的字典序排列,根据rowkey存储在不同的Region上。
(3)Region是按大小分割的,每个表开始只有一个region,随着数据增多,region不断增大,当增大到一个阈值的时候,region就会等分成两个新的region,之后会有越来越多的region。
(4)Region是HBase中分布式存储和负载均衡的最小单元。不同Region分布到不同RegionServer上。移动的时候是移动一个Region,进行不同RegionServer之间的负载均衡。
(5)Region虽然是分布式存储的最小单元,但并不是存储的最小单元,存储的最小单元是Cell。Region由一个或者多个Store组成,每个store保存一个columns family列簇。每个store又由一个memStore和0至多个StoreFile组成。memStore存储在内存中,StoreFile存储在HDFS上。memStore是内存中划分的一个区间,StoreFile是底层存储在HDFS上的文件。
(6)每个column family存储在HDFS上的一个单独文件中。

13.请问如果使用Hbase做即席查询,如何设计二级索引

HBase二级索引设计思想

https://blog.csdn.net/liyong1115/article/details/70330165

14.如何避免读、写HBase是访问热点的问题

热点问题是大量的客户端只访问集群的一个或少数节点,大量访问请求会使该台机器的负载很高,直接导致性能下降,甚至Region不可用,而集群的其他节点却处于相对空闲的状态。

HBase-Rowkey设计

(1)加盐
这里所说的加盐不是密码学中的加盐,而是在rowkey的前面增加随机数,具体就是给rowkey分配一个随机前缀以使得它和之前的rowkey的开头不同。给多少个前缀?这个数量应该和我们想要分散数据到不同的region的数量一致(类似hive里面的分桶)。
( 自己理解:即region数量是一个范围,我们给rowkey分配一个随机数,前缀(随机数)的范围是region的数量)
加盐之后的rowkey就会根据随机生成的前缀分散到各个region上,以避免热点。

(2)哈希
哈希会使同一行永远用一个前缀加盐。哈希也可以使负载分散到整个集群,但是读却是可以预测的。使用确定的哈希可以让客户端重构完整的rowkey,可以使用get操作准确获取某一个行数据。

(3)反转
第三种防止热点的方法是反转固定长度或者数字格式的rowkey。这样可以使得rowkey中经常改变的部分(最没有意义的部分)放在前面。这样可以有效的随机rowkey,但是牺牲了rowkey的有序性。反转rowkey的例子:以手机号为rowkey,可以将手机号反转后的字符串作为rowkey,从而避免诸如139、158之类的固定号码开头导 致的热点问题。

(4)时间戳反转
一个常见的数据处理问题是快速获取数据的最近版本,使用反转的时间戳作为rowkey的一部分对这个问题十分有用,可以用Long.Max_Value – timestamp追加到key的末尾,例如[key][reverse_timestamp] ,[key] 的最新值可以通过scan [key]获得[key]的第一条记录,因为HBase中rowkey是有序的,第一条记录是最后录入的数据。

(5)尽量减少行和列的大小
在HBase中,value永远和它的key一起传输的。当具体的值在系统间传输时,它的rowkey,列名,时间戳也会一起传输。如果你的rowkey和列名很大,HBase storefiles中的索引(有助于随机访问)会占据HBase分配的大量内存,因为具体的值和它的key很大。可以增加block大小使得storefiles索引再更大的时间间隔增加,或者修改表的模式以减小rowkey和列名的大小。压缩也有助于更大的索引。

(6)其他办法
列族名的长度尽可能小,最好是只有一个字符。冗长的属性名虽然可读性好,但是更短的属性名存储在HBase中会更好。也可以在建表时预估数据规模,预留region数量,例如create ‘myspace:mytable’, SPLITS => [01,02,03,…99]
?

15.布隆过滤器在HBase中的应用

简单讲讲布隆过滤器及其在HBase中的应用

16.Hbase是用来干什么的?什么样的数据会放到hbase中?

Hive与HBase的区别及应用场景

17.hbase在建表时的设计原则

1、预分区

Hbase默认建表时有一个 region,这个 region的 rowkey是没有边界的,即没有 startkey和 endkey在数据写入时,所有数据都会写入这个默认的 region,随着数据量的不断增加,会进行 split,分成2个 region在此过程中,会产生两个问题:

1.数据往一个 region写,会有写热点问题。2. region split会消耗宝贵的集群I/0资源。我们可以控制在建表的时候,创建多个空 region,并确定每个 region的 startkey和 endkey,这样只要我们的 rowkey设计能均匀的命中各个 region,就不会存在写热点问题。自然 split的几率也会大大降低。

2、 rowkey设计原则

(1) rowkey长度越短越好。数据的持久化文件 Hfile中是按照 Keyvalue存储的,如果 rowkey过长会极大影响File的存储效率; Memstore将缓存部分数据到内存,如果 rowkey字段过长,内存的有效利用率就会降低,系统不能缓存更多的数据,这样会降低检索效率。

rowkey尽量散列。建议将 rowkey的高位作为散列字段,将提高数据均衡分布在每个 Regionserver以实现负载均衡的几率。(哈希、反转等也可以避免热点问题)
(3) rowkey保证唯一性。

3、列族设计原则

(1)建表至少指定一个列族,但一般不超过三个,一般一个,因为 flush和 compact是以 region为单位,所以,某个 column family在 flush的时候,它邻近的 column family也会因关联效应被触发f1ush,最终导致系统产生更多的1/0

2)列族名字不宜过长,会冗余存储。

3)不同列族的记录的数量级不易相差太大,比如A,B两个列族,A为100万条,B为100亿条,则A会被分散到多个 region(可能会跨 reglon server),导致对A的扫描效率低下


18.Hbase中的regionserver发生故障后的处理方法(zk-->WAL)

Hbase检测宕机是通过 Zookeeper实现的,正常情况下 Regionserver会周期性向 Zookeeper发送心跳,一旦发生宕机,心跳就会停止,超过一定时间( Sessi ontimeout) Zookeeper就会认为 Regionserver宕机离线,并将该消息通知给 Master,一台 Regionserver只有一个HLog文件,然后,将Log按照Region进行分组,切分到每个 regionserver中,因此在回放之前首先需要将Log按照 Region进行分组,每个 Region的日志数据放在一起,方便后面按照 Region进行回放。这个分组的过程就称为HLog切分。然后再对 region重新分配,并对其中的Hog进行回放将数据写入 memstore刷写到磁盘,完成最终数据恢复。

19.用phenix和es作为hbase二级索引的区别,最新的hbase已经支持二级索引了,你清楚吗?

1、使用phoenix为Hbase创建二级索引的思路是可行的,但是当查询条件变的很多时就变的很不灵活。比如我有二十个查询条件随机组合查询,每次查询都会有一到二十个条件一起用,这样的话每一种情况都要用phoenix创建索引是比较繁琐的,还容易漏掉其中的几种组合;

2、由于es的条件查询比较灵活,可以多条件随机灵活结合,所以在查询条件相当多、数据量又巨大的条件下要优先选择es为Hbase创建二级索引的;
?

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-20 15:11:21  更:2021-08-20 15:12:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:00:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码