简介
HBase的原型是Google的BigTable论文,受到了该论文思想的启发,目前作为Hadoop的子项目来开发维护,用于支持结构化的数据存储。
官方网站:http://hbase.apache.org
民间中文文档:https://hbase.apachecn.org/#/
- 2006年Google发表BigTable白皮书
- 2006年开始开发HBase
- 2008年北京成功开奥运会,程序员默默地将HBase弄成了Hadoop的子项目
- 2010年HBase成为Apache顶级项目
- 现在很多公司基于HBase开发出了定制版,比如阿里云HBase
总结:
HBase是构建在HDFS之上的分布式、【面向列】的存储系统,在需要实时读写、随机访问的超大规模数据集是,可以使用HBase。

为什么需要HBase
# 海量数据存储
一个表百亿行 百万列;(MySQL实战最大值500万行,30列)
# 实时查询
1秒内查询得到结果。
HBase特点
# 1. 容量大
HBase单表百亿行,百万列。
# 2. 面向列
HBase存储是面向列,可以再数据存在以后动态增加新列和数据,并支持列数据的独立操作。
# 3. 多版本
HBase每个数据,可以同时保存多个版本,按照时间去标记。
# 4. 稀疏性
HBase每条数据的增删,并不是要操作所有的列,的列可以动态增加,可以存在大量空白单元格,不会占用磁盘空间,这对于海量数据来讲,非常重要。
# 5. 扩展性
底层使用HDFS,存储能力可以横向扩展。
# 6. 高可靠性
底层使用HDFS,拥有replication的数据高可靠性。
# 7. 高性能
表数据达到一定规模,"自动分区",具备主键索引,缓存机制,使得HBase海量数据查询能达到毫秒级。
HBase和RDBMS对比
| HBase | 关系型数据库 |
|---|---|
数据库以**region**的形式存在 |
数据库以Table的形式存在 |
使用**行键**(row key) |
支持主键PK |
| 使用行表示一条数据 | 一条数据用row代表 |
使用列 column、列族 column family |
column代表列数据的含义 |
使用HBase shell命令操作数据 |
使用SQL操作数据 |
| 数据文件可以基于HDFS,是分布式文件系统, 可以任意扩展,数据总量取决于服务器数量 |
数据总量依赖于单体服务器的配置 |
| 不支持事务、不支持ACID | 支持事务和ACID |
| 不支持表连接 | 支持join表连接 |
HBase表逻辑结构

数据相关概念
# namespace 命名空间
hbase管理表的结构,在HDFS中对应一个文件夹。
# table 表
hbase管理数据的结构,在HDFS中对应一个文件。
# column family 列族
表中数据的列,要属于某个列族,所有的列的访问格式(列族:列名)
# rowkey 主键
用来标记和检索数据的主键key。
# cell 单元格
由`row key+column family+column+version` 唯一确定的一条数据
# timestamp 时间戳
时间戳,每个单元格可以保存多个值,每个值有对应的时间戳,每个cell中,不同版本的数据倒叙排序,排在最前面的是最新数据。
HBase单机版安装
下载
地址:http://archive.apache.org/dist/hbase/
准备
- 安装并配置hadoop
[root@hadoop10 installs]# jps 3440 Jps 3329 SecondaryNameNode 3030 NameNode 3134 DataNode
- 安装并配置zookeeper
[root@hadoop10 installs]# jps 3329 SecondaryNameNode 3509 QuorumPeerMain 3030 NameNode 3595 Jps 3134 DataNode [root@hadoop10 installs]# zkServer.sh status ZooKeeper JMX enabled by default Using config: /opt/installs/zookeeper3.4.14/bin/../conf/zoo.cfg Mode: standalone
- 设置好日期同步
# 查看linux系统时间 [root@hadoop10 installs]# date # 重启chronyd服务,同步系统时间。 [root@hadoop10 installs]# systemctl restart chronyd [root@hadoop10 installs]# date 2020年 04月 12日 星期日 22:51:31 CST
安装
# 1. 安装hbase
1. 解压HBase
[root@hadoop30 modules]# tar zxvf hbase-1.2.4-bin.tar.gz -C /opt/installs/
2. 配置环境变量
#JAVA
export JAVA_HOME=/opt/installs/jdk1.8
export PATH=$PATH:$JAVA_HOME/bin
# HADOOP
export HADOOP_HOME=/opt/installs/hadoop2.9.2/
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
# zookeeper
export PATH=$PATH:/opt/installs/zookeeper3.4.14/bin/
# HBase
export HBASE_HOME=/opt/installs/hbase-1.2.4/
export PATH=$PATH:$HBASE_HOME/bin
3. 加载profile配置
source /etc/profile
# 2. 初始化配置文件
# 1 -------------------hbase-env.sh--------------------
# 配置Java_home
export JAVA_HOME=/opt/installs/jdk1.8
# 注释掉如下2行。
# export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m -XX:ReservedCodeCacheSize=256m"
# export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m -XX:ReservedCodeCacheSize=256m"
# 禁用内置zookeeper
export HBASE_MANAGES_ZK=false
# 2. -------------------hbase-site.xml-------------------------
<configuration>
<!-- hbase的入口,ns HaHadoop的虚拟命名空间 -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://hadoop10:9000/hbase</value>
</property>
<!-- 使用伪分布式模式 -->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- zookeeper集群地址,端口默认2181不需要指定 -->
<property>
<name>hbase.zookeeper.quorum</name>
<value>hadoop10</value>
</property>
</configuration>
# -------------------配置regionservers(regionserver所在节点的ip) -------------------
hadoop10
# 3. 启动hbase
启动顺序:
1. 启动zookeeper
2. 启动hdfs
3. 启动hbase
关闭顺序:
1.关闭hbase
2.关闭hdfs
3.关闭zk
# hbase启动方式一
1. 启动hbase
start-hbase.sh
2. 关闭hbase
stop-hbase.sh
# hbase启动方式二
1. 启动HMaster
[root@hadoop10 installs]# hbase-daemon.sh start master
# 关闭
[root@hadoop10 installs]# hbase-daemon.sh stop master
2. 启动HRegionServer
[root@hadoop10 installs]# hbase-daemon.sh start regionserver
# 关闭
[root@hadoop10 installs]# hbase-daemon.sh stop master
# 4. 验证访问
1. java进程查看
[root@hadoop10 installs]# jps
4688 NameNode
5618 HMaster
5730 HRegionServer
4819 DataNode
3509 QuorumPeerMain
6150 Jps
4984 SecondaryNameNode
2. HMaster WebUI查看
http://ip:16010
3. 进入客户端
hbase shell
hbase(main):001:0>

HBase 命令
1. 客户端进出命令
# 进入客户端:
./hbase shell
# 退出客户端命令:
quit
# 帮助
help
2. namespace操作
默认存在一个default的namespace
#1. 查看namespace
list_namespace
#2. 创建namespace
create_namespace "命名空间名字"
#3. 删除namespace
drop_namespace "命令空间名字"
3. 表操作
# 1. 查看所有表
hbase(main):024:0> list
TABLE
baizhins:t_person # namespace:表
t_user # default:表 default被省略了
2 row(s) in 0.1140 seconds
# 2. 查看某个namespace下的所有表
hbase(main):027:0> list_namespace_tables "baizhins"
TABLE
t_person
1 row(s) in 0.3970 seconds
# 3. 创建表
语法:create "namespace:表名","列族1","列族2"
hbase(main):023:0> create "baizhins:t_person","info","edu"
0 row(s) in 9.9000 seconds
# 4. 查看表结构
hbase(main):030:0> desc "baizhins:t_person"
Table baizhins:t_person is ENABLED
baizhins:t_person
COLUMN FAMILIES DESCRIPTION
{
NAME => 'edu', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE',
DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE =>
'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}
{
NAME => 'info', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE'
, DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE =
> 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}
2 row(s) in 1.6400 seconds
# 5. 删除表和禁用表
hbase(main):002:0> disable "namespace:表"
0 row(s) in 4.4790 seconds
hbase(main):002:0> drop

最低0.47元/天 解锁文章
3138

被折叠的 条评论
为什么被折叠?



