HBase有三种部署方式,分别为单机模式、伪集群模式、集群模式。
其中单机模式比较简单,自行查找;伪集群模式和集群模式基本一样,区别就是前者都在一台电脑上,后者在不同的电脑上。
下面以生产环境一般用的集群方式部署为例说明,按最小要求3台节点来介绍集群部署方式。本样例是在3台虚拟机下部署的,每个节点安装Centos7核心版(不带GUI)
3台机器分别规划如下:
hdp1:10.10.10.110
hdp2:10.10.10.112
hdp3:10.10.10.113
下面从如下几个方面介绍下其部署及应用:
相关配置
安装
固定配置
分发程序
启动
查看状态
基本操作
相关配置
挂载windows目录、 IP配置、hosts名称配置、关闭防火墙、SSH配置, 需要3台电脑网络互通且能相互SSH登录,
具体操作参见:
Linux系列——挂载Windows虚拟文件夹到Linux系统
Linux系列——配置SSH免密登录
Linux系列——常规基础操作
安装
先在其中任意一台上面安装。
1、需要先搭建好Zookeeper集群
具体参见:大数据系列——ZooKeeper部署及应用
2、需要先搭建好Hadoop集群
具体参见:大数据系列——Hadoop部署及应用
3、下载HBase,直接解压就可以用。例如:hbase-2.3.5.tar.gz
下载地址
https://archive.apache.org/dist/hbase/
4、解压到目标目录
#从挂载目录将安装文件拷贝到目标路径
$cp /mnt/hdfs/vf/hbaseSetup/hbasep-2.3.5.tar/usr/proc/hbase
$ cd /usr/proc/hbase 这里切换到安装目录(每台机器都要新建该目录,配好一台后后面两台直接用scp命令分发,具体路径可以自定义,推荐放在/usr下)
$ tar -zxvf hbase-2.3.5.tar (解压后记着删除压缩文件)
4、同步时间
具体参见:Linux系列——常规基础操作
固定配置
1、修改hbase-env.sh,位于解压目录hbase-2.3.5下
修改下面几个关键配置:
export JAVA_HOME=/usr/local/src/jdk1.8.0_181/
export HBASE_LOG_DIR=/mydata/logs/hbase
export HBASE_PID_DIR=/mydata/data/pid
#关闭内置的Zookeeper
export HBASE_MANAGES_ZK=false
2、修改habse-site.xml,位于解压目录hbase-2.3.5/conf下
<property>
<name>hbase.rootdir</name>
<value>hdfs://cluster007/hbase</value>
<description> hbase.rootdir是RegionServer的共享目录,用来持久化存储HBase数据的,默认是写到/tmp的,如果不修改此配置,在HBase重启时,数据会丢失。此处一般设置的是hdfs的文件目录,比如NameNode运行在namenode.Example.org主机的9090端口,则需要设置为 hdfs://namenode.example.org:9000/hbase
</description>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
<description>此项用来配置HBase的部署模式,false表示单机,true表示完全分布式模式或者伪分布式模式。
</description>
</property>
<property>
<!-- 设置本地临时目录路径 -->
<name>hbase.tmp.dir</name>
<value>/usr/proc/hbase/hbase235/tmpdata</value>
</property>
<property>
<!-- 允许节点时间偏差值 -->
<name>hbase.master.maxclockskew</name>
<value>180000</value>
</property>
<property>
<!-- 定义regionserver上用于等待响应用户表级请求的线程数,可配大点 -->
<name>hbase.regionserver.handler.count</name>
<value>12</value>
</property>
<property>
<!-- 这里因为要HMaster的HA,不需要指定域名 -->
<name>hbase.master</name>
<value>60000</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/usr/proc/hbase/hbase235/zkdata</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>hdp1,hdp2,hdp3</value>
</property>
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
3、拷贝core-site.xml和hdfs-site.xml
HBase没有识别cluster007这个集群,解决这个问题的方法是把Hadoop的2个配置文件(core-site.xml和hdfs-site.xml),
放到HBase的conf目录下,让HBase能找到Hadoop的配置
4、修改regionservers(加入所有机器名称,每个一行),位于解压目录hbase-2.3.5/conf下,本集群包括下面三个节点
hdp1
hdp2
hdp3
5、修改backup-masters文件(若没有则新增,加入备份主节点),位于解压目录hbase-2.3.5/conf下,本集群以hdp2为备份Master
hdp2
分发程序(有点慢约,等待完成停止不动后,回车)
scp -r /usr/proc/hbase root@hdp2:/usr/proc/hbase 分发到hdp2
scp -r /usr/proc/hbase root@hdp3:/usr/proc/hbase 分发到hdp3
启动
1、分别启动3台机器上的ZooKeeper进程
$ cd /usr/proc/zk/apache-zookeeper-3.5.9-bin/ 切换到进程目录
$ ./zkServer.sh start
2、分别启动3台机器上的Journalnode进程,(注意进程路径是sbin)
$ cd /usr/proc/hadoop/hadoop-3.3.1/sbin 切换到进程目录
$ ./hadoop-daemon.sh start journalnode
3、启动HDFS (所有namenode和datanode都会启动,注意进程路径是sbin)
$ cd /usr/proc/hadoop/hadoop-3.3.1/sbin 切换到进程目录
$ ./start-dfs.sh
4、启动Yarn(所有RM和NodeM都会启动,注意进程路径是sbin)
$ cd /usr/proc/hadoop/hadoop-3.3.1/sbin 切换到进程目录
$ ./start-yarn.sh
5、启动HBase(所有节点都会启动,都启动后会竞选主节点)
$ cd /usr/proc/hbase/hbase-2.3.5/sbin 切换到进程目录
$ ./start-hbase.sh
查看状态
1、Zookeeper状态:
在3台机器都正确启动ZooKeeper进程后,进行查看状态,
$ cd /usr/proc/zk/apache-zookeeper-3.5.9-bin/ 切换到进程目录
$ ./zkServer.sh status
3台机器的状态,其中有一台是:leader,另外2台是:follower
2、执行JPS查看各进程状态
hdp1:
NameNode
DataNode
Journalnode
ZKFC
ResourceManager(Active)
HMaster(Active)
HRegionServer
hdp2:
SecondaryNameNode
DataNode
Journalnode
ZKFC
NodeManager
HMaster(Standby)
HRegionServer
hdp3:
ResourceManager(Standby)
DataNode
Journalnode
NodeManager
HRegionServer
3、查看Web UI
Master后台:
RegionServer后台:
基本操作
#进入 shell
hbase shell
#查看帮助
help
#查询 HBase 服务器状态
status
#查询 HBase 版本
version
#创建表
create 'tab1','cf1','cf2','cf3'
create 'tab2',{NAME=>'username',VERSIONS=>5} // 创建表示指定保存的版本数
#查看表详情
describe 'tab1'
#显示所有的表
list
#查看表是否存在
exists ‘tab1’
#判断表是否为‘enable’
is_enabled ‘tab1’
#查询表中有多少行
count ‘tab1’
#将整个表清空
truncate ‘tab1’
#删除表,有两步,第一步先让该表不可用,第二步删除表。直接drop未disable的表会失败。
disable 'tab1'
drop 'tab1'
#给列族添加列;修改版本数
alter ‘tab1’, {NAME => ‘cf4’, VERSIONS => 3}
alter ‘tab1’,{NAME => ‘cf4’, VERSIONS => 6}
#删除一个列族, 注意删除前,需要先把表 disable,操作后再启用 enable
disable ‘tab1’
alter ‘tab1’, {NAME=>’cf1’, METHOD=>’delete’}
enable ‘tab1’
#删除一个列族的某个列,注意删除前,需要先把表 disable,操作后再启用 enable
disable ‘tab1’
alter ‘tab1’, {NAME=>’cf1.col1’, METHOD=>’delete’}
enable ‘tab1’
#插入数据,例如 put ‘t1′, ‘r1′, ‘c1′, ‘value’, ts1; t1指表名,r1指行键名,c1指列名,value指单元格值。ts1指时间戳,一般都省略掉了。
put 'tab1','xxid','cf1.col1','xxvalue'
#查询数据,get命令,用于查看表的某一行数据
get 'tab1','xxid'
get 'tab1','xxid','cf1'
get 'tab1','xxid','cf1.col1'
get 'tab1','xxid',{COLUMN=>'cf1.col1',VERSIONS=>5}
#查询数据,scan命令,用于查看表的全部数据
scan 'tab1'
scan 'tab1',{STARTROW => '1001', STOPROW => '1001'}
scan 'tab1',{STARTROW => '1001'}
#删除数据,delete命令,用于删除一行中的一个数据
delete 'tab1','xxid','cf.col1'
#删除数据,deleteall命令,用于删除一个数据
deletealll 'tab1'
#退出 shell
exit