2021-04-09 15:36:28
浏览数 (1)
分布式NoSQL列存储数据库Hbase_列族的设计(五)
知识点01:课程回顾
- Hbase存储原理
- 存储架构
- Hbase:对外提供分布式内存
- Master:集群管理
- RegionServer:数据管理
- HDFS:提供分布式磁盘
- Zookeeper:实现辅助选举、实现元数据存储
- 存储结构
- Table:分布式表,一张表划分了多个Region
- RegionServer:分布式集群节点,管理所有表的region
- Region:每张表的每个分区,对表的数据进行划分
- region的划分规则:按照范围划分,从-oo 到 oo进行有序划分
- 数据的划分规则:按照Rowkey或者Rowkey前缀,Rowkey属于哪个范围,写入对应的region
- Store:对分区内部的数据再次划分,按照列族进行划分Store
- MemStore:内存区域,用于存储刚写入的数据,使用的RegionServer的JVM内存
- 如果到达一定的阈值,就会写入HDFS,变成文件
- StoreFile:逻辑上属于Store,物理上存储在HDFS【HFILE】
- HDFS存储关系
- Hbase目录:/hbase
- Hbase数据:/hbase/data
- 热点问题
- 现象:大量的读写请求全部集中在某个Region或者某个RegionServer上
- 原因:数据分配的不均衡
- 情况一:表只有一个分区
- 情况二:表有多个分区,但是Rowkey是连续的,或者与分区的划分不匹配
- Rowkey是连续,写入同一个Region
- 分区都是按照数字划分的,但是Rowkey是字母开头
- 解决
- 实现预分区
- 方式一:创建表时候:SPLITS => [10,30……]
- 方式二:指定分区的个数,根据数字和字母的Hash组合
- 方式三:Java API
- 合理的设计Rowkey,根据Rowkey的前缀或者完整的Rowkey来划分分区
- Rowkey的设计规则
- 业务原则:尽量用最常用的查询条件作为Rowkey的前缀
- 唯一原则:每条Rowkey是不能重复
- 组合原则:将最常用的几个查询条件组合构建Rowkey
- 散列原则:Rowkey整体或者前缀不能是连续的,需要构建随机的散列
- 长度原则:在满足业务需求情况下,越短越好
- 目的:提高性能
- Rowkey本身每列都会存储:存储占用的空间越大
- Rowkey会构建索引:内存的占用越大,比较就越慢
知识点02:课程目标
知识点03:Hbase设计:列族的设计
知识点04:聊天系统案例:需求分析
知识点05:聊天系统案例:Hbase表设计
知识点06:聊天系统案例:环境准备
知识点07:聊天系统案例:模拟生成数据
- 目标
- 模拟产生用户聊天数据,将每条聊天数据写入Hbase表中
- 路径
- step1:读取Excel文件,读取指定表格
- step2:从表格的每一列中随机生成一条数据,构建一条模拟数据
- step3:将模拟数据封装在一个Msg对象中
- 实现
- 读取Excel文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XPxKWFGg-1616666919964)(20210322_分布式NoSQL列存储数据库Hbase(五).assets/image-20210322105117623.png)]
- 随机取某一列的一个值
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9a9g0u0B-1616666919964)(20210322_分布式NoSQL列存储数据库Hbase(五).assets/image-20210322105145249.png)]
- 随机生成一条数据
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hm39BwML-1616666919965)(20210322_分布式NoSQL列存储数据库Hbase(五).assets/image-20210322105206464.png)]
- 总结
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GvWhnY47-1616666919965)(20210322_分布式NoSQL列存储数据库Hbase(五).assets/image-20210322103055968.png)]
知识点08:聊天系统案例:构建Rowkey
知识点09:聊天系统案例:测试写入代码
知识点10:聊天系统案例:查询需求分析
知识点11:聊天系统案例:测试查询代码
知识点12:聊天系统案例:查询问题
知识点13:二级索引
附录一:Maven 依赖
代码语言:javascript
复制 <repositories>
<repository>
<id>aliyun</id>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</repository>
</repositories>
<properties>
<hbase.version>2.1.2</hbase.version>
</properties>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-client -->
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>${hbase.version}</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-server</artifactId>
<version>${hbase.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!-- Xml操作相关 -->
<dependency>
<groupId>com.github.cloudecho</groupId>
<artifactId>xmlbean</artifactId>
<version>1.5.5</version>
</dependency>
<!-- 操作Office库 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.0.1</version>
</dependency>
<!-- 操作Office库 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.0.1</version>
</dependency>
<!-- 操作Office库 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>4.0.1</version>
</dependency>
<!-- 操作JSON -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.62</version>
</dependency>
<!-- phoenix core -->
<dependency>
<groupId>org.apache.phoenix</groupId>
<artifactId>phoenix-core</artifactId>
<version>5.0.0-HBase-2.0</version>
</dependency>
<!-- phoenix 客户端 -->
<dependency>
<groupId>org.apache.phoenix</groupId>
<artifactId>phoenix-queryserver-client</artifactId>
<version>5.0.0-HBase-2.0</version>
</dependency>
</dependencies>
代码语言:javascript
复制 <!-- 操作Office库 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>4.0.1</version>
</dependency>
<!-- 操作JSON -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.62</version>
</dependency>
<!-- phoenix core -->
<dependency>
<groupId>org.apache.phoenix</groupId>
<artifactId>phoenix-core</artifactId>
<version>5.0.0-HBase-2.0</version>
</dependency>
<!-- phoenix 客户端 -->
<dependency>
<groupId>org.apache.phoenix</groupId>
<artifactId>phoenix-queryserver-client</artifactId>
<version>5.0.0-HBase-2.0</version>
</dependency>
</dependencies>