HBase简介及搭建

HBase简介及搭建

一、概述

    HBase是基于hadoop的数据库工具。

1、特点

    HBase来源于google的一篇论文BigTable,后来由Apache做了开源实现就是HBase。是一种NoSQL、非关系型的数据库、不符合关系型数据库的范式。 

    适合存储半结构化、非结构化的数据;适合存储稀疏的数据,稀疏的数据中空的数据不占用空间。

    面向列(族)进行存储,提供实时增删改查的能力,是一种真正的数据库。

    可以存储海量数据、性能也很强大,可以实现上亿条记录的毫秒级别的查询,但是不能提供严格的事务控制,只能在行级别保证事务。

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

    HBase利用Hadoop HDFS作为其文件存储系统,利用Hadoop的MapReduce来处理HBase中的海量数据,利用Zookeeper作为协调工具。

2、逻辑结构

    HBase通过表来存储数据,但是表的结构和关系型数据库非常的不一样。

1.行键

    RowKey:即HBase的主键,HBase表中所有记录都必须有行键,且不可重复。

    访问HBase中的数据有三种方式:

 通过单一行键访问、通过一组行键访问、全表扫描。

    因为存储的数据内容为半结构化和非结构化的原因,只能使用这几种方式查询。

    Row key行键可以是任意字符串,最大长度是64KB,实际应用中长度一般为10-100bytes,在hbase内部,row key保存为字节数组。

    存储时,数据按照Row key的字典序(byte order)排序存储。设计key时,要充分利用排序存储这个特性,将经常一起读取的行存储放到一起。

    注意:

    字典序对int排序的结果是1,10,100,11,2,20,21,…,9,91,96,97,98,99。要保持整形的自然序,行键必须用0作左填充。

    行的一次读写是原子操作(不论一次读写多少列)。这个设计决策能够使用户很容易的理解程序在对同一个行进行并发更新操作时的行为。

2.列族(簇)

    Column Family:是表的元数据的一部分,需要在建表时声明,不能后期增加,如果需要增加只能alter表,一个列族可以包含一个或多个列。

3.

    Column:可以动态增加列,不需要提前声明,在使用的时候随时可以增加,不是表的元数据一部分,归属于一个列族。

4.单元格与时间戳

    cell timestamp:通过row和columns确定的一个存储单元。每个存储单元中都保存着一个数据的多个版本,版本通过时间戳来区别,而由row column和timestamp确定出来的唯一的存储数据的单元,称之为一个cell单元格。

    数据都以二进制形式存储,没有数据类型的区别。所有空数据都不占用空间。

5.Cell

    由{row key, column( =<family> + <label>), version}唯一确定的单元。cell中的数据是没有类型的,全部是字节码形式存贮。

二、安装配置

1、准备

    HBase版本对Hadoop版本有严格的要求,搭配如下:

HBase-0.92.x

HBase-0.94.x

HBase-0.96

Hadoop-0.20.205

S

X

X

Hadoop-0.22.x

S

X

X

Hadoop-1.0.x

S

S

S

Hadoop-1.1.x

NT

S

S

Hadoop-0.23.x

X

S

NT

Hadoop-2.x

X

S

S

    X:表示不兼容,S:表示兼容,NT:表示未知

    前提条件:

    安装jdk、Zookeeper和Hadoop,并配置环境变量。

    此次演示版本选择如下:

    jdk:1.8

    Zookeeper:3.4.7

    Hadoop:2.7.1

    Hbase:0.98.17

    Zookeeper安装参见:Zookeeper集群的搭建

    Hadoop安装可以参见:Hadoop伪分布式模式搭建Hadoop完全分布式集群搭建

2、安装

1.单机模式

    直接解压安装包。

tar -zxvf xxxxx.tar.gz

1>hbase-site.xml

    修改conf/hbase-site.xml。

    配置hbase使用的数据文件的位置,默认在/tmp/hbase-[username],此目录是linux的临时目录,可能会被系统清空,所以最好修改一下。

<property>
<name>hbase.rootdir</name>
<value>file:///<path>/hbase</value>
</property>

2.伪分布式模式

1>hbase-env.sh

    修改conf/hbase-env.sh,将JAVA_HOME的值改为和环境变量中一样的。

export JAVA_HOME=xxxx

2>hbase-site.xml

    修改hbase-site.xml,配置要使用的hdfs信息。

<!--设置hdfs的地址-->
<property>
<name>hbase.rootdir</name>
<value>hdfs://hadoop01:9000/hbase</value>
</property>
<!--设置副本个数-->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>

    启动hbase。

3.完全分布式模式

1>配置文件

hbase-env.sh

    hbase-env.sh配置HBase启动时需要的相关环境变量。

    修改conf/hbase-env.sh,将JAVA_HOME的值改为和环境变量中一样的。

export JAVA_HOME=xxxx

    HBASE_MANAGES_ZK默认是注销的,默认是开启的,需要禁用对zookeeper的自动管理,将值改为false。如果不修改,那么Zookeeper将会随着HBase启动和关闭,这样会导致其他使用Zookeeper的服务,无法使用。

export HBASE_MANAGES_ZK=false

hbase-site.xml

    hbase-site.xml配置HBase基本配置信息。HBASE启动时默认使用hbase-default.xml中的配置,如果需要可以修改hbase-site.xml文件,此文件中的配置将会覆盖hbase-default.xml中的配置。修改配置后要重启hbase才会起作用。

    修改hbase-site.xml,配置开启完全分布式模式。

    配置hbase.cluster.distributed为true。

    配置hbase.rootdir设置为HDFS访问地址。

<!--配置hdfs连接地址这里使用的是hadoop伪分布式,所以只配置了一个地址-->
<property>
<name>hbase.rootdir</name>
<value>hdfs://hadoop01:9000/hbase</value>
</property>
<!--配置副本个数-->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<!--配置启动HBase集群模式-->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!--配置Zookeeper的连接地址-->
<property>
<name>hbase.zookeeper.quorum</name>
<value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>

regionservers

    配置region服务器,修改conf/regionservers文件,其中配置所有hbase主机,每个主机名独占一行,hbase启动或关闭时会按照该配置顺序启动或关闭主机中的hbase。

3、启动集群

    启动顺序如下:

    启动zookeeper->启动hadoop->启动hbase。

./start-hbase.sh

    启动完成之后,可以通过http://xxxxx:60010地址来访问web界面,检查启动是否成功。通过web见面管理hbase,也可以通过hbase shell脚本来访问bhase。

    可以启动备用master实现高可用,这里启动备用master不需要多余配置,只需要在对应的服务器中执行如下命令即可:

hbase-daemon.sh start master

    HBase使用的master热备的原理和Hadoop中NameNode的热备原理相同,都是利用Zookeeper来实现的。

    关闭集群:

stop-hbase.sh

三、基本操作

1、命令

bin/start-hbase.sh
bin/hbase shell
hbase>status
hbase>help
hbase>create 'testtable',''colfam1','colfam2'
hbase>list
hbase>describe 'testtable'
hbase>put 'testtable','myrow-1','colfam1:q1','value-1'
hbase>put 'testtable','myrow-2','colfam1:q2','value-2'
hbase>put 'testtable','myrow-2','colfam1:q3','value-3'
hbase>scan 'testtable'
hbase>get 'testtable','myrow-1'
hbase>delete 'testtable','myrow-2','colfam1:q2'
hbase>scan 'testtable'
hbase>disable 'testtable'
hbase>drop 'testtable'

2、解析

1.创建

建表时可以指定VERSIONS,配置的是当前列族在持久化到文件系统中时,要保留几个最新的版本数据,这并不影响内存中的历史数据版本。

hbase>create 'testtable',{NAME=>'colfam1',VERSIONS=>3},{NAME=>'colfam2',VERSIONS=>1}
hbase>put 'testtable','myrow-1','colfam1:q1','value-1'

2.查看

hbase> scan 'hbase:meta'
hbase> scan 'hbase:meta', {COLUMNS => 'info:regioninfo'}
hbase> scan 'ns1:t1', {COLUMNS => ['c1', 'c2'], LIMIT => 10, STARTROW => 'xyz'}
hbase> scan 't1', {COLUMNS => ['c1', 'c2'], LIMIT => 10, STARTROW => 'xyz'}
hbase> scan 't1', {COLUMNS => 'c1', TIMERANGE => [1303668804, 1303668904]}
hbase> scan 't1', {REVERSED => true}
hbase> scan 't1', {FILTER => "(PrefixFilter ('row2') AND (QualifierFilter (>=, 'binary:xyz'))) AND (TimestampsFilter ( 123, 456))"}
hbase> scan 't1', {FILTER => org.apache.hadoop.hbase.filter.ColumnPaginationFilter.new(1, 0)}
hbase> scan 't1', { COLUMNS => ['c1', 'c2'], ATTRIBUTES => {'mykey' => 'myvalue'}}
hbase> scan 't1', { COLUMNS => ['c1', 'c2'], AUTHORIZATIONS => ['PRIVATE','SECRET']}
hbase> scan 't1', {COLUMNS => ['c1', 'c2'], CACHE_BLOCKS => false}
hbase> scan 't1', {RAW => true, VERSIONS => 10}

    直接使用scan而不加RAW=>true只能查询到最新版本的数据。

hbase>scan 'testtable'
hbase>put 'testtable','myrow-1','colfam1:q1','value-2'
hbase>scan 'testtable'
hbase>put 'testtable','myrow-1','colfam1:q1','value-3'
hbase>scan 'testtable'

    可以在查询时加上RAW=>true来开启对历史版本数据的查询,VERSIONS=>3指定查询最新的几个版本的数据。

hbase>scan 'testtable',{RAW=>true,VERSIONS=>3}
hbase>put 'testtable','myrow-1','colfam1:q1','value-4'
hbase>scan 'testtable'
hbase>scan 'testtable',{RAW=>true,VERSIONS=>3}
hbase>put 'testtable','myrow-1','colfam2:x1','value-1'
hbase>scan 'testtable'
hbase>put 'testtable','myrow-1','colfam2:x1','value-2'
hbase>scan 'testtable'
hbase>scan 'testtable',{RAW=>true,VERSIONS=>3}

    重启hbase

hbase>scan 'testtable',{RAW=>true,VERSIONS=>3}
hbase>exit
bin/stop-hbase.sh

3、注意

    hbase命令行下不能直接使用删除删除字符:

    可以使用ctrl+删除键来进行删除。

    或

    修改xshell配置:

    文件->属性->终端->键盘

    ->delete键序列[VT220Del]

    ->backspace键序列[ASCII127]

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏互扯程序

Linux常用Shell脚本,值得学习及收藏

在运维中,尤其是linux运维,都知道脚本的重要性,脚本会让我们的 运维事半功倍,所以学会写脚本是我们每个linux运维必须学会的一门功课,这里收藏linux运...

25910
来自专栏菩提树下的杨过

hadoop: hive 1.2.0 在mac机上的安装与配置

环境:mac OS X Yosemite + hadoop 2.6.0 + hive 1.2.0 + jdk 1.7.0_79 前提:hadoop必须先安装,且...

31980
来自专栏Spark学习技巧

3,Structured Streaming使用checkpoint进行故障恢复

19640
来自专栏Python小屋

Python自动运维系列:每天凌晨定时执行特定任务

import datetime import time def doSth(): print('test') # 假装做这件事情需要一分钟 time...

982120
来自专栏Hadoop实操

2.如何在RedHat7中实现OpenLDAP集成SSH登录并使用sssd同步用户

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 Fayson的github:https://github.com/fayson/cdhproje...

3.4K90
来自专栏Hadoop实操

CENTOS7.2安装CDH5.10和Kudu1.2(一)

本文档描述CENTOS7.2操作系统部署CDH企业版的过程。Cloudera企业级数据中心的安装主要分为4个步骤:

43160
来自专栏zhisheng

SpringBoot RabbitMQ 整合使用

前提 上次写了篇文章,《SpringBoot Kafka 整合使用》,阅读量还挺高的,于是想想还是把其他几种 MQ 也和 SpringBoot 整合使用下。 下...

32590
来自专栏散尽浮华

Centos 6.9下部署Oracle 11G数据库环境的操作记录

操作系统:Centos6.9(64Bit) Oracle:11g 、11.2.0.4.0版本 Ip地址:172.16.220.139 废话不多说了,下面记录安装...

27590
来自专栏乐沙弥的世界

RMAN 备份详解

RMAN使用服务器会话来完成备份操作,从RMAN客户端连接到服务器将产生一个服务器会话

19920
来自专栏Hadoop实操

重庆某项目生产集群扩容问题总结及复盘

本文主要讲述重庆某项目生产集群扩容项目问题总结及复盘。其中部分问题之前有写过相关文档,可参考我之前写的文章《CDH集群安装YARN无法正常启动及解决办法》、《H...

16310

扫码关注云+社区

领取腾讯云代金券