Hbase底层仍然依赖HDFS来作为其物理存储,并且还需要Zookeeper协助提供部分配置服务,包括维护元信息和命名空间

环境准备

Hadoop集群:3.3.4
Zookeeper集群:3.8.1
Hbase: hbase-3.0.0-alpha-3

安装Hbase

Hbase官网下载好安装包

1
tar -zxvf hbase-3.0.0-alpha-3-bin.tar.gz -C /mysoft/

配置环境变量

配置hbase路径

vi /etc/profile
1
2
3
#Hbase enviroment variables
export HBASE_HOME=/mysoft/hbase-3.0.0-alpha-3
export PATH=$PATH:$HBASE_HOME/bin

使环境变量生效
1
source /etc/profile

单机(独立)模式

默认模式,HBase不使用HDFS,它使用本地文件系统,他在同一个JVM中运行所有HBase守护进程和本地Zookeeper。Zookeeper绑定到一个众所周知的端口。

配置hbase-env.sh文件

编辑hbase/conf下hbase-env.sh,设置JAVA_HOME

vi hbase-env.sh
1
export JAVA_HOME=/usr/local/jdk1.8.0_341/

配置hbase-site.xml文件

编辑hbase/conf下hbase-site.xml中,仅需要指定hbase和Zookeeper写数据的本地路径,默认在/tmp下创建新的目录。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<configuration>
<property>
<name>hbase.rootdir</name>
<value>file:///root/data/hbase/data</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/root/data/hbase/zookeeper</value>
</property>
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
</configuration>

单机(独立)模式启动

启动:start-hbase.sh
关闭:stop-hbase.sh

jps查看进程

jps查看

使用hsq01:16010在web界面查看

web查看

伪分布式模式

伪分布式模式只是单个主机上运行的完全分布式模式。在HBASE上使用此配置测试源和原型设计。请勿将此配置用于生产。

配置hbase-site.xml文件

1
2
3
4
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>

更改hbase.rootdir

1
2
3
4
<property>
<name>hbase.rootdir</name>
<value>hdfs://hsq01:9000/data/hbase/data</value>
</property>

应与Hadoop集群中fs.defaultFS中的配置一致,否则没有HMaster,关闭时出现no hbase master found

指定zookeeper写的目录

1
2
3
4
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/root/data/hbase/zookeeper1/</value>
</property>

注意:由于HBase要使用HDFS的客户端,HDFS客户端的配置必须让hbase看到并使用。有三种方式做到这一点:

  1. 在hbase-env.sh中,将HADOOP_CONF_DIR添加到HBASE_CLASSPATH环境变量中,HADOOP_CONF_DIR指向HADOOP的etc/hadoop目录。
  2. 拷贝hdfs-site.xml到HBASE_HOME/conf,当然,最好是做一个符号链接。
  3. 如果HDFS客户端配置很少,可以直接添加到hbase-site.xml中。

伪分布式模式启动

启动

  • 开启Hadoop集群start-all.sh
  • start-hbase.sh

jps查看进程

jps查看

使用hsq01:9870hsq01:16010在web界面查看

web下查看hbase.rootdir
web下查看hbase

完全分布式搭建

配置hbase-env.sh文件

设置使用外部zookeeper
1
HABSE_MANAGES_ZK=false

配置hbase-site.xml文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.rootdir</name>
<value>hdfs://hsq01:9000/data/hbase/data1</value>
</property>
<property>
<!-- 默认端口号可以不写,也可以添加:node2:2181,node3:2181,node4:2181 -->
<name>hbase.zookeeper.quorum</name>
<value>hsq01:2181,hsq02:2181,hsq03:2181</value>
</property>
<property>
<!-- 可以不配置 -->
<name>hbase.zookeeper.property.dataDir</name>
<value>/root/data/hbase/zookeeper2/</value>#zookeeper配置时存放数据的路径
</property>

启动Hbase后当web界面只有一个节点启动,添加下面的配置一般可以解决

1
2
3
4
5
<!--hbase 结点之间时间不一致造成regionserver启动失败 ,增大容忍度-->
<property>
<name>hbase.master.maxclockskew</name>
<value>100000000</value>
</property>

拷贝hdfs.site.xmlcore.site.xml

因为hbase需要读取Hadoop的hdfs.site.xmlcore.site.xml当中的文件信息,所以需要进行此操作,使用软连接亦可

1
2
cp $HADOOP_HOME/etc/hadoop/hdfs-site.xml $HBASE_HOME/conf/hdfs-site.xml
cp $HADOOP_HOME/etc/hadoop/core-site.xml $HBASE_HOME/conf/core-site.xml

配置regionserver文件

1
2
3
cd $HBASE_HOME
cd conf
vi regionservers

输入要运行regionserver的主机名

1
2
3
hsq01
hsq02
hsq03

配置backup-masters文件

HBase 支持运行多个 master 节点,因此不会出现单点故障的问题,但只能有一个活动的管理节点(active master),其余为备用节点(backup master),一般设置一个备用节点即可

vi backup-masters
1
hsq02

将hbase目录以及hbase环境分发到其他主机

1
2
3
4
5
scp -r /mysoft/hbase-3.0.0-alpha-3/ hsq02:/mysoft/
scp -r /mysoft/hbase-3.0.0-alpha-3/ hsq03:/mysoft/

scp /etc/profile hsq02:/etc/profile
scp /etc/profile hsq03:/etc/profile

完全分布式模式启动

启动

  • 开启Hadoop集群start-all.sh
  • 开启zookeeper集群zkServer.sh start
  • start-hbase.sh

jps查看进程

使用hsq01:9870hsq01:16010在web界面查看

web下查看hbase.rootdirs
web界面查看hbase

搭建过程中遇到的问题

Class path contains multiple SLF4J bindings.

原因:无效变量名
错误:找不到或无法加载主类,可能是Hadoop和Hbase包冲突所致或者 Hadoop 中的配置文件与 Hbase 不兼容。
解决方法: Hbase 自带是有 Hadoop 中的依赖文件的,我们让 Hbase 不使用本地 Hadoop 中的文件,使用自带的配置文件即可。
这时只需要将配置文件hbase-env.sh中最后一行的该代码export HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP=“true”前面的#删掉即可。

vi hbase-env.sh
1
export HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP="true"

stop-hbase.sh关闭不了

1
2
hbase-daemon.sh stop master
stop-hbase.sh