HBase 数据库

本文详细介绍了HBase,一个基于Hadoop的NoSQL数据库,强调了它与传统关系型数据库的区别,列存储和逻辑结构,以及如何搭建和操作HBase。内容涵盖了HBase的逻辑结构、基础操作、架构组成、数据存储、读写流程和表设计。同时,文章还讨论了HBase的优化策略,包括硬件和操作系统的调优以及HBase自身的调优建议。最后,列举了一些HBase相关的面试题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

HBase概述

​ HBase是一个分布式的、面向列的开源数据库,该技术来源于Fay Chang 所撰写的Google论文《Bigtable》一个结构化数据的分布式存储系统"。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力(低延迟的数据查询能力)。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,Hbase同BigTable一样,都是NoSQL数据库,即非关系型数据库,此外,HBase和BigTable一样,是基于列的而不是基于行的模式。

​ HBase利用Hadoop HDFS作为其文件存储系统,利用Hadoop的MapReduce来处理HBase中的海量数据,利用Zookeeper作为协调工具。

关系型数据库 VS NoSql数据库

1 关系型数据库的缺陷

  • 高并发读写的瓶颈

    ​ 目前环境下,需处理高并发的读写请求,但是关系型数据库可以支持上万次的SQL查询,但I/O硬盘无法承受上万次的SQL写入请求。

  • 可拓展性的限制

    ​ 在基于Web的架构中,数据库是最难以进行横向扩展的,当应用系统的用户量和访问量与日俱增时,数据库系统却无法像Web Server和App Server那样简单地通过添加更多的硬件和服务节点来扩展性能和负载能力。

  • 事务一致性的负面影响

    ​ 在关系型数据库中,所有的规则必须应用到事务的修改上,以便维护所有数据的完整性,这随之而来的是性能的大幅度下降。很多Web系统并不需要严格的数据库事务,对读一致性的要求很低,有些场合对写一致性要求也不高。因此数据库事务管理成了高负载下的一个沉重负担。

  • 复杂SQL查询的弱化

    ​ 任何大数据量的Web系统都非常忌讳几个大表间的关联查询,以及复杂的数据分析类型的SQL查询,特别是SNS类型的网站,从需求以及产品设计角度就避免了这种情况的产生。更多的情况往往只是单表的主键查询,以及单表的简单条件分页查询,SQL的功能被极大地弱化了,所以这部分功能不能得到充分发挥。

2 NoSQL数据库的优势

  • 拓展性强

    ​ NoSQL去掉了关系型数据库的关系特性,数据之间是弱关系,容易拓展,而且通常使用KV字典式存储结构,水平拓展性能优越,很容易实现支撑数据从TB到PB的过渡。

  • 并发性能好

    ​ 读写性能优良

  • 数据模型灵活

    ​ 无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。

HBase的逻辑结构

1 列存储 VS 行存储

列存储 行存储
代表框架 HBase MongoDB 文档型
Lexst 二进制
组织表的方式
写入方式 把一行记录拆分成单列保存,写入次数多,刺头需要移动和定位,修改数据时,行存储是在指定位置写入一次,列存储是将磁盘定位到多个列上分别写入,这个过程仍是行存储的列数倍。 一次写入
读取方式 每次读取的数据是集合的一段或者全部,不存在冗余性问题 将一行数据完全读出,如果只需要其中几列数据的情况,就会存在冗余列,出于缩短处理时间的考量,消除冗余列的过程通常是在内存中进行的。
数据类型 一列都是相同的数据类型,全集合一个类型 一行有多种数据类型,数据解析需要在多种数据类型之间频繁转换
数据压缩性能
优点 在读取过程,不会产生冗余数据 一次性完成,消耗的时间比列存储少,并且能够保证数据的完整性
缺点 写入效率、保证数据完整性上都不如行存储 数据读取过程中会产生冗余数据
适用场景 OLAP 在线联机分析处理系统
同一个数据列的数据重复度很高
每次查询涉及的数据量较小或者大部分查询都需要整行的数

2 HBase逻辑结构

  • 行键 RowKey

    ​ HBase的主键,数据都是按照行键的字典顺序排序后存储,对于HBase的数据查询,仅有三种模式:

    • 根据指定行键查询
    • 根据指定行键范围查询
    • 全表扫描查询
  • 列族 ColumnFamily

    ​ HBase表中垂直方向保存数据的结构,列族是HBase表中的元数据的一部分,需要在定义HBase表时制定好表有哪个列族,列族可以包含一个或多个列(后面可以拓展)

  • 列 Column

    ​ HBase表中列族里可以包含一个或多个列,列并不是HBase表的元数据的一部分,不需要在创建表时预先定义,而是可以在后续使用表时随时为表的列族动态的增加列。

  • 单元格和时间戳

    ​ 在HBase表中,水平方向的行和垂直方向的列交汇就得到了HBase中的一个存储单元,而在这个存储单元中,可以存储数据,并且可以保存数据的多个版本,这些个版本之间通过时间戳来进行区分。
    ​ 所以在HBase中可以通过行键列族列时间戳来确定一个最小的存储数据的单元,这个单元就称之为单元格Cell。

    ​ 单元格中的数据都以二进制形式存储,没有数据类型的区别。

HBase搭建操作

​ 前提条件,安装jdk 和 hadoop,并配置了环境变量。

hbase-env.sh配置HBase启动时需要的相关环境变量。

hbase-site.xml配置HBase基本配置信息。

​ HBASE启动时默认使用hbase-default.xml中的配置,如果需要可以修改hbase-site.xml文件,此文件中的配置将会覆盖hbase-default.xml中的配置。

​ 修改配置后要重启hbase才会起作用。

单机模式

​ HBase将会基于普通的磁盘文件来进行工作,也即不使用HDFS作为底层存储,优点是方便,缺点是底层数据不是分布式存储,性能和可靠性没有保证,主要用作开发测试,不应用在生产环境下。

修改conf/hbase-site.xml文件

<property>
        <name>hbase.rootdir</name>
        <value>file:///<path>/hbase</value> #修改为非tmp的本地路径
</property> 

伪分布式

​ HBase采用hdfs作为存储具有完整的功能,但是只有一个节点工作,没有性能的提升,可以用作开发测试,不可用作生产环境下。

  • 修改conf/hbase-env.sh 的JAVA_HOME(27行,否则不能开启hbase shell)
  • 修改hbase-site.xml
<property>
        <name>hbase.rootdir</name> #指定的底层存储位置
        <value>hdfs://hadoop00:9000/hbase</value>
</property>
<property>
        <name>dfs.replication</name>#制定底层副本的数量,与HDFS副本数匹配
        <value>1</value>
</property>

完全分布式

  • 修改conf/hbase-env.sh 的JAVA_HOME(27行,否则不能开启hbase shell)

  • 修改hbase-site.xml

    <property>
            <name>hbase.rootdir</name> #指定底层存储位置
            <value>hdfs://hadoop00:9000/hbase</value>
    </property>
    <property>
            <name>dfs.replication</name>#指定底层HDFS副本数量
            <value>1</value>
    </property>
    <property>
            <name>hbase.cluster.distributed</name>#是否开启集群模式
            <value>true</value>
    </property>
    <property>
            <name>hbase.zookeeper.quorum</name>#配置zk
            <value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
    </property>
    
  • 修改conf/hbase-env.sh

    export HBASE_MANAGES_ZK false

    这个用来确认是否交由HBase管理zk,默认true,即HBase在关闭的时候,关闭zk

  • 修改conf/regionservers文件

    配置所有hbase的主机,每个主机独占一行,hbase在启动或关闭时,会按照书序启动或关闭对应主机中的HBase进程

管理指令

启动顺序:zk->hadoop->habase

启动:

主机:start-hbase.sh

备用主机:hbase-daemon.sh start master

访问地址:http://student01:60010

脚本访问:hbase shell

HBase基础操作

shell命令操作

指令 说明 示例
create 创建表格
指定VERSIONS,配置的是当前列族在持久化到文件系统中时,要保留几个最新的版本数据,这并不影响内存中的历史数据版本
create ‘tab1’,‘cf1’,'cf2’
create 表名,列族名1,列族名2
create ‘tab1’,{NAME=>‘c1’,VERSIONS=>3}
create 表名,{NAME=>列族名,VERSION=>版本数量}
list 查看共有的表格 list
put 添加数据 put ‘tab1’,‘row-1’,‘cf1:co11’,'aaa’
p
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值