分布式NoSQL列存储数据库Hbase_MR集成Hbase:读写Hbase规则(九)

2021-04-09 15:48:50 浏览数 (1)

分布式NoSQL列存储数据库Hbase(九)

知识点01:课程回顾

知识点02:课程目标

  1. MapReduce读写Hbase
    • 重点:记住读写的规则
      • Spark中读写Hbase规则与MapReduce的规则是一模一样的
    • 应用:一般在工作中都是使用Spark来读写Hbase,如果是MapReduce可以使用Hive来实现
  2. BulkLoad的实现【了解】
    • 问题:大量的数据并发往Hbase中写入,会导致内存和磁盘的利用率非常高,会影响其他程序的性能
    • Hbase中提供两种写入数据的方式
      • Put:直接写入memstore
      • BulkLoad:先将数据转换为storefile文件,将storefile文件直接放入Hbase表的目录中
    • 实现方式
      • 自己开发代码
      • 使用Hbase中的工具类来实现
  3. 协处理的介绍【了解】
    • 什么是协处理器,分类
    • 怎么开发协处理器:自己开发协处理器,实现索引表与原表数据同步
  4. 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中的方法
      • 实现:固定一个代码逻辑,可以随时根据需求调用代码逻辑
  • 总结
    • 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>

0 人点赞