四时宝库

程序员的知识宝库

HBase 搭建使用(hbase入门)

HBase(Hadoop Database)是一个开源的非关系型分布式数据库(NoSQL),它参考了谷歌的BigTable建模,实现的编程语言为 Java。它是Apache软件基金会的Hadoop项目的一部分,运行于HDFS文件系统之上,它可以容错地存储海量稀疏的数据。

HBase在列上实现了BigTable论文提到的压缩算法、内存操作和布隆过滤器。HBase的表能够作为MapReduce任务的输入和输出,可以通过Java API来访问数据,也可以通过REST、Avro或者Thrift的API来访问。

在 CAP理论中,HBase属于CP类型的系统。

安装单机环境

去apache官方网站,下载 HBase 。点击 stable目录,然后下载hbase-1.2.6-bin.tar.gz。解压即可

tar xzvf hbase-1.2.6-bin.tar.gz

cd hbase-1.2.6/

先安装java环境。设置环境变量JAVA_HOME

编辑 conf/hbase-site.xml 配置hbase.rootdir,来选择HBase将数据写到哪个目录。将 DIRECTORY 替换成你期望写文件的目录。默认hbase.rootdir 是指向 /tmp/hbase-${user.name}

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>

<property>

<name>hbase.rootdir</name>

<value>file:/home/users/xxxxxx/hbase_data/</value>

</property>

</configuration>

启动HBase

./bin/start-hbase.sh

现在运行的是单机模式的Hbaes,所有的服务都运行在一个JVM上。通过jps命令查看HMaster进程。HBase的日志放在logs目录,当你启动出问题的时候,可以检查这些日志。

关闭HBase

./bin/stop-hbase.sh

stopping hbase....................

数据模型

在HBase中,数据存储在具有行和列的表中。这是与关系数据库(RDBMS)的术语重叠,但并不相同。相反,HBase表应该被视为多维映射。

表(Table)

HBase表由多行组成。

行(Row)

HBase中的一行由行键(row key)和一个或多个列组成。行键按字母顺序排序,因此,行键的设计是非常重要的。目标是相关相近的行存储在一起。如果你的行键是网站域名,你应该可以将它们反向存储(org.apache.www,org.apache.mail,org.apache.jira)。这样,所有的apache域名都在表中临近存储,而不是由于二级域名而分散。

列(Column)

HBase中的列由列族和列限定符组成,它们由一个:(冒号)字符分隔。

列族(Column Family)

列族经常出于性能考虑,共同定位一组列及其值。每列族都具有一组存储属性,例如它的值是否应该缓存在内存中,它的数据如何被压缩或者它的行键如何被编码等等。表中的每一行都具有相同的列族,尽管某些行可能不会在给定列族中存储任何内容。

列限定符(Column Qualifier)
列限定符被添加到列族中以提供给定数据片段的索引。 比如列族content,列限定符可能是content:html,另一个可能是content:pdf。 尽管列族在表创建时已经确定,但列限定符是可变的,并且可能不同行的之间有很大不同。

单元(cell)

一个{row, column, version} 元组确定一个HBase中的一个 cell。包含值和时间戳。

时间戳(Timestamp)

时间戳与每个值一起写入,并且是值的给定版本的标识符。默认情况下,时间戳记表示server端写入数据的时间,但可以在数据写入时指定时间戳值。

shell命令

连接到HBase

$ ./bin/hbase shell

hbase(main):001:0>

创建一个名为 t1 的表,这个表只有一个 列族 为 cf

hbase(main):003:0> create 't1','cf'

0 row(s) in 1.2360 seconds

=> Hbase::Table - t1

查看数据表

hbase(main):004:0> list 't1'

TABLE

t1

1 row(s) in 0.0050 seconds

=> ["t1"]

hbase(main):005:0> describe 't1'

Table t1 is ENABLED

t1

COLUMN FAMILIES DESCRIPTION

{NAME => 'cf', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCO

DING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536',

REPLICATION_SCOPE => '0'}

1 row(s) in 0.0940 seconds

插入数据

put 't1', 'row1', 'cf:a', 'value1'

put 't1', 'row2', 'cf:b', 'value2'

put 't1', 'row3', 'cf:c', 'value3'

HBase中的列是由 列族前缀和列的名字组成的,以冒号间隔

扫描全表

hbase(main):011:0> scan 't1'

ROW COLUMN+CELL

row1 column=cf:a, timestamp=1497426156495, value=value1

row2 column=cf:b, timestamp=1497426156519, value=value2

row3 column=cf:c, timestamp=1497426157158, value=value3

3 row(s) in 0.0090 seconds

按范围查找rowkey

hbase(main):015:0> scan 't1' , {STARTROW=>'row1',STOPROW=>'row2'}

ROW COLUMN+CELL

row1 column=cf:a, timestamp=1497426156495, value=value1

1 row(s) in 0.0100 seconds

查找一行记录

hbase(main):016:0> get 't1','row1'

COLUMN CELL

cf:a timestamp=1497426156495, value=value1

1 row(s) in 0.0190 seconds

REST接口

HBase附带的REST服务器,可以作为一个守护进程运行。 使用以下命令之一在前台或后台启动REST服务器。 端口是可选的,默认为8080。

# Foreground

$ bin/hbase rest start -p <port>

# Background, logging to a file in $HBASE_LOGS_DIR

$ bin/hbase-daemon.sh start rest -p <port>

以下命令都可以使用curl或wget命令运行。可以输入纯文本。也可以在HEADER中添加“Accept:text / xml”标头,接收xml;“application / json”表示json

一般情况下,使用GET请求进行查询,PUT或POST请求进行创建或更新,删除使用DELETE。

查看系统版本号

curl -vi -X GET -H "Accept: text/xml" "http://localhost:8081/version/cluster"

也可以直接在浏览器中输入url

查看集群状态

curl -vi -X GET -H "Accept: text/xml" "http://localhost:8081/status/cluster"

列出非系统数据表

curl -vi -X GET -H "Accept: text/xml" "http://localhost:8081/"

查看某张表的schema

curl -vi -X GET -H "Accept: text/xml" "http://localhost:8081/t1/schema"

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接