HBase伪分布式环境搭建及命令行使用

HBase伪分布式环境搭建及命令行使用

1.HBase简介

Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。HBase利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用ZooKeeper作为协调工具。

2.HBase的数据模型

  • 表(table),是存储管理数据的。
  • 行键(row key),类似于MySQL中的主键。
    行键是HBase表天然自带的,Table中的记录按照Row Key排序。
  • 列簇(column family),列的集合。
    HBase中列簇是需要在定义表时指定的,列是在插入记录时动态增加的。
    HBase表中的数据,每个列簇单独一个文件。
  • 时间戳(timestamp),列(也称作标签、修饰符)的一个属性。
    行键和列确定的单元格,可以存储多个数据,每个数据含有时间戳属性,数据具有版本特性。
    如果不指定时间戳或者版本,默认取最新的数据。
  • 存储的数据都是字节数组。
  • 表中的数据是按照行键的顺序物理存储的。

3.HBase的物理模型

  • HBase是适合海量数据(如20PB)的秒级简单查询的数据库。
  • HBase表中的记录,按照行键进行拆分, 拆分成一个个的region。
    许多个region存储在region server(单独的物理机器)中的,这样,对表的操作转化为对多台region server的并行查询。

4.HBase的架构体系

  • Client
    包含访问HBase的接口,Client维护着一些cache 来加快对HBase的访问,比如region的位置信息
  • ZooKeeper
    ①保证任何时候,集群中只有一个running master
    ②存贮所有Region的寻址入口
    ③实时监控Region Server的状态,将Region Server的上线和下线信息,实时通知给Master
    ④存储Hbase 的schema,包括有哪些table,每个table 有哪些column family
  • Master
    ①可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master运行
    ②为Region Server分配region
    ③负责Region Server 的负载均衡
    ④发现失效的Region Server并重新分配其上的region
  • Region Server
    ①维护Master分配给它的region,处理对这些region的IO请求
    ②负责切分在运行过程中变得过大的region

可以看出,Client访问HBase上数据的过程并不需要Master参与,寻址访问ZooKeeper和Region Server,数据读写访问Region Server。HRegionServer主要负责响应用户I/O请求,向HDFS文件系统中读写数据,是HBase中最核心的模块。

5.HBase的基础知识

HBase中有两张特殊的Table,-ROOT-.META.
.META.:记录了用户表的Region信息,.META.可以有多个regoin
-ROOT-:记录了.META.表的Region信息,-ROOT-只有一个region
ZooKeeper中记录了-ROOT-表的location
Client访问用户数据之前需要首先访问ZooKeeper,然后访问-ROOT-表,接着访问.META.表,最后才能找到用户数据的位置去访问。

6.HBase伪分布式环境安装

HBase是依赖Hadoop的数据存储系统,所以安装HBase前Hadoop环境要安装成功,可参见hadoop2.6.4伪分布式环境搭建
由于HBase自带ZooKeeper,所以ZooKeeper可以不用安装。HBase内置的ZooKeeper效果一般不好,一般都选择外置独立的ZooKeeper。下面会有说到如何使用独立的,如何使用默认自带的,想学习HBase可以不安装外置独立的ZooKeeper。

6.1下载HBase

下载HBase,选择当前稳定版stable。将下载的hbase-1.2.4-bin.tar.gz拷贝到Linux系统/root/Downloads目录下,解压到/usr/local/目录下tar -zxvf hbase-1.2.4-bin.tar.gz -C /usr/local/

6.2配置系统环境变量

vi /etc/profile,文件末尾配置内容:

export JAVA_HOME=/usr/local/java/jdk1.8.0_101
export HADOOP_HOME=/usr/local/hadoop/hadoop-2.6.0
export ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.9-1
export HBASE_HOME=/usr/local/hbase-1.2.4
export PATH=.:$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin:$HBASE_HOME/bin

6.3验证环境变量是否配置成功

hbase version
验证hbase环境变量是否配置成功

6.4修改hbase-env.sh文件

修改${HBASE_HOME}/conf/hbase-env.sh文件
①修改设置JAVA_HOMEexport JAVA_HOME=/usr/local/jdk
②修改设置HBASE_MANAGES_ZK,export HBASE_MANAGES_ZK=true为true表示使用HBase自带的ZooKeeper,为false表示使用独立的ZooKeeper,需要安装ZooKeeper

6.5修改hbase-site.xml文件

修改${HBASE_HOME}/conf/hbase-site.xml文件,配置内容如下:

<property>
    <name>hbase.rootdir</name>
    <value>hdfs://cyyun:9000/hbase</value>
</property>
<property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
</property>
<property>
    <name>hbase.zookeeper.quorum</name>
    <value>cyyun</value>
</property>
<property>
    <name>dfs.replication</name>
    <value>1</value>
</property>

注:hbase.rootdir的值一定要与Hadoop的配置文件core-site.xml中fs.default.name的值相同,hbase.zookeeper.quorum的值一定是启动HBase所在的机器主机名

6.6修改regionservers文件

修改文件的内容为主机名cyyun

6.7启动HBase

首先确保Hadoop集群已经启动。
执行命令start-hbase.sh,启动HBase
启动hbase
使用jps查看进程
jps查看进程
可以看到新增了3个Java进程HMaster、HRegionServer、HQuorumPeer。
可以在浏览器上查看地址http://cyyun:16010,可以看到HBase的管理界面。
注:hbase1.0以前的版本端口号是60010,需要自己手动配置,在文件hbase-site.xml中添加如下配置,就可以使用http://cyyun:60010访问了。

<property>
    <name>hbase.master.info.port</name>
    <value>60010</value>
</property>

查看HDFS目录,会发现根目录下多了一个hbase的目录hadoop fs -ls /
停止命令是stop-hbase.sh

此时HBase使用自带的ZooKeeper伪分布式环境安装成功。

6.8使用独立的ZooKeeper搭建HBase

①修改设置HBASE_MANAGES_ZK,export HBASE_MANAGES_ZK=false
②分别启动ZooKeeper
③启动Hadoop
④启动HBase
查看进程jps,除了HMaster、HRegionServer,多出3个zk进程QuorumPeerMain。
jps查看独立ZooKeeper进程
此时进入到ZooKeeper的命令行Shell,ls /查看到ZooKeeper多出来一个节点hbase
多出来hbase节点
此时HBase使用独立的ZooKeeper伪分布式环境安装成功。

7.HBase的Shell操作

HBase启动成功后,输入命令hbase shell进入到HBase提供的一个Shell的终端进行交互
hbaseshell

名称命令表达式
创建表create '表名称','列簇名称1','列簇名称2','列簇名称N'
列出全部表list
得到表的描述describe '表名称'
检查表是否存在exists '表名称'
表是否可用/禁用is_enabled '表名称';is_disabled '表名称'
添加记录put '表名称','行名称','列簇名称:列名称','值'
获取一个行键记录get '表名称','行名称'
获取一个行键,一个列簇的所有数据get '表名称','行名称','列簇名'
获取一个行键,一个列簇中的一个列的所有数据get '表名称','行名称','列簇名:列名称'
查看表中记录总数count '表名称'
查看所有记录scan '表名称'
查看一个表一个列中所有数据get '表名称',{COLUMNS=>'列簇名称:列名称'}
更新/修改记录并不是修改,就是重写一遍进行覆盖
获取版本数据get '表名称',{COLUMNS=>'列簇名称:列名称',VERSIONS=>1}
根据时间戳获取版本数据get '表名称','行名称',{COLUMN=>'列簇名称:列名称',TIMESTAMP=>时间戳}
删除一列记录delete '表名称','行名称','列簇名称:列名称'
删除一条记录(一个行键记录)deleteall '表名称','行名称'
清空表truncate '表名称'
删除一张表先要禁用该表,才能对该表进行删除,第一步disable '表名称',第二步drop '表名称'

7.1创建表create 'student','stu_id','address','info'

create创建表
表student,有三个列簇stu_id,address,info

7.2列出全部表list

list列出全部表

7.3表的描述describe 'student'

表的描述

7.4表是否存在exists 'student'

表是否存在

7.5表是否可用/禁用is_enabled 'student'is_disabled 'student'

表是否禁用
返回true/false

7.6添加记录put

put 'student','zhangsan','info:age','24';
put 'student','zhangsan','info:birthday','1987-06-17';
put 'student','zhangsan','info:company','alibaba';
put 'student','zhangsan','address:contry','china';
put 'student','zhangsan','address:province','zhejiang';
put 'student','zhangsan','address:city','hangzhou';
put 'student','lisi','info:birthday','1987-4-17';
put 'student','lisi','info:favorite','movie';
put 'student','lisi','info:company','alibaba';
put 'student','lisi','address:contry','china';
put 'student','lisi','address:province','guangdong';
put 'student','lisi','address:city','jieyang';
put 'student','lisi','address:town','xianqiao'

7.7查看记录

①获取一个行键的所有数据get 'student','zhangsan'
get数据
②获取一个行键,一个列簇的所有数据get 'student','zhangsan','address'
获取一个行键一个列簇的所有数据
③获取一个行键,一个列簇中的一个列的所有数据get 'student','zhangsan','info:age'
获取一个行键一个列簇中一个列的所有数据

7.8查看表中记录总数count 'student'

表数据总数
两个行键,所以是两条数据。

7.9查看所有记录scan 'student'

所有数据查看

7.10获取表某个列中的版本数据

get 'student','zhangsan',{COLUMN=>'info:age',VERSIONS=>1}
获取单元格版本数据

7.11更新/修改操作

put 'student','zhangsan','info:age','29'
get 'student','zhangsan','info:age'
put 'student','zhangsan','info:age','30'
get 'student','zhangsan','info:age'

可以看出age的覆盖,HBase获取的是最新的数据,以前的数据也是存在的,可通过版本获取。
更新操作

7.12获取版本数据

get 'student','zhangsan',{COLUMN=>'info:age',VERSIONS=>2}
get 'student','zhangsan',{COLUMN=>'info:age',VERSIONS=>3}

获取版本数据
根据时间戳获取版本数据
get 'student','zhangsan',{COLUMN=>'info:age',TIMESTAMP=>1480951906539}
根据时间戳获取

7.13删除一列数据delete 'student','zhangsan','info:age'

删除一列数据

7.14删除一行数据deleteall 'student','zhangsan'

删除一行数据

7.15清空表truncate 'student'

truncate表
清空表没有数据

7.16删除表

disable 'student'
drop 'student'

删除表

7.17退出quit

退出shell操作

8.停止HBase

stop-hbase.sh
停止hbase

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值