HBase入门-安装

2018-05-14 13:40:17 浏览数 (1)

HBase是建立在Hadoop文件系统之上的分布式面向列的数据库,它是横向扩展的。它利用了Hadoop的文件系统(HDFS)提供的容错能力。

HBase提供对数据的随机实时读/写访问,可以直接HBase存储HDFS数据。

准备

  • 安装JDK1.8
  • 下载 hbase-2.0.0-beta-1-bin.tar.gz 包,并解压到 /apps/目录下。
  • 修改 conf/hbase-env.sh 文件,设置 JAVA_HOME 变量
代码语言:javascript复制
export JAVA_HOME=/opt/jdk1.8.0_112

单机模式

单机运行模式提供了一种最简单运行方式来方便开发人员在单机模式下开发调试。使用起来也非常简单。

修改 conf/hbase-site.xml 文件

  • 使用 hbase.rootdir 参数来设置 hbase 保存数据的路径。这里使用 “file://” 表明是使用的本地目录。也可以使用 Hadoop 的 “hdfs://”来使用分布式文件系统。
  • 设置 zookeeper 数据保存路径。 完整文件内容如下:
代码语言:javascript复制
<configuration>
  <property>
    <name>hbase.rootdir</name>
    <value>file:///apps/hbase-2.0.0-beta-1/data/hbase</value>
  </property>
  <property>
    <name>hbase.zookeeper.property.dataDir</name>
    <value>/apps/hbase-2.0.0-beta-1/data/zookeeper</value>
  </property>
</configuration>

运行 hbase

使用下面的命令启动 hbase 集群

代码语言:javascript复制
$ bin/start-hbase.sh

启动完成后,可以访问下面的地址来查看集群的详细信息。

http://192.168.0.192:16010/

测试

HBase是一个面向列的数据库,在表中它由行组成。表模式只定义列族,也就是键值对。一个表有多个列族,每一个列族可以有任意数量的列。后续列的值连续地存储在磁盘上。表中的每个单元格值都具有时间戳。

  • 表是行的集合。
  • 行是列族的集合。
  • 列族是列的集合。
  • 列是键值对的集合。

集群启动后,我们可以使用hbase自带的shell来做一些数据库操作,如下:

代码语言:javascript复制
# 启动shell
$ bin/hbase shell

# 创建 user 表,其中包括两个列族 base 和 address。
# base列族用来保存用户基本信息,username和password
# address列族用来保存家庭和办公地址 
> create 'user', 'base', 'address'
Created table user
Took 2.9153 seconds 

# 查看 user 表
> list 'user'
TABLE
user
1 row(s)
Took 0.1178 seconds 

# 向 user 表写入数据
> put 'user', 'row1', 'base:username', 'user1'
> put 'user', 'row1', 'base:password', 'user1'
> put 'user', 'row1', 'address:home', 'user1 home'
> put 'user', 'row1', 'address:office', 'user1 office'

> put 'user', 'row2', 'base:username', 'user2'
> put 'user', 'row2', 'base:password', 'user2'
> put 'user', 'row2', 'address:home', 'user2 home'
> put 'user', 'row2', 'address:office', 'user2 office'

# 查询 user 表中的数据
> scan 'user'
ROW                                        COLUMN CELL
 row1                                      column=address:home, timestamp=1516586881667, value=user1 home
 row1                                      column=address:office, timestamp=1516586887852, value=user1 office
 row1                                      column=base:password, timestamp=1516586875823, value=user1
 row1                                      column=base:username, timestamp=1516586869321, value=user1
 row2                                      column=address:home, timestamp=1516586916024, value=user2 home
 row2                                      column=address:office, timestamp=1516586922659, value=user2 office
 row2                                      column=base:password, timestamp=1516586946567, value=user2
 row2                                      column=base:username, timestamp=1516586910234, value=user2

# 查询 user 表的一行数据
> get 'user', 'row1'
get 'user', 'row1'
COLUMN                                     CELL
 address:home                              timestamp=1516586881667, value=user1 home
 address:office                            timestamp=1516586887852, value=user1 office
 base:password                             timestamp=1516586875823, value=user1
 base:username                             timestamp=1516586869321, value=user1

# 删除 user 表的一行数据
> delete 'user', 'row2'

# 删除 user 表。需要先disable user表,然后才能删除。
> disable 'user'
> drop 'user'

停止 hbase 集群

代码语言:javascript复制
$ bin/stop-hbase.sh

伪分布式集群模式

这里为了简化没有使用Hadoop的HDFS,而是仍然使用本地存储。

修改 conf/hbase-site.xml 设置 hbase 为分布式集群模式

修改后的 conf/hbase-site.xml 文件内容如下:

代码语言:javascript复制
<configuration>
  <property>
    <name>hbase.rootdir</name>
    <value>file:///apps/hbase-2.0.0-beta-1/data/hbase</value>
  </property>
  <property>
    <name>hbase.zookeeper.property.dataDir</name>
    <value>/apps/hbase-2.0.0-beta-1/data/zookeeper</value>
  </property>
  <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
  </property>
</configuration>

启动 HBase 伪分布式集群的主 master

代码语言:javascript复制
$ bin/start-hbase.sh

启动 HBase 伪分布式集群的备份 master

这里使用 local-master-backup.sh 命令来启动备份master,其中

  • 主master使用 16010,16020和16030三个端口
  • 第二个备份 master使用16012, 16022和16032三个端口
  • 第三个个备份 master使用16013, 16023和16033三个端口
代码语言:javascript复制
$ bin/local-master-backup.sh start 2
$ bin/local-master-backup.sh start 3

启动 HBase 伪分布式集群的区域服务器

代码语言:javascript复制
$ bin/local-regionservers.sh start 2
$ bin/local-regionservers.sh start 3

测试

可以继续使用单机模式的例子来验证集群的正确性。

停止集群

代码语言:javascript复制
$ bin/local-regionservers.sh stop 2
$ bin/local-regionservers.sh stop 3

$ bin/local-master-backup.sh stop 2
$ bin/local-master-backup.sh stop 3

$ bin/stop-hbase.sh

分布式集群模式

这里准备了三台服务器bd1,bd2和bd3来演示 HBase 的分布式集群模式。其中:

  • bd1 作为主master
  • bd2 作为备份master
  • bd2,bd3 作为区域服务器

配置 SSH 免密码登陆

首先在其中一台机器上使用 ssh-keygen 工具来创建密钥,如下

代码语言:javascript复制
ssh-keygen -t rsa

使用 ssh-copy-id 命令自动在目标服务器上生成~/.ssh/authorized_keys文件

代码语言:javascript复制
ssh-copy-id -i ~/.ssh/id_rsa.pub <目标机器>

配置 conf/hbase-site.xml

代码语言:javascript复制
<configuration>
  <property>
    <name>hbase.rootdir</name>
    <value>file:///apps/hbase-2.0.0-beta-1/data/hbase</value>
  </property>
  <property>
    <name>hbase.zookeeper.property.dataDir</name>
    <value>/apps/hbase-2.0.0-beta-1/data/zookeeper</value>
  </property>
  <property>
    <name>hbase.zookeeper.quorum</name>
    <value>bd1,bd2,bd3</value>
  </property>
  <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
  </property>
</configuration>

创建 conf/backup-masters

定义备份master节点

代码语言:javascript复制
bd2

配置 conf/regionservers

定义区域服务器节点

代码语言:javascript复制
bd2
bd3

启动集群

代码语言:javascript复制
$ bin/start-hbase.sh

测试

可以继续使用单机模式的例子来验证集群的正确性。

停止集群

代码语言:javascript复制
$ bin/stop-hbase.sh

0 人点赞