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):
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk
关掉内置 ZooKeeper(用独立 ZK)
export HBASE_MANAGES_ZK=false
配置文件(conf/hbase-site.xml):
<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>
启动顺序:
如果用 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):
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):
<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 节点
node2
node3
分发配置:
scp -r /opt/hbase node2:/opt/
scp -r /opt/hbase node3:/opt/
启动顺序:
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 shell,status看 RegionServer 数量
tips: ZooKeeper 用内置还是外置?
内置 ZK:设成 true
export HBASE_MANAGES_ZK=true
外置 ZK:设成 false,并在 hbase-site.xml 里配置 hbase.zookeeper.quorum
export HBASE_MANAGES_ZK=false
生产环境用外置 ZK 集群,不要用内置。
关闭集群
关闭顺序跟启动反过来:
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)
改端口:
<property>
<name>hbase.master.port</name>
<value>16001</value> <!-- 修改为未被占用的端口 -->
</property>
2. RegionServer 连不上 Master
检查:
- 防火墙是否开放端口(16000-16030)
/etc/hosts主机名解析是否正确hbase.rootdir指向的 HDFS 是否可访问
3. ZK 连接失败
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。