0%

HBase部署启动

HBase 部署全指南:单机测试 vs 集群生产,照着配就能跑

使用的版本为2.2.7

HBase 的部署分两种模式:

  • 单机模式:一台机器,用来学习、测试、验证功能
  • 集群模式:多台机器,生产环境跑数据

两种模式的配置文件几乎一样,区别只在几个关键参数——hbase.cluster.distributed 设 true 还是 false、hbase.rootdir 指本地还是 HDFS、ZK 用内置还是外置。

单机模式:一台机器跑起来

适合开发测试,配置最简单。

前提条件:

  • JDK 8+,JAVA_HOME 配好
  • 如果用 HDFS 存数据,Hadoop 要先启动(也可以用本地文件系统,不用 Hadoop)

配置文件(conf/hbase-env.sh):

1
2
3
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk
# 关掉内置 ZooKeeper(用独立 ZK)
export HBASE_MANAGES_ZK=false

配置文件(conf/hbase-site.xml):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<configuration>
<!-- 数据存哪:可以是 HDFS,也可以是本地文件系统 -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://localhost:9000/hbase</value>
<!-- 如果用本地文件系统:file:///opt/hbase/data -->
</property>

<!-- ZooKeeper 数据目录 -->
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/opt/hbase/zkData</value>
</property>

<!-- 单机模式 -->
<property>
<name>hbase.cluster.distributed</name>
<value>false</value>
</property>
</configuration>

启动顺序:

1
2
3
4
5
6
7
8
9
# 如果用 HDFS,先起 Hadoop
start-dfs.sh

# 再起 HBase
bin/start-hbase.sh

# 检查进程
jps
# 应该看到:HMaster 和 HRegionServer(单机模式下两个进程都在一台机器)

验证:

  • Web UI:http://localhost:16010
  • Shell:bin/hbase shell,执行 status 看集群状态

集群模式:多台机器,生产环境

服务器规划示例(3 台):

节点 HBase 角色 ZK 角色 HDFS 角色
node1 HMaster ZK NameNode
node2 RegionServer ZK DataNode
node3 RegionServer ZK DataNode

前提条件:

  • 所有节点 JDK 版本一致
  • ZooKeeper 集群已部署(3 或 5 台)
  • HDFS 集群已部署

配置文件(conf/hbase-env.sh):

1
2
3
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk
export HBASE_MANAGES_ZK=false # 用外置 ZK 集群
export HBASE_CLASSPATH=/opt/hadoop/etc/hadoop # Hadoop 配置路径

配置文件(conf/hbase-site.xml):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<configuration>
<!-- 数据存 HDFS -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://node1:9000/hbase</value>
</property>

<!-- ZK 集群地址 -->
<property>
<name>hbase.zookeeper.quorum</name>
<value>node1:2181,node2:2181,node3:2181</value>
</property>

<!-- ZooKeeper 数据目录 -->
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/data/zookeeper</value> <!-- 所有节点路径需一致 -->
</property>

<!-- 集群模式标识 -->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>

<!-- HBase 监听地址(可选) -->
<property>
<name>hbase.master.hostname</name>
<value>node1</value> <!-- 主 Master 节点主机名 -->
</property>

<!-- 备份 Master 节点(可选,多个备份 Master 需新增此配置) -->
<property>
<name>hbase.master.backup.masters</name>
<value>backup1:16000,backup2:16000</value> <!-- 备份 Master 节点及端口 -->
</property>
</configuration>

conf/regionservers 文件: 列出所有 RegionServer 节点

1
2
node2
node3

分发配置:

1
2
scp -r /opt/hbase node2:/opt/
scp -r /opt/hbase node3:/opt/

启动顺序:

1
2
3
4
5
6
7
8
9
10
11
12
# 1. 起 ZK(所有 ZK 节点)
zkServer.sh start

# 2. 起 HDFS(NameNode 节点)
start-dfs.sh

# 3. 起 HBase(Master 节点)
bin/start-hbase.sh

# 4. 检查进程(jps)
# node1:HMaster
# node2/node3:HRegionServer

验证:

  • Web UI:http://node1:16010
  • Shell:bin/hbase shellstatus 看 RegionServer 数量

tips: ZooKeeper 用内置还是外置?

1
2
3
4
5
# 内置 ZK:设成 true
export HBASE_MANAGES_ZK=true

# 外置 ZK:设成 false,并在 hbase-site.xml 里配置 hbase.zookeeper.quorum
export HBASE_MANAGES_ZK=false

生产环境用外置 ZK 集群,不要用内置。

关闭集群

关闭顺序跟启动反过来:

1
2
3
4
5
6
7
8
# 1. 停 HBase
bin/stop-hbase.sh

# 2. 停 HDFS
stop-dfs.sh

# 3. 停 ZK
zkServer.sh stop

常见问题

1. HBase 起不来,端口被占用

默认端口:16000(Master RPC)、16010(Master Web)、16020(RegionServer RPC)、16030(RegionServer Web)

改端口:

1
2
3
4
<property>  
<name>hbase.master.port</name>
<value>16001</value> <!-- 修改为未被占用的端口 -->
</property>

2. RegionServer 连不上 Master

检查:

  • 防火墙是否开放端口(16000-16030)
  • /etc/hosts 主机名解析是否正确
  • hbase.rootdir 指向的 HDFS 是否可访问

3. ZK 连接失败

1
2024-xx-xx xx:xx:xx,xxx WARN [main] zookeeper.ZooKeeper: Session 0x0 for server null, unexpected error

确认 ZK 集群是否启动、hbase.zookeeper.quorum 配置是否正确、ZK 端口是否开放。

4. HBase 起不来,日志里有 NoClassDefFoundError

检查 HBASE_CLASSPATH 是否指向了 Hadoop 配置目录,HBase 需要 Hadoop 的配置文件来定位 HDFS。

欢迎关注我的其它发布渠道