| |
|
开发:
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目录 2.hbase的rowkey怎么创建好?列簇怎么创建比较好? 16.Hbase是用来干什么的?什么样的数据会放到hbase中? 18.Hbase中的regionserver发生故障后的处理方法(zk-->WAL) 19.用phenix和es作为hbase二级索引的区别,最新的hbase已经支持二级索引了,你清楚吗? 1.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怎么创建好?列簇怎么创建比较好?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以实现负载均衡的几率。(哈希、反转等也可以避免热点问题) 一个列族在数据底层是一个文件,所以将经常一起查询的列放到一个列族中,列族尽量少,减少文件的寻址时间。 (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查询数据的功能 4.HBase宕机如何处理HMaster宕机: RegionServer宕机: 5.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。 13.请问如果使用Hbase做即席查询,如何设计二级索引https://blog.csdn.net/liyong1115/article/details/70330165 14.如何避免读、写HBase是访问热点的问题热点问题是大量的客户端只访问集群的一个或少数节点,大量访问请求会使该台机器的负载很高,直接导致性能下降,甚至Region不可用,而集群的其他节点却处于相对空闲的状态。 (1)加盐 (2)哈希 (3)反转 (4)时间戳反转 (5)尽量减少行和列的大小 (6)其他办法 15.布隆过滤器在HBase中的应用16.Hbase是用来干什么的?什么样的数据会放到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、列族设计原则 (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的扫描效率低下
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |