(HBase是一种数据库:Hadoop数据库,它是一种NoSQL存储系统,专门设计用来快速随机读写大规模数据。在已成功安装并正常启动的前提下,本文介绍HBase的基本操作。)一、HBase简介什么是HBase(Hadoop Database)呢?有以下两种常见的说法:第一,它是一种稀疏的、分布式的、持久化的、多维有序映射,它基于行键(row key)、列键(column key)和时间戳(timestamp)建立索引。第二,它是一种键值(key value)存储,面向列族的数据库,有时也是一种存储多时间戳版本映射的数据库。以上两种描述都是对的。但从根本上来说,HBase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,是一个可以随机访问的存储和检索数据的平台。大家可以按照需要写入数据,然后再按照需要读取数据。HBase有如下特点:第一,它不介意数据类型,允许动态的、灵活的数据模型,并不限制存储的数据的种类。因此,它可以自如地存储结构化和半结构化的数据。第二,它不用SQL语言,也不强调数据之间的关系。第三,它不允许跨行的事务,可以在一行的某一列存储一个整数,而在另一行的同一列存储字符串。第四,它被设计成在一个服务器集群上运行,而不是单台服务器。这意味着一种强大的、可扩展的数据的使用方式。从HBase的特点可以看出,HBase的设计与目标都与传统的关系型数据库不同。二、HBase的基本操作在已成功安装并正常启动HBase的前提下,我们可以使用HBase Shell,通过命令行方式与HBase进行交互。1.启动HBase Shell转到HBase解压包的“bin”目录下,使用命令“./hbase shell”或“sh hbase shell”命令即可启动HBase Shell。启动之后的信息如下:HBase Shell; enter'help'forlistofsupported commands.Type"exit"toleave the HBase Shell
Version1.0.1, r66a93c09df3b12ff7b86c39bc8475c60e15af82d, Fri Apr1722:14:06PDT2015hbase(main):001:0>为了验证HBase是否安装成功,我们可以输入“list”查看HBase中所有的表。该命令的执行情况如下:hbase(main):001:0>listTABLE0row(s) in0.2390seconds
=> []由于是首次登录,因此HBase中包含了0个表。2.创建表HBase使用表作为顶级结构来存储数据,写数据到HBase,也就是写数据到表。下面创建一个有一个列族(“cf”)的表“mytable”:hbase(main):002:0> create'mytable','cf'0row(s)in0.3250seconds=>Hbase::Table - mytable
hbase(main):003:0> list
TABLE
mytable1row(s)in0.0090seconds=>["mytable"]使用“list”命令,我们可以看到,表创建成功。3.写数据表创建好之后,就需要写入一些数据。例如,我们想往表里写入“hello hbase”,那么我们就在“mytable”表的“first”行中的“cf:info”列对应的数据单元中插入“hello hbase”。命令执行如下:hbase(main):004:0>put'mytable','first','cf:info','hello hbase'0row(s)in0.0970seconds我们还可以继续多增加几个值,如下:hbase(main):005:0>put'mytable','second','cf:name','zhou'0row(s)in0.0180secondshbase(main):006:0>put'mytable','third','cf:nation','China'0row(s)in0.0080seconds现在表里面有3行和3个数据单元。在使用列的时候,大家并没有提前定义这些列,也没有定义往每个列中存储的数据类型。因此,HBase是一种无模式的数据库。4.读数据HBase有两种方式读取数据:get和scan。get方式可以读取一行的数据信息,scan方式可以读取表中所有行的数据信息。get命令执行如下:hbase(main):008:0>get'mytable','first'COLUMN CELL
cf:info timestamp=1435548279711,value=hello hbase1row(s)in0.0770seconds该命令输出了该行所有的数据单元。scan命令执行如下:hbase(main):009:0> scan'mytable'ROW COLUMN+CELLfirstcolumn=cf:info, timestamp=1435548279711,value=hello hbasesecondcolumn=cf:name, timestamp=1435548751549,value=zhouthirdcolumn=cf:nation, timestamp=1435548760826,value=China3row(s)in0.0320seconds该命令返回了所有数据。HBase返回行的顺序,是按照行的名字排序的。HBase称之为行键(rowkey)。5.删除表要想删除一张表,需要先将其“disable”掉,然后再“drop”掉。命令执行如下:hbase(main):010:0> disable'mytable'0row(s)in1.2380seconds
hbase(main):011:0> drop'mytable'0row(s)in0.1770seconds
hbase(main):012:0>listTABLE0row(s)in0.0070seconds
=> []HBase还有很多技巧,但是其他所有的东西都是建立在上面那些基本操作基础之上的。大家一定要好好体会。本人微信公众号:zhouzxi,请扫描以下二维码: