HBase四种部署模式和基本操作

本文主要包括两部分的内容,第一部分主要包HBase的四种安装方法,分别是:① 单机版模式,② 伪集群模式,③ 使用HBase自带的zookeeper构建分布式集群,④ 使用独立安装的zookeeper构建分布式集群。第二部分通过HBase shell,展示HBase的基本操作,如创建表、插入记录、查询记录、删除记录等。

HBase的部署方式包括:

部署模式 说明
单机模式 单机版模式,常用于本地开发
伪集群模式 使用HBase自带的zookeeper
集群模式 使用HBase自带的zookeeper
集群模式 单独安装zookeeper

Ⅰ HBase的安装

本文的HBase安装是在Hadoop已经安装好的基础上实现的,所以之前要导出JAVA_HOME、HADOOP_HOME( 单机模式不需要,伪分布式模式和分布式模式需要)等环境变量以及配置好SSH互信等。

0 公共配置

导出HBase的环境变量

export HBASE_HOME=/root/software/hbase-1.2.1
export PATH=$PATH:$HBASE_HOME/bin

查看hbase版本 : hbase version

1 单机模式

配置hbase-env.sh

在hbase-env.sh添加如下内容

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export HBASE_MANAGES_ZK=true 

说明:其中HBASE_MANAGES_ZK=true,表示由hbase自己管理zookeeper,不需要单独的zookeeper,HBASE_MANAGES_ZK=false则表示使用独立部署的zookeeper。

配置hbase-site.xml

<configuration>
    <property>
        <name>hbase.rootdir</name>
        <value>file:///data/hbase</value>
    </property>
</configuration>

说明:hbase.rootdir,用于指定HBase数据的存储位置,因为如果不设置的话,hbase.rootdir默认为/tmp/hbase-${user.name},这意味着每次重启系统都会丢失数据。此配置中HBase直接使用默认的文件系统。

启动和停止

$HBASE_HOME/bin/start-hbase.sh
$HBASE_HOME/bin/stop-hbase.sh

2 伪集群模式

配置hbase-env.sh

在hbase-env.sh添加如下内容

export JAVA_HOME=$JAVA_HOME
export HBASE_CLASSPATH=$HADOOP_HOME/etc/hadoop
export HBASE_MANAGES_ZK=true 
  • HBASE_MANAGES_ZK=true,表示由hbase自己管理zookeeper,不需要单独的部署zookeeper。
  • export HBASE_CLASSPATH="", 表示使用hdfs作为HBase的储存。

配置hbase-site.xml

<configuration>
    <property>
        <name>hbase.rootdir</name>
        <value>hdfs://master:8020/hbase</value>
    </property>
    <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>
</configuration>

说明:

  • base.rootdir,用于指定HBase数据的存储位置,此时已经使用了hdfs。
  • hbase.cluster.distributed设置集群处于分布式模式;

启动和停止

启动(包括启动hdfs和hbase)

$HBASE_HOME/sbin/start-dfs.sh
$HBASE_HOME/bin/start-hbase.sh

停止(包括停止hbase和hdfs)

$HBASE_HOME/bin/stop-hbase.sh
$HBASE_HOME/sbin/stop-dfs.sh

3 集群模式(使用hbase自带的zookeeper)

配置hbase-env.sh

在hbase-env.sh添加如下内容

export JAVA_HOME=$JAVA_HOME
export HBASE_CLASSPATH=$HADOOP_HOME/etc/hadoop
export HBASE_MANAGES_ZK=true
  • HBASE_MANAGES_ZK=true,表示使用hbase自带的zookeeper。

配置hbase-site.xml

<configuration>
    <property>
        <name>hbase.rootdir</name>
        <value>hdfs://master:8020/hbase</value>
    </property>
    <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>
    <property>
        <name>hbase.master</name>
        <value>master:6000</value>
    </property>
    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>slave1:2181,slave2:2181,slave3:2181</value>
    </property>
    <property>
        <name>zookeeper.znode.parent</name>
        <value>/hbase</value>
    </property>
    <property>
        <name>hbase.zookeeper.property</name>
        <value>/data/zookeeper/data</value>
    </property>
</configuration>

说明:

  • base.rootdir 用于指定HBase数据的存储位置;
  • hbase.cluster.distributed 设置集群处于分布式模式;
  • hbase.master 指定hbase的hmaster的主机名和端口 ;
  • hbase.zookeeper.quorum 指定使用zookeeper的主机地址,必须是奇数个;
  • hbase.zookeeper.property 指定zookeeper数据存储目录,默认路径是/tmp,如果不配置,重启之后数据将被清空。

配置regionservers

在regionservers文件中添加HBase的slave节点,类似hadoop中的slaves,一行一个。

slave1
slave2
slave3

启动和停止

启动(包括启动hdfs和hbase)

$HBASE_HOME/sbin/start-dfs.sh
$HBASE_HOME/bin/start-hbase.sh

停止(包括停止hbase和hdfs)

$HBASE_HOME/bin/stop-hbase.sh
$HBASE_HOME/sbin/stop-dfs.sh

HBase启动成功之后:

  • master节点上的进程有:HMaster
  • slave节点上的进程有:HRegionServer、HQuorumPerr

4 集群模式(单独安装zookeeper)

安装zookeeper

zookeeper的下载和解压这里不赘述,直接开始zookeeper集群的配置。
首先,导出zookeeper环境编辑,添加如下内容到~/.bash_profile中

export ZOOKEEPER_HOME=/root/software/zookeeper-3.4.10
export PATH=$PATH:$ZOOKEEPER_HOME/bin

解压zookeeper之后,进入conf目录,拷贝生成zoo.cfg

cp zoo_sample.cfg zoo.cfg

配置zoo.cfg。在zoo.cfg中添加如下内容

clientPort=2181
dataDir=/data/zookeeper/zk_data
server.1=master:2888:3888
server.2=slave2:2888:3888
server.3=slave3:2888:3888

说明::第一个端口是master和slave之间的通信端口,默认是2888,第二个端口是leader选举的端口,集群刚启动的时候选举或者leader挂掉之后进行新的选举的端口默认是3888。

分发解压的zookeeper到slave2、slave3

scp -r /root/software/zookeeper-3.4.10 slave2:/root/software/zookeeper-3.4.10
scp -r /root/software/zookeeper-3.4.10 slave3:/root/software/zookeeper-3.4.10

创建数据目录

ssh root@master 'mkdir -p /data/zookeeper/zk_data'
ssh root@slave2 'mkdir -p /data/zookeeper/zk_data'
ssh root@slave3 'mkdir -p /data/zookeeper/zk_data'

写入myid

ssh root@master  'echo 1 > /data/zookeeper/zk_data/myid'
ssh root@slave2  'echo 2 > /data/zookeeper/zk_data/myid'
ssh root@slave3  'echo 3 > /data/zookeeper/zk_data/myid'

注意:本文部署的zookeeper集群包含三个节点,分别是master、slave1、slave2。写入myid的值要和zoo.cfg中server后数值对应

启动、停止、查看zookeeper状态

ssh root@master   '/root/software/zookeeper-3.4.10/bin/zkServer.sh start'
ssh root@slave2   '/root/software/zookeeper-3.4.10/bin/zkServer.sh start'
ssh root@slave3   '/root/software/zookeeper-3.4.10/bin/zkServer.sh start'

ssh root@master   '/root/software/zookeeper-3.4.10/bin/zkServer.sh status'
ssh root@slave2   '/root/software/zookeeper-3.4.10/bin/zkServer.sh status'
ssh root@slave3  '/root/software/zookeeper-3.4.10/bin/zkServer.sh status'

ssh root@master   '/root/software/zookeeper-3.4.10/bin/zkServer.sh stop'
ssh root@slave2   '/root/software/zookeeper-3.4.10/bin/zkServer.sh stop'
ssh root@slave3   '/root/software/zookeeper-3.4.10/bin/zkServer.sh stop'

配置hbase-env.sh

export JAVA_HOME=$JAVA_HOME
export HBASE_CLASSPATH=$HADOOP_HOME/etc/hadoop
export HBASE_MANAGES_ZK=false 

其中HBASE_MANAGES_ZK=false,表示不使用hbase自带的zookeeper,而使用独立部署的zookeeper。

配置hbase-site.xml

<configuration>
    <property>
        <name>hbase.rootdir</name>
        <value>hdfs://master:8020/hbase</value>
    </property>
    <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>
    <property>
        <name>hbase.master</name>
        <value>master:6000</value>
    </property>
    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>slave1:2181,slave2:2181,slave3:2181</value>
    </property>
    <property>
        <name>zookeeper.znode.parent</name>
        <value>/hbase</value>
    </property>
    <property>
        <name>hbase.zookeeper.property</name>
        <value>/data/zookeeper/data</value>
    </property>
</configuration>

说明:

  • base.rootdir 用于指定HBase数据的存储位置;
  • hbase.cluster.distributed 设置集群处于分布式模式;
  • hbase.master 指定hbase的hmaster的主机名和端口 ;
  • hbase.zookeeper.quorum 指定使用zookeeper的主机地址,必须是奇数个;
  • hbase.zookeeper.property 指定zookeeper数据存储目录,默认路径是/tmp,如果不配置,重启之后数据将被清空。

配置regionservers

在regionservers文件中添加HBase的slave节点,类似hadoop中的slaves,一行一个。

slave1
slave2
slave3

启动和停止

先启动zookeeper,参考上述“启动、停止、查看zookeeper状态”。

启动(包括启动hdfs和hbase)

$HBASE_HOME/sbin/start-dfs.sh
$HBASE_HOME/bin/start-hbase.sh

停止(包括停止hbase和hdfs)

$HBASE_HOME/bin/stop-hbase.sh
$HBASE_HOME/sbin/stop-dfs.sh

HBase启动成功之后:

  • master节点上的进程有:HMaster、QuorumPeerMain
  • slave节点上的进程有:HRegionServer、QuorumPeerMain

说明:hbase的master节点和slave节点中都出现了QuorumPeerMain(就是zookeeper进程)而不是QuorumPeer进程,表示此时hbase使用的是独立的zookeeper。

Ⅱ HBase的操作

下面的操作主要是在hbase的shell中操作的,进入hbase shell

hbase shell

创建表

create 'student','Sname','Ssex','Sage','Sdept','course'
create 'teacher',{NAME=>'username',VERSIONS=>5} // 创建表示指定保存的版本数

查看表详情

describe 'student'

显示所有的表

list

插入数据

put 'student','95001','Sname','LiYing'
put 'student','95001','Ssex','Male'
put 'student','95001','course:math','80'
put 'student','95001','course:english','90'

put 'student','95002','Sname','ZhangYiDa'
put 'student','95002','Ssex','Femal'
put 'student','95002','course:math','90'
put 'student','95002','course:english','70'

注意:一次只能为一个表的一行数据的一个列,也就是一个单元格添加一个数据,所以直接用shell命令插入数据效率很低,在实际应用中,一般都是利用编程操作数据。当运行命令:put ‘student’,’95001’,’Sname’,’LiYing’时,即为student表添加了学号为95001,名字为LiYing的一行数据,其行键为95001。

查询数据

HBase中有两个用于查看数据的命令:
① get命令,用于查看表的某一行数据;
② scan命令用于查看某个表的全部数据

get 'student','95001'
get 'student','95001','course'
get 'student','95001','course:math'

scan 'student'

删除数据

在HBase中用delete以及deleteall命令进行删除数据操作,它们的区别是:
① delete用于删除一个数据,是put的反向操作;
② deleteall操作用于删除一行数据。

delete 'student','95001','Ssex'
deleteall 'student','95001'

修改数据

在添加数据时,HBase会自动为添加的数据添加一个时间戳,故在需要修改数据时,只需直接添加数据,HBase即会生成一个新的版本,从而完成“改”操作,旧的版本依旧保留,系统会定时回收垃圾数据,只留下最新的几个版本,保存的版本数可以在创建表的时候指定。下面是一个操作的例子:

hbase(main):034:0> get 'student','95001'
COLUMN                             CELL                                                                                               
 Sname:                            timestamp=1537497681798, value=LiYing                                                              
 Ssex:                             timestamp=1537497682400, value=Male                                                                
 course:english                    timestamp=1537497872225, value=90                                                                  
 course:math                       timestamp=1537497681859, value=80                                                                  
4 row(s) in 0.0310 seconds

hbase(main):035:0> put 'student','95001','course:english','100'
0 row(s) in 0.0130 seconds

hbase(main):036:0> get 'student','95001'
COLUMN                             CELL                                                                                               
 Sname:                            timestamp=1537497681798, value=LiYing                                                              
 Ssex:                             timestamp=1537497682400, value=Male                                                                
 course:english                    timestamp=1537498062541, value=100                                                                 
 course:math                       timestamp=1537497681859, value=80                                                                  
4 row(s) in 0.0130 seconds

删除表

删除表有两步,第一步先让该表不可用,第二步删除表。直接drop未disable的表会失败。

disable 'student'
drop 'student'

查询历史的表

create 'teacher',{NAME=>'username',VERSIONS=>5}

put 'teacher','91001','username','Mary'
put 'teacher','91001','username','Mary1'
put 'teacher','91001','username','Mary2'
put 'teacher','91001','username','Mary3'
put 'teacher','91001','username','Mary4'  
put 'teacher','91001','username','Mary5'

get 'teacher','91001',{COLUMN=>'username',VERSIONS=>5}

hbase(main):064:0> get 'teacher','91001',{COLUMN=>'username',VERSIONS=>5}
COLUMN                             CELL                                                                                               
 username:                         timestamp=1537498459746, value=Mary5                                                               
 username:                         timestamp=1537498455244, value=Mary4                                                               
 username:                         timestamp=1537498455193, value=Mary3                                                               
 username:                         timestamp=1537498455174, value=Mary2                                                               
 username:                         timestamp=1537498455149, value=Mary1                                                               
5 row(s) in 0.0110 seconds

退出hbase

exit

参考

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,047评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,807评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,501评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,839评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,951评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,117评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,188评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,929评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,372评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,679评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,837评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,536评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,168评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,886评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,129评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,665评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,739评论 2 351

推荐阅读更多精彩内容

  • 入门指南 1. 简介 Quickstart会让你启动和运行一个单节点单机HBase。 2. 快速启动 – 单点HB...
    和心数据阅读 4,524评论 1 41
  • 简介 HBase是高可靠性,高性能,面向列,可伸缩的分布式存储系统,利用HBase技术可在廉价PC Serve...
    九世的猫阅读 2,180评论 1 6
  • 前言 在本节中,你将首先学习单节点、独立的HBase的设置,并且学会运行单节点、独立的HBase实例! 在一个独立...
    步闲阅读 1,861评论 1 3
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,642评论 18 139
  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 31,915评论 2 89