1.HBASE的功能和应用场景是什么?
★设计思想:将刚产生的数据写入分布式内存 ,内存存储达到一定阈值,将内存中的数据写入分布式磁盘【HDFS】
2.为什么HBASE可以实现读写很快和大数据量存储?
- (1) 读写快:基于内存读写,达到实时效果
- (2) 大数据量:基于分布式磁盘存储
- (3) HBASE:分布式内存 + 分布式磁盘
- ①刚产生的数据写入分布式内存 ,内存存储达到一定阈值,将内存中的数据写入分布式磁盘【HDFS】
- ②写:写入分布式内存
- ③读:内存或者磁盘
★ 很多时候,Hbase的大量数据都存储在HDFS中,读取比较慢,怎么解决?
3.HBASE和HDFS以及Redis的区别
- (1) HBASE:分布式NOsql数据库,实时数据库,分布式内存+分布式磁盘储存,大数据量临时或永久性存储
- (2) HDFS:分布式离线文件系统,分布式磁盘存储,大数据量永久性存储
- (3) Redis:分布式NOsql数据库,实时数据库,分布式内存储存,大数据缓存或小数量永久性存储
4.Hbase名词解释
- (1)Namespace:HBASE中的数据库
- (2)Table:HBASE中的分布式表
- (3)Rowkey:行键,类似于MysqL中的主键,特点如下:
- (4)ColumnFamily(cf)
列族,列的分组,任何一张Hbase的表,都至少要有一个列族,除了Rowkey以外的任何一列,都必须属于某个列族,Rowkey不属于任何一个列族 - (5)Qualifier:列标签,列的名称
- (6)Versions:多版本,HBASE中的某一行的某一列可以通过时间戳(timestamp)来储存多个版本的值
- (7)Region:分区,实现表的分布式概念
5.Hbase的架构及功能角色是什么?
-
(1)Client:负责连接服务端
-
(2)Hbase:由RegionServer的堆内存构建了分布式内存
-
①分布式主从架构
-
②HMaster:
-
1).管理所有从节点(监听从节点健康状态)
- a.监听Regionserver的状态,如果RegionServer发生故障,会实现这台RegionServer的数据恢复
- b.基本原理:所有RegionServer会在ZK中注册一个临时节点,Master会监听Zookeeper中的这些节点(类似于HA选举的原理)
- c.数据是如何恢复的?
HMaster会将这个regionserver对应的所有region恢复在别的regionserver上- a)若数据存储在内存上
- i.如果RegionServer断电故障,内存中的数据丢失
- ii.解决:通过持久化日志来实现
- iii.WAL(HLog,write ahead log),预写日志(数据在写入内存之前,会将这个操作记录在WAL中)
- iv.如果内存数据丢失,可以通过WAL进行恢复
- b)存储在HDFS上
如果RegionServer故障,不影响HDFS的数据
- a)若数据存储在内存上
-
2).管理元数据(将管理元数据不断写入ZK中)
-
3)管理Region的分配(决定每个Region由哪个RegionServer进行管理)
- a.创建表、分配region
- b.regionserver故障,重新分配region到别的regionserver上
- c.region分裂,将新的region分配到regionserver上
-
-
③HRegionServer:存储节点(管理Region中的数据存储,接受客户端的读写请求)
- 1)负责管理所有Region的数据读写,接受客户端对于region的读写请求
- 2)实现分布式内存存储
- 3)负责维护所有存储对象:wal、region、store、memstore、blockcache、storefile
-
-
(3)HDFS:构建分布式磁盘存储
-
(4)Zookeeper:辅助选举,存储管理元数据
6.Hbase中常见的命令有哪些?
- (1)场景一:运维管理,运行Hbase脚本
- Hbase shell XXXXXXX.txt
- (2)场景二:开发测试,命令行,DDL
- ①Namespace:
Create_namespace,list_namespace,drop_namespace - ②Table:
Create[表名+列族],drop,disable,list,desc,exists…… - ③Put tbname,rowkey,cf:col,value,ts
- ④Detele taname,rowkey,cf:col
- ⑤Get tbname,rowkey,[cf:col]
- ⑥Scan tbname [Filter]
- ①Namespace:
- (3)场景三:生产开发,javaAPI,DML
7.Hbase的储存结构是什么(Region的内部存储结构)?
- Table/RegionServer:数据指定写入哪张表,提交给对应的某台RegionServer
8.Hbase的数据分区规则是什么?
- 设计目的:保证大量的数据从此磁盘中读取依旧可以有很高的性能,构建有序数据(Rowkey全局有序)
★为什么要这么做?
构建全局有序,可以根据Region划分进行读取,避免全局扫描,提升从磁盘中读取大量数据的性能 - (1)Region划分:Region在-∞~ +∞区间内进行范围划分,默认只有一个,可自定义划分为多个
- (2)数据分区规则:根据Rowkey属于哪个分区就写入哪个分区
- ①实现每个分区内部的排序,就构建了全局有序
- ②写入数据的rowkey:比较是按照ASC码比较的,不是数值比较
9.热点问题
-
(1)什么是热点问题?
现象:某个时间段内,大量读写请求全部集中在某个Region中,导致这个RegionServer的负载过高,影响性能和安全性 -
(2)原因:
-
(3)解决方法:
- ①构建多个分区:预分区
原则:根据Rowkey或者Rowkey的前缀来构建预分区 - ②构建散列的Rowkey
- ③实现:
- 1)方式一:指定分隔段,实现预分区(前提:先设计Rowkey)
- 2)方式二:指定Region个数,自动进行Hash划分:字母和数字组合
- 3)方式三:Java API
- ①构建多个分区:预分区
10.Hbase的Rowkey如何设计?
- (1)业务原则:Rowkey的设计务必贴合业务的需求,尽量用最常用的条件组合作为Rowkey前缀
- (2**)唯一原则**:Rowkey必须具有唯一性,不能重复,一个Rowkey唯一标识一条数据
- (3)组合原则:将更多常用的查询条件的列放入Rowkey中组合成为Rowkey
- (4)散列原则:将Rowkey构建为散列(前缀不连续、反转、加盐)
- (5)长度原则:保证业务的情况下,Rowkey越短越好,100字节以内
11.列族的设计规则是什么?
12.Hbase使用过程中遇到哪些问题?
13.Phonenix中的盐表是什么?
- (1)由Phoenix来实现自动对Rowkey编码,解决Rowkey的热点问题,不需要自己设计散列的Rowkey(自动对Hbase中盐表写入的Rowkey进行加盐)
- (2)基本语法大体类似于MysqL:upsert、delete、select
- (3)注意:一旦使用了盐表,对于盐表数据的操作只能通过Phoenix来实现,盐表不能自己指定分区段,由Phoenix自己根据自己规则来实现
14.Phoenix二级索引设计
基于Phoenix构建Hbase二级索引并维护二级索引
- step1:根据数据存储需求,创建原始数据表,将数据写入原始数据表
- Step2:根据数据查询需求,构建二级索引,Phoenix自动创建索引表
- Step3:查询数据时,Phoenix根据过滤条件是否存在二级索引,优先判断走二级索引代替全表扫描
- Step4:原始数据表发生数据变化时,Phoenix会自动更新索引表的数据
实现:协处理器
15.Phonenix支持几种二级索引?每种索引的应用场景和特点
- 分类:全局索引(Global Index)、覆盖索引(Coverd Index)、本地索引(Local Index),函数索引(一般不用)
基本语法:create [local] index indexName on tbname(col1……) 【include(col1)】 - (1)全局索引
- (2)覆盖索引
- (3)本地索引
16.Hbase读写流程
- (1)写流程
- 小结:
表名:决定了这条数据要写入哪些region中
Rowkey:决定了这条数据具体写入哪个Region中
列族:决定了写入这个region哪个Store中 - (2)读流程
- (3)MapReduce读取Hbase数据的原理及返回值是什么?
- (4)MapReduce写入Hbase的原理和要求是什么?
- TableOutputFormat
要求:要求输出写入Hbase的KV类型,K的类型会被忽略,V的类型强制要求为Put、Delete
- TableOutputFormat
17.什么是BulkLoad,用于什么场景解决什么问题?
18.Hbase优化
- (1)内存分配:根据实际工作需求,调整内存比例分配,提高性能
- (2)压缩机制:Hbase提供了多种压缩机制实现对于大量数据的压缩存储,提高性能
- • 压缩属于列族的属性:基于列族设计压缩
- (3)布隆过滤:Hbase通过布隆过滤器,在写入数据时,建立布隆索引,读取数据时,根据布隆索引加快数据的检索
- (4)列族属性:使用常用的列族属性
- (5)其他优化
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。