什么是HBase
HBase是一种非关系型的,分布式的,海量存储数据库。可用于大数据分析,如日志分析。来看看官网解释:
❝Apache HBase™ is the Hadoop database, a distributed, scalable, big data store. Use Apache HBase™ when you need random, realtime read/write access to your Big Data. This project's goal is the hosting of very large tables -- billions of rows X millions of columns -- atop clusters of commodity hardware. Apache HBase is an open-source, distributed, versioned, non-relational database modeled after Google's Bigtable: A Distributed Storage System for Structured Data by Chang et al. Just as Bigtable leverages the distributed data storage provided by the Google File System, Apache HBase provides Bigtable-like capabilities on top of Hadoop and HDFS. ❞
HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库,HBase基于列的而不是基于行的模式。
与关系型数据库的区别
HBase是非关系型数据库,那么与关系型数据库(如MySQL)有什么区别呢,我们来看看他们的区别:
「HBase」 | RDBMS | |
---|---|---|
类似于 Hadoop 的分布式集群,硬件成本低廉 | 硬件架构 | 传统的多核系统,硬件成本昂贵 |
由软件架构实现,由于由多个节点组成,所以不担心一点或几点宕机 | 容错性 | 一般需要额外硬件设备实现 HA 机制 |
PB | 数据库大小 | GB、TB |
稀疏的、分布的多维的 Map | 数据排布方式 | 以行和列组织 |
Bytes | 数据类型 | 丰富的数据类型 |
ACID 只支持单个 Row 级别 | 事物支持 | 全面的 ACID 支持,对 Row 和表 |
只支持 Java API (除非与其他框架一起使用,如 Phoenix、Hive) | 查询语言 | SQL |
只支持 Row-key,除非与其他技术一起应用,如 Phoenix、Hive | 索引 | 支持 |
百万查询/每秒 | 吞吐量 | 数千查询/每秒 |
由此可见HBase的性能之强。
数据存储示例
如果是关系型数据库,我们一般是这么存储的:
ID | 姓 | 名 | 密码 | 时间戳 |
---|---|---|---|---|
1 | 张 | 三 | 111 | 20200719 |
2 | 李 | 四 | 222 | 20200720 |
换成Hbase,我们是这么存储的:
Row-Key | Value(CF、Qualifier、Version) |
---|---|
1 | info{'姓': '张','名':'三'}pwd{'密码': '111'} |
2 | Info{'姓': '李','名':'四'}pwd{'密码': '222'} |
看出区别了么。
HBase部署
文件目录
HBase目录如下:
HBase目录
配置hbase-site.xml
代码语言:javascript复制vi ~/support/hbase/conf/hbase-site.xml
<configuration>
<property>
<name>hbase.rootdir</name>
<value>file:///home/log4x/data/hbase</value>
</property>
<property>
<name>hbase.cluster.distrubuted</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>10.174.26.145</value>
</property>
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>
<property>
<name>hbase.tmp.dir</name>
<value>/home/log4x/logs/hbase/tmp</value>
</property>
</configuration>
在这个配置文件中,我们需要配置Zookeeper的地址,配置data
的目录,配置tmp
的目录。
配置hbase-env.sh
代码语言:javascript复制vi ~/support/hbase/conf/hbase-env.sh
export HBASE_MANAGES_ZK=false
我们要禁用Hbase自带的Zookeeper,用统一的Zookeeper管理。
进程启动与数据展示
执行~/support/hbase/bin/start-hbase.sh
。
jps查看
HBase进程
执行~/support/hbase/bin/hbase shell
进入数据库,我们可以看到程序已建好的表:
Hbase表
web页面也能看到:
hbase的web界面
❝这里需要提前创立表空间:cx_log4x ❞
Hbase常用命令(需要进入Hbase shell):
代码语言:javascript复制#hbase创建表空间
create_namespace 'cx_log4x'
#列出表明
>list
#统计表的记录条数
> count 'cx_log4x:WEB'
#查看表的数据,使用指定的时间范围和返回10条。
> scan 'cx_log4x:SRV', {LIMIT=>10,TIMERANGE=>[1495953605000,1496385605000]}
#创建表,base指列名,TTL是数据存活时间,单位秒。
> create 'cx_log4x:ESB', {NAME => 'base',VERSIONS => 1, TTL => 7200, COMPRESSION => 'NONE'}
#清空表,清空表数据。
> truncate 'cx_log4x:WEB
上面就是HBase的一个简短的介绍了,欢迎有兴趣的一起交流。