分布式NoSQL列存储数据库Hbase(九)
知识点01:课程回顾
知识点02:课程目标
- MapReduce读写Hbase
- 重点:记住读写的规则
- Spark中读写Hbase规则与MapReduce的规则是一模一样的
- 应用:一般在工作中都是使用Spark来读写Hbase,如果是MapReduce可以使用Hive来实现
- 重点:记住读写的规则
- BulkLoad的实现【了解】
- 问题:大量的数据并发往Hbase中写入,会导致内存和磁盘的利用率非常高,会影响其他程序的性能
- Hbase中提供两种写入数据的方式
- Put:直接写入memstore
- BulkLoad:先将数据转换为storefile文件,将storefile文件直接放入Hbase表的目录中
- 实现方式
- 自己开发代码
- 使用Hbase中的工具类来实现
- 协处理的介绍【了解】
- 什么是协处理器,分类
- 怎么开发协处理器:自己开发协处理器,实现索引表与原表数据同步
- Hbase中的优化方案【重点:记住】
- 对于Hbase做了哪些性能的优化?
- 内存优化
- 压缩优化
- 参数优化
- ……
知识点03:MR集成Hbase:读Hbase规则
知识点04:MR集成Hbase:读Hbase实现
知识点05:MR集成Hbase:写Hbase规则
知识点06:MR集成Hbase:写Hbase实现
知识点07:BulkLoad的介绍
- 目标
- 了解BulkLoad的功能及应用场景
- 分析
- 问题:有一批大数据量的数据,要写入Hbase中,如果按照传统的方案来写入Hbase,必须先写入内存,然后内存溢写到HDFS,导致Hbase的内存负载和HDFS的磁盘负载过高,影响业务
- 解决
- 写入Hbase方式
- 方式一:构建Put对象,先写内存
- 方式二:BulkLoad,直接将数据变成StoreFile文件,放入Hbase对应的HDFS目录中
- 数据不经过内存,读取数据时可以直接读取到
- 实现
- step1:先将要写入的数据转换为HFILE文件
- step2:将HFILE文件加载到Hbase的表中【直接将文件放入了Hbase表对应的HDFS目录中】
- 总结
- 应用场景:Hbase提供BulkLoad来实现大数据量不经过内存直接写入Hbase
- 特点
- 优点:不经过内存,降低了内存和磁盘的IO吞吐
- 缺点:性能上相对来说要慢一些,所有数据都不会在内存中被读取
知识点08:BulkLoad的实现
知识点09:ImportTSV的使用
知识点10:协处理器的介绍
- 目标
- 了解协处理器的功能、分类和应用场景
- 分析
- 什么是协处理器?
- 协处理器指的是可以自定义开发一些功能集成到Hbase中
- 类似于Hive中的UDF,当没有这个功能时,可以使用协处理器来自定义开发,让Hbase支持对应的功能
- 什么是协处理器?
- 实现
- observer类:观察者类,类似于监听机制,MySQL中的触发器、Zookeeper中的监听
- 实现:监听A,如果A触发了,就执行B
- 监听对象
- Region
- Table
- RegionServer
- Master
- 触发:监听A,如果A触发了,执行B
- pre:阻塞A,先执行B,再执行A
- post:A先执行,B在A执行完成之后再执行
- endpoint类:终端者类,类似于MySQL中的存储过程,Java中的方法
- 实现:固定一个代码逻辑,可以随时根据需求调用代码逻辑
- observer类:观察者类,类似于监听机制,MySQL中的触发器、Zookeeper中的监听
- 总结
- Hbase通过协处理器来弥补一些用户自定义功能的实现,例如二级索引等,但开发难度较高,一般通过第三方工具来实现
知识点11:协处理器的实现
知识点12:Hbase优化:内存分配
知识点13:Hbase优化:压缩机制
知识点14:Hbase优化:布隆过滤
- 目标
- 了解布隆过滤器的功能及使用
- 分析
- 什么是布隆过滤器?
- 是列族的一个属性,用于数据查询时对数据的过滤,类似于ORC文件中的布隆索引
- 什么是布隆过滤器?
- 实现
- 列族属性:BLOOMFILTER => NONE | ‘ROW’ | ROWCOL
- NONE :不开启布隆过滤器
- ROW:开启行级布隆过滤
- 生成StoreFile文件时,会将这个文件中有哪些Rowkey的数据记录在文件的头部
- 当读取StoreFile文件时,会从文件头部或者这个StoreFile中的所有rowkey,自动判断是否包含需要的rowkey,如果包含就读取这个文件,如果不包含就不读这个文件
- ROWCOL:行列级布隆过滤
- 生成StoreFile文件时,会将这个文件中有哪些Rowkey的以及对应的列族和列的信息数据记录在文件的头部
- 当读取StoreFile文件时,会从文件头部或者这个StoreFile中的所有rowkey以及列的信息,自动判断是否包含需要的rowkey以及列,如果包含就读取这个文件,如果不包含就不读这个文件
- 总结
- Hbase通过布隆过滤器,在写入数据时,建立布隆索引,读取数据时,根据布隆索引加快数据的检索
知识点15:Hbase优化:列族属性
知识点16:Hbase优化:其他优化
附录一:Maven依赖
代码语言:javascript复制 <repositories>
<repository>
<id>aliyun</id>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</repository>
</repositories>
<properties>
<hadoop.version>2.7.3</hadoop.version>
<hbase.version>2.1.2</hbase.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>${hbase.version}</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-mapreduce</artifactId>
<version>${hbase.version}</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-mapreduce-client-jobclient</artifactId>
<version>${hadoop.version}</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>${hadoop.version}</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-mapreduce-client-core</artifactId>
<version>${hadoop.version}</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-auth</artifactId>
<version>${hadoop.version}</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>${hadoop.version}</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
</dependencies>
sion>