您的位置:首页 > 其它

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

2016-12-04 21:50 435 查看
HBase伪分布式环境搭建及命令行使用

HBase简介

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

HBase的数据模型

2.1 表(table),是存储管理数据的。

2.2 行键(row key),类似于MySQL中的主键。

行键是HBase表天然自带的,Table中的记录按照Row Key排序。

2.3 列簇(column family),列的集合。

HBase中列簇是需要在定义表时指定的,列是在插入记录时动态增加的。

HBase表中的数据,每个列簇单独一个文件。

2.4 时间戳(timestamp),列(也称作标签、修饰符)的一个属性。

行键和列确定的单元格,可以存储多个数据,每个数据含有时间戳属性,数据具有版本特性。

如果不指定时间戳或者版本,默认取最新的数据。

2.5 存储的数据都是字节数组。

2.6 表中的数据是按照行键的顺序物理存储的。

HBase的物理模型

3.1 HBase是适合海量数据(如20PB)的秒级简单查询的数据库。

3.2 HBase表中的记录,按照行键进行拆分, 拆分成一个个的region。

许多个region存储在region server(单独的物理机器)中的,这样,对表的操作转化为对多台region server的并行查询。

HBase的架构体系

4.1 Client

包含访问HBase的接口,Client维护着一些cache 来加快对HBase的访问,比如region的位置信息

4.2 ZooKeeper

①保证任何时候,集群中只有一个running master

②存贮所有Region的寻址入口

③实时监控Region Server的状态,将Region Server的上线和下线信息,实时通知给Master

④存储Hbase 的schema,包括有哪些table,每个table 有哪些column family

4.3 Master

①可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master运行

②为Region Server分配region

③负责Region Server 的负载均衡

④发现失效的Region Server并重新分配其上的region

4.4 Region Server

①维护Master分配给它的region,处理对这些region的IO请求

②负责切分在运行过程中变得过大的region

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

HBase的基础知识

HBase中有两张特殊的Table,
-ROOT-
.META.


.META.
:记录了用户表的Region信息,
.META.
可以有多个regoin

-ROOT-
:记录了
.META.
表的Region信息,
-ROOT-
只有一个region

ZooKeeper中记录了
-ROOT-
表的location

Client访问用户数据之前需要首先访问ZooKeeper,然后访问
-ROOT-
表,接着访问
.META.
表,最后才能找到用户数据的位置去访问。


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


source /etc/profile
使配置立即生效。

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

hbase version




6.4 修改hbase-env.sh文件

修改${HBASE_HOME}/conf/hbase-env.sh文件

①修改设置JAVA_HOME
export 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



使用
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。



此时进入到ZooKeeper的命令行Shell,
ls /
查看到ZooKeeper多出来一个节点hbase



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

HBase的Shell操作

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



名称命令表达式
创建表
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'




表student,有三个列簇stu_id,address,info

7.2 列出全部表
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 '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'






7.16 删除表

disable 'student'
drop 'student'




7.17 退出
quit




停止HBase

stop-hbase.sh


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: