Hba理论知识点概要

更新时间:2023-06-04 10:01:38 阅读: 评论:0

Hba理论知识点概要
Hba理论知识点概要
831143
问题01:Hba的功能与应⽤场景?
功能:Hba是⼀个分布式的、基于分布式内存和HDFS的按列存储的NoSQL数据库
应⽤:Hba适合于需要实时的对⼤量数据进⾏快速、随机读写访问的场景
问题02:Hba有什么特点?
分布式的,可以实现⾼并发的数据读写
上层构建分布式内存,可以实现⾼性能、随机、实时的读写
底层基于HDFS,可以实现⼤数据
按列存储,基于列实现数据存储,灵活性更⾼
问题03:Hba设计思想是什么?
设计思想:冷热数据分离,Hba将新数据直接写⼊内存中,如果内存中存储的数据过多,就将内存的数据写⼊HDFS 热数据是指刚产⽣的数据,先写内存,⼤概率的情况下,可以直接从内存中读取
冷数据是指先产⽣的数据,将内存中产⽣很久的数据写⼊HDFS中,被读取的概率较⼩
问题04:Hba与HDFS的区别是什么?
Hba是⼀个⾼性能实时随机读写数据的数据库存储系统,⽤于实现实时数据存储
HDFS是⼀个分布式离线⼤数据⽂件存储系统,⽤于实现离线的⽂件存储
问题05:Hba与MySQL的区别是什么?
Hba是分布式NoSQL数据库,可以实现⾼性能的⼤数据存储
MySQL是RDBMS关系型数据库,只能实现⼩数据量的结构化数据存储
问题06:Hba与Hive的区别是什么?
Hive是通过构建元数据,映射HDFS⽂件构建成表,本质还是HDFS,实现离线⼤数据仓库
Hba是通过构建上层分布式内存,底层HDFS,实现⼤数据实时存储的NoSQL数据库
问题07:Hba的按列存储是什么?
Hba按列存储的设计是指Hba中的最⼩操作单元是列,可以实现对每⼀⾏的每⼀列进⾏读写
每⼀⾏的列都是动态的,每⼀⾏可以拥有不同的列
问题08:请简述Namespace、Rowkey、ColumnFamily及多版本的功能及含义
Namespace:命名空间,类似于数据库的设计,⽤于区分不同的业务表
Rowkey:⾏健,类似于主键的设计,唯⼀标识⼀条数据并且作为Hba中的唯⼀索引
ColumnFamily:列族,⽤于将列进⾏分组,底层⽤于区分存储不同的列,提⾼查询性能
多版本:Hba中允许⼀列存储多个版本的值,并通过数据写⼊的时间戳来区分不同版本
问题09:请简述Hba的分布式主从架构
主节点:HMaster:管理节点、负责管理集群的从节点、元数据以及所有Region的分配
从节点:HRegionServer:存储节点,负责实现所有数据的存储,管理Region,构建分布式内存
问题10:请简述Table表与RegionServer的关系
Table是Hba中的表对象,⼀张表可以划分为多个Region分区
RegionServer是Hba中实现数据存储的节点,负责存储每个Region
问题11:表的Region的划分规则及数据写⼊分区的规则是什么?
Region划分规则:范围划分,⼀张表可以在Rowkey⾏的⽅向上划分多个Region,每个Region构成⼀段连续的区间
数据划分规则:根据Rowkey属于哪个Region的范围,就将这条数据写⼊哪个Region分区中
问题12:Region的内部存储结构是什么?
每个RegionServer中管理多个Region
每个Region中根据列族划分多个Store
每个Store中有1个memstore和多个StoreFile⽂件
数据写⼊memstore中,如果达到内存阈值,memstore中的数据将写⼊StoreFile
问题13:什么是热点问题?
现象:在某个时间段内,⼤量的读写请求全部集中在某个Region中,导致这台RegionServer的负载⽐较⾼,其他的Region和RegionServer⽐较空闲
问题:这台RegionServer故障的概率就会增加,整体性能降低,效率⽐较差
原因:本质上的原因,数据分配不均衡
情况
⼀张表只有⼀个Region
⼀张表有多个Region,但是Rowkey是连续产⽣的
问题14:怎么解决热点问题?
合理的设计Rowkey,构建不连续的Rowkey
根据Rowkey的前缀,为表划分多个Region
问题15:Rowkey如何设计,设计规则是什么?
业务原则:贴合业务,保证前缀是最常⽤的查询字段
唯⼀原则:每条rowkey唯⼀表⽰⼀条数据
组合原则:常⽤的查询条件组合作为Rowkey
散列原则:rowkey构建不能连续
长度原则:满⾜业务需求越短越好
问题16:列族设计规则是什么?
个数原则:如果列的个数⽐较多,建议2 ~ 3个,如果列的个数⽐较少,建议1个
列族个数多了,导致⽐较次数变多,降低性能
列族个数少了,导致列的⽐较次数变多,降低性能
长度原则 :能满⾜业务需求的情况下,越短越好
问题17:Hive on Hba的实现原理是什么?
Hive on Hba的原理是通过MapReduce实现对Hba数据的读写
MapReduce中提供了TableInputFormat读取Hba数据,TableOutputFormat写⼊数据到Hba 问题18:Phoenix是什么?
Phoenix是⼀个专门为Hba设计的SQL on Hba的⼯具
渡荆门送别教案底层通过Hba API和⼤量的协处理器实现
可以实现基于SQL访问Hba以及构建维护⼆级索引等功能
问题19:什么是⼆级索引?为什么要构建⼆级索引
⼆级索引指的是基于⼀级索引之上再构建⼀层索引
Hba使⽤Rowkey作为唯⼀索引,只有使⽤Rowkey前缀进⾏查询,才⾛索引查询
导致⼤部分的查询都是不⾛索引,性能⽐较差
通过建⽴⼆级索引,可以通过⾛两次索引代替全表扫描,加快查询速度
问题20:Phoenix实现⼆级索引时,可以构建哪些索引类型?
全局索引
覆盖索引
本地索引
函数索引
问题21:什么是全局索引?
创建全局索引,会⾃动构建⼀张索引表
索引表结构
Rowkey:索引字段+原表的rowkey
列:占位置x
特点:如果查询字段或者查询条件不是索引字段,就不会⾛索引
应⽤:适合于读多写少
问题22:什么是覆盖索引?
创建覆盖索引,会⾃动构建⼀张索引表
索引表结构
设为主页Rowkey:索引字段+原表的rowkey
列:将include中的列放⼊索引表
特点
如果查询字段或者查询条件不是索引字段,就不会⾛索引
如果查询的字段在索引表中,直接从索引表返回结果
问题23:什么是本地索引?
创建覆盖索引,会⾃动基于原表构建⼀个列族来实现索引存储
原表的数据中:多了⼀个索引列族
特点
不论查询字段是否是索引字段,都会⾛索引
将索引与数据存储在同⼀台RegionServer,提⾼索引读写性能
注意
本地索引会修改原数据表,对于本地索引只能使⽤Phoenix来操作表的数据
盐表不能使⽤本地索引
问题24:请简述Hba写⼊数据的流程
step1:获取元数据
有干劲的口号客户端请求Zookeeper,获取meta表所在的regionrver的地址
读取meta表的数据:获取所有表的元数据
笑傲江湖小说阅读全文step2:找到对应的Region
根据meta表中的元数据,找到表对应的所有的region
根据region的范围和写⼊的Rowkey,判断需要写⼊具体哪⼀个Region
根据region的Regionrver的地址,请求对应的RegionServer step3:写⼊数据
请求RegionServer写⼊对应Region:根据Region的名称来指定写⼊哪个Region
根据列族判断写⼊哪⼀个具体的Store
先写⼊WAL:Hlog预写⽇志中
写⼊对应Store的MemStore中
MemStore
问题25:请简述Hba读取数据的流程
step1:获取元数据
客户端请求Zookeeper,获取meta表所在的regionrver的地址
读取meta表的数据
注意:客户端会缓存meta表的数据,只有第⼀次会连接ZK,读取meta表的数据,缓存会定期失效,要重新缓存避免每次请求都要先连接zk,再读取meta表
step2:找到对应的Region
根据meta表中的元数据,找到表对应的region
根据region的范围和写⼊的Rowkey,判断需要写⼊具体哪⼀个Region
根据region的Regionrver的地址,请求对应的RegionServer
step3:读取数据
先查询memstore
如果查询的列族开启了缓存机制,就读取BlockCache
如果没有,就读取StoreFile,并将结果放⼊BlockCache中
问题26:请简述LSM模型的设计思想
step1:数据写⼊的时候,只写⼊内存
会计档案销毁step2:将数据在内存构建有序,当数据量⼤的时候,将有序的数据写⼊磁盘,变成⼀个有序的数据⽂件
step3:基于所有有序的⼩⽂件进⾏合并,合并为⼀个整体有序的⼤⽂件
问题27:什么是Flush,什么时候会触发Flush?
Flush是指将memstore中的数据写⼊HDFS,变成StoreFile
2.0之前:判断memstore存储⼤⼩,单个memstore达到128M就会触发Flush,或者整个memstore达到95%就会触发
2.0之后:根据平均每个memstore的存储⼤⼩与16M取最⼤值计算⽔位线,⾼于⽔位线就Flush,不⾼于就不Flush,都不⾼于全部
Flush
问题28:什么是Compaction,什么时候会触发Compaction?
Compaction的功能是将多个单独有序StoreFile⽂件进⾏合并,合并为整体有序的⼤⽂件并且删除过期数据,加快读取速度hae
2.0之前:通过minor compaction和major compaction来实现
minor compaction:⽤于合并最早⽣成的⼏个⼩⽂件,不清理过期数据
major compaction:⽤于将所有storefile合并为⼀个StoreFile,并清理过期数据
2.0之后:除了minor compaction和major compaction,添加了in-memory-compaction
In-memory compaction:在内存中进⾏合并,合并以后的结果再进⾏flush,有四种配置
none:不开启
basic:开启,但是合并时不删除过期数据
eager:开启,合并时并清理删除过期数据
adaptive:开启,并在合并时根据数据量来⾃动判断是否清理过期数据
色偷偷大香蕉
问题29:什么是Spit,什么时候会触发Split?

本文发布于:2023-06-04 10:01:38,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/858726.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据   实现   构建   设计   内存
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图