HBASE是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBASE技术可在廉价PC Server上搭建起大规模结构化存储集群。

HBASE的目标是存储并处理大型的数据,更具体来说是仅需使用普通的硬件配置,就能够处理由成千上万的行和列所组成的大型数据。

HBASE和MongoDB,redis一样,均是一种NoSql型数据库。


HBase简介

HBase是一个面向列的数据库,在表中它由行排序。表模式定义只能列族,也就是键值对。一个表有多个列族以及每一个列族可以有任意数量的列。后续列的值连续存储在磁盘上。表中的每个单元格值都具有时间戳。其数据模型如下图所示:

将hbase 存储改造为mysql_将hbase 存储改造为mysql


总之,在HBase中,

表是行的集合

行是列族的集合

列族是列的集合

列是键值对的集合

这里的列式存储或者说面向列,其实说的是列族存储,HBase是根据列族来存储数据的。列族下面可以有非常多的列,列族在创建表的时候就必须指定。

HBase与RDBMS比较

将hbase 存储改造为mysql_数据_02

HBase安装(linux环境)

下载Hbase,并解压到/usr/local目录下,将其改名为hbase。进入其bin目录可以看到版本:

$ ./hbase version 版本如下:

将hbase 存储改造为mysql_将hbase 存储改造为mysql_03


如果提示没有JAVA_HOME,则进入conf目录修改hbase-env.sh文件中的JAVA_HOME设置。

另外,设置HBASE_MANAGES_ZK为true,表示由hbase自己管理zookeeper,不需要单独的zookeeper。HBASE_CLASSPATH路径设置为/usr/local/hbase/conf目录。

在habse-site.xml中设置hbase.rootdir,用于指定HBase数据的存储位置,如果不设置的话,hbase.rootdir默认为/tmp/hbase-${user.name},这意味着每次重启系统都会丢失数据。设置如下:

<configuration>
        <property>
                <name>hbase.rootdir</name>
                <value>file:///usr/local/hbase/hbase-data</value>
        </property>
</configuration>

详细过程见参考资料1。

进入bin目录,运行start-hbase.sh即可启动:

$ ./start-hbase.sh 再通过bin/hbase shell打开shell命令行模式,用户可以通过输入shell命令操作HBase数据库:

/usr/local/hbase/bin$ ./hbase shell

打开的命令行模式如下:

将hbase 存储改造为mysql_将hbase 存储改造为mysql_04


输入exit则可停止HBase。

注意:如果在操作HBase的过程中发生错误,可以通过{HBASE_HOME}目录(/usr/local/hbase)下的logs子目录中的日志文件查看错误原因。

输入list可查看所有的表,如下:

将hbase 存储改造为mysql_hadoop_05

安装模式

Hbase有三种安装模式,单机,伪分布式和完全分布式。上面的安装过程是一种单机模式。
想要使用伪分布式集群,则需要安装hadoop(详见参考资料2)。这里将hadoop解压到/usr/local目录下。修改配置文件core-site.xml:

<configuration>
    <property>
   	  	<name>hadoop.tmp.dir</name>
     	<value>file:/usr/local/hadoop/hadoop_data</value>
     	<description>Abase for other temporary directories.</description>
    </property>
    <property>
     	<name>fs.defaultFS</name>
     	<value>hdfs://localhost:9000</value>
 	</property>
</configuration>

修改hdfs-site.xml:

<configuration>
	<property>
		<name>dfs.replication</name>
		<value>1</value>  # 伪分布式集群设置副本数量为1
	</property>
	<property>
		<name>dfs.namenode.name.dir</name>
		<value>file:/usr/local/hadoop/hadoop_data/hdfs/namenode</value>
	</property>
	<property>
		<name>dfs.datanode.data.dir</name
		<value>file:/usr/local/hadoop/hadoop_data/hdfs/datanode</value>
	</property>
</configuration>

在安装并配置好hadoop的基础上,对Hbase进行分布式配置:
修改hbase.rootdir,指定HBase数据在HDFS上的存储路径;将属性hbase.cluter.distributed设置为true。假设当前Hadoop集群运行在伪分布式模式下,在本机上运行,且NameNode运行在9000端口:

<configuration>
  <property>
    <name>hbase.rootdir</name>
    <value>hdfs://localhost:9000/hbase</value>
  </property>
  <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
  </property>
</configuration>

接下来就可以运行分布式环境下的hbase了。

进入hadoop的sbin目录,运行start-dfs.sh,即可启动hadoop。从命令行可以看出,启动了namenode和两个datanode。

然后进入hbase的bin目录启动hbase:

$ ./start-hbase.sh 输入jps看到以下界面说明hbase启动成功:

将hbase 存储改造为mysql_hadoop_06


进入shell界面:

$./hbase shell

后即可通过命令行操作hbase了。

将hbase 存储改造为mysql_将hbase 存储改造为mysql_07


(注意:如果list命令出现zookeeper data == null的提示,说明是hadoop配置有误,请检查配置)

HBase使用

命令

说明

status

查看habse状态

create ‘表名’,‘列族名1’,‘列族名2’,‘列族名N’

创建表

list

列出所有表

describe ‘表名’

描述表

exists ‘表名’

判断表是否存在

is_enabled/is_disabled ‘表名’

判断是否启用/禁用表

put ‘表名’,‘rowkey’,‘列族:列’,‘值’

添加记录

get ‘表名’,‘rowkey’

查看rowKey下的所有数据

scan ‘表名’

查看所有记录

count ‘表名’

查看表中记录总数

get ‘表名’,‘rowkey’,'列族‘

获取某个列族

get ‘表名’,‘rowkey’,‘列族:列’

获取某个列族的某个列

delete ‘表名’,‘行名’,‘列族:列’

删除记录

deleteall ‘表名’,‘rowkey’

删除整行

第一步 disable ‘表名’,第二步 drop ‘表名’

先要屏蔽该表,才能对该表进行删除

truncate ‘表名’

清空表

scan ‘表名’,{COLUMNS=>‘列族名:列名’}

查看某个表某个列中的所有数据

创建表User,有一个列族info:

将hbase 存储改造为mysql_将hbase 存储改造为mysql_08


描述表

将hbase 存储改造为mysql_将hbase 存储改造为mysql_09


判断表是否禁用/启用

将hbase 存储改造为mysql_表名_10


添加记录:

将hbase 存储改造为mysql_hadoop_11


查询

将hbase 存储改造为mysql_表名_12


查询所有记录:语法:scan <table>, {COLUMNS => [family:column, ...], LIMIT => num}

将hbase 存储改造为mysql_表名_13


范围查询

将hbase 存储改造为mysql_hadoop_14


另外,还可以添加TIMERANGE和FILTER等高级功能,STARTROW、ENDROW必须大写,否则报错,查询结果不包含等于ENDROW的结果集。删除记录

将hbase 存储改造为mysql_将hbase 存储改造为mysql_15


禁用或启用表:

将hbase 存储改造为mysql_hadoop_16


删除表

将hbase 存储改造为mysql_将hbase 存储改造为mysql_17


本文介绍了HBase的基本概念,安装,命令行交互。下一篇文将继续介绍通过java和python操作hbase。