主题
课程介绍
接下来我们学习HBase分布式集群的安装部署。HBase是构建在Hadoop HDFS上的分布式NoSQL数据库,支持海量数据存储和实时读写。HBase依赖Hadoop HDFS,需要先启动Hadoop集群。安装HBase需要准备好JDK、Hadoop和ZooKeeper环境。下载安装包后,解压并创建软链接。然后修改hbase-site.xml配置文件,设置HDFS地址、ZooKeeper地址等。配置完成后,启动HBase集群,用jps验证进程,通过HBase Shell进行增删改查操作。HBase是大数据存储的重要工具。
1. HBase概述
1. 1 什么是HBase
定义: HBase(Hadoop Database)是一款分布式的、面向列的、可扩展的NoSQL数据库,构建在Hadoop HDFS文件系统之上,支持海量数据的随机读写访问。
核心特点:
- 分布式:数据分布在多台服务器上,支持水平扩展
- 可扩展:通过增加节点可以轻松扩展存储容量和性能
- 海量数据存储:支持PB级别的数据存储
- 高可靠性:基于Hadoop HDFS,数据自动复制,容错能力强
- 列式存储:采用列式存储模型,适合稀疏数据
- 实时读写:支持实时的随机读写访问
1. 2 HBase vs Redis对比
| 特性 | HBase | Redis |
|---|---|---|
| 数据模型 | Key-Value(列式存储) | Key-Value(内存存储) |
| 数据规模 | 海量数据(PB级别) | 少量数据(GB级别) |
| 存储介质 | 磁盘(HDFS) | 内存 |
| 检索速度 | 快速检索 | 超快检索 |
| 吞吐量 | 超高吞吐能力 | 高吞吐能力 |
| 应用场景 | 大数据存储、离线分析 | 缓存、实时计数 |
| 数据持久化 | 持久化存储 | 支持持久化但主要在内存 |
| 分布式支持 | 原生分布式 | 支持集群但主要单机 |
| 复杂度 | 较复杂 | 简单 |
1. 3 HBase应用场景
典型应用场景:
- 海量数据存储:社交网络、物联网数据、日志数据
- 实时查询:用户画像、推荐系统、广告投放
- 时序数据:监控数据、传感器数据、金融交易数据
- 大数据分析:离线分析、数据仓库、OLAP应用
2. 环境准备
2. 1 前置要求
软件依赖:
- JDK:Java开发环境(版本1.8或以上)
- ZooKeeper:分布式协调服务(已安装并启动)
- Hadoop:HDFS文件系统(已安装并启动)
集群节点:
- NODE1:192.168.88.131(Master节点)
- NODE2:192.168.88.132(RegionServer节点)
- NODE3:192.168.88.133(RegionServer节点)
2. 2 检查前置环境
步骤1:检查JDK环境
bash
# 在每台节点上检查Java版本
java -versionbash
# 输出示例:
# java version "1.8.0_XXX"
# Java(TM) SE Runtime Environment (build 1.8.0_XXX-XXX)
# Java HotSpot(TM) 64-Bit Server VM (build 25.XXX-XXX, mixed mode)步骤2:检查ZooKeeper状态
bash
# 在每台节点上检查ZooKeeper进程
jpsbash
# 应该看到QuorumPeerMain进程步骤3:检查Hadoop HDFS状态
bash
# 在每台节点上检查Hadoop进程
jpsbash
# 应该看到NameNode、DataNode等进程步骤4:启动ZooKeeper(如果未启动)
bash
# 在NODE1上启动ZooKeeper
cd /export/server/zookeeper
bin/zkServer.sh start
# 在NODE2上启动ZooKeeper
cd /export/server/zookeeper
bin/zkServer.sh start
# 在NODE3上启动ZooKeeper
cd /export/server/zookeeper
bin/zkServer.sh startbash
# 验证ZooKeeper启动状态
jps3. HBase安装部署
3. 1 下载HBase安装包
步骤1:在NODE1上下载HBase
bash
# 使用wget命令下载HBase安装包
cd /export/software
wget https://archive.apache.org/dist/hbase/2.1.0/hbase-2.1.0-bin.tar.gzbash
# 等待下载完成步骤2:验证下载文件
bash
# 查看下载的文件
ls -lh hbase-2.1.0-bin.tar.gzbash
# 输出示例:
# -rw-r--r-- 1 root root 120M XXX日期 hbase-2.1.0-bin.tar.gz3. 2 解压HBase安装包
步骤1:解压到指定目录
bash
# 解压HBase安装包到/export/server目录
tar -zxvf hbase-2.1.0-bin.tar.gz -C /export/server步骤2:查看解压结果
bash
# 进入/export/server目录
cd /export/server
# 查看解压后的文件夹
ls -ld hbase-2.1.0bash
# 输出示例:
# drwxr-xr-x 10 root root 4096 XXX日期 hbase-2.1.03. 3 创建软链接
步骤1:创建软链接
bash
# 创建hbase软链接
ln -s /export/server/hbase-2.1.0 /export/server/hbasebash
# 查看软链接
ls -l /export/server | grep hbase
# 输出示例:
# lrwxrwxrwx 1 root root 30 XXX日期 hbase -> /export/server/hbase-2.1.0
# drwxr-xr-x 10 root root 4096 XXX日期 hbase-2.1.0步骤2:验证软链接
bash
# 进入软链接目录
cd /export/server/hbase
# 查看目录内容
ls4. 配置HBase
4. 1 修改hbase-env.sh文件
步骤1:进入配置目录
bash
# 进入HBase配置目录
cd /export/server/hbase/conf步骤2:编辑hbase-env.sh文件
bash
# 编辑hbase-env.sh文件
vim hbase-env.sh步骤3:添加环境变量配置 在文件头部添加以下内容:
bash
# Java Home
export JAVA_HOME=/export/server/jdk
# HBase Home
export HBASE_HOME=/export/server/hbase
# HBase Manager ZooKeeper
export HBASE_MANAGES_ZK=false步骤4:保存退出
bash
# 保存并退出
:wq4. 2 修改hbase-site.xml文件
步骤1:编辑hbase-site.xml文件
bash
# 编辑hbase-site.xml文件
vim hbase-site.xml步骤2:清空文件内容
bash
# 删除文件中的所有内容
:%d步骤3:添加配置内容
xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- HBase集群节点列表 -->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- HBase数据存储目录 -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://node1:8020/hbase</value>
</property>
<!-- ZooKeeper集群地址 -->
<property>
<name>hbase.zookeeper.quorum</name>
<value>node1,node2,node3</value>
</property>
<!-- ZooKeeper数据目录 -->
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/export/data/zookeeper</value>
</property>
<!-- ZooKeeper客户端端口 -->
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>
</configuration>步骤4:保存退出
bash
# 保存并退出
:wq4. 3 修改regionservers文件
步骤1:编辑regionservers文件
bash
# 编辑regionservers文件
vim regionservers步骤2:清空文件内容
bash
# 删除文件中的所有内容
:%d步骤3:添加RegionServer节点
node1
node2
node3步骤4:保存退出
bash
# 保存并退出
:wq5. 分发HBase到其他节点
5. 1 分发HBase到NODE2
步骤1:使用SCP分发HBase
bash
# 在NODE1上执行
cd /export/server
scp -r hbase-2.1.0 node2:`pwd`步骤2:在NODE2上创建软链接
bash
# 在NODE2上执行
cd /export/server
ln -s /export/server/hbase-2.1.0 /export/server/hbasebash
# 验证软链接
ls -l | grep hbase5. 2 分发HBase到NODE3
步骤1:使用SCP分发HBase
bash
# 在NODE1上执行
cd /export/server
scp -r hbase-2.1.0 node3:`pwd`步骤2:在NODE3上创建软链接
bash
# 在NODE3上执行
cd /export/server
ln -s /export/server/hbase-2.1.0 /export/server/hbasebash
# 验证软链接
ls -l | grep hbase注意事项:
- 分发时使用的是
hbase-2.1.0实际目录,不是软链接hbase - 确保每台节点都创建了软链接
6. 配置环境变量
6. 1 配置NODE1环境变量
步骤1:编辑环境变量文件
bash
# 在NODE1上编辑/etc/profile文件
vim /etc/profile步骤2:添加HBase环境变量 在文件末尾添加以下内容:
bash
# HBase Environment Variables
export HBASE_HOME=/export/server/hbase
export PATH=$PATH:$HBASE_HOME/bin步骤3:使环境变量生效
bash
# 使环境变量生效
source /etc/profile
# 验证环境变量
echo $HBASE_HOME
echo $PATH6. 2 配置NODE2环境变量
步骤1:编辑环境变量文件
bash
# 在NODE2上编辑/etc/profile文件
vim /etc/profile步骤2:添加HBase环境变量 在文件末尾添加以下内容:
bash
# HBase Environment Variables
export HBASE_HOME=/export/server/hbase
export PATH=$PATH:$HBASE_HOME/bin步骤3:使环境变量生效
bash
# 使环境变量生效
source /etc/profile
# 验证环境变量
echo $HBASE_HOME6. 3 配置NODE3环境变量
步骤1:编辑环境变量文件
bash
# 在NODE3上编辑/etc/profile文件
vim /etc/profile步骤2:添加HBase环境变量 在文件末尾添加以下内容:
bash
# HBase Environment Variables
export HBASE_HOME=/export/server/hbase
export PATH=$PATH:$HBASE_HOME/bin步骤3:使环境变量生效
bash
# 使环境变量生效
source /etc/profile
# 验证环境变量
echo $HBASE_HOME7. 启动HBase集群
7. 1 启动前检查
步骤1:检查Hadoop HDFS状态
bash
# 在NODE1上检查Hadoop进程
jpsbash
# 应该看到:
# NameNode
# DataNode
# SecondaryNameNode步骤2:检查ZooKeeper状态
bash
# 在每台节点上检查ZooKeeper进程
jpsbash
# 应该看到:
# QuorumPeerMain步骤3:启动ZooKeeper(如果未启动)
bash
# 在每台节点上启动ZooKeeper
cd /export/server/zookeeper
bin/zkServer.sh startbash
# 验证ZooKeeper启动状态
jps7. 2 启动HBase集群
步骤1:启动HBase集群
bash
# 在任意节点上执行(推荐在NODE1上)
start-hbase.sh步骤2:查看启动日志
bash
# 查看HMaster日志
tail -f /export/server/hbase/logs/hbase-root-master-node1.log
# 查看HRegionServer日志
tail -f /export/server/hbase/logs/hbase-root-regionserver-node1.log步骤3:验证HBase进程
bash
# 在NODE1上检查进程
jpsbash
# 应该看到:
# HMaster
# HRegionServerbash
# 在NODE2上检查进程
jpsbash
# 应该看到:
# HRegionServerbash
# 在NODE3上检查进程
jpsbash
# 应该看到:
# HRegionServer7. 3 HBase集群架构
集群角色:
| 节点 | 角色 | 说明 |
|---|---|---|
| NODE1 | HMaster + HRegionServer | 管理节点 + 工作节点 |
| NODE2 | HRegionServer | 工作节点 |
| NODE3 | HRegionServer | 工作节点 |
架构说明:
- HMaster:HBase的管理者,负责集群管理、负载均衡、Region分配等
- HRegionServer:HBase的工作者,负责实际的数据存储和读写操作
8. 验证HBase集群
8. 1 通过Web界面验证
步骤1:打开浏览器
- 在浏览器中访问:
http://192.168.88.131:16010
步骤2:查看集群状态
- 查看Master节点:node1
- 查看RegionServer节点:node1、node2、node3
- 查看集群状态:Active
步骤3:查看Region信息
- 点击"Regions"标签
- 查看当前Region的数量和分布
8. 2 通过命令行验证
步骤1:进入HBase Shell
bash
# 在任意节点上执行
hbase shellbash
# 等待进入HBase Shell
# 提示符变为:hbase(main):001:0>步骤2:创建表
bash
# 创建一个测试表
create 'test', 'cf'bash
# 输出示例:
# Created table test
# Took 1.2345 seconds步骤3:插入数据
bash
# 向test表插入数据
put 'test', 'rk001', 'cf:id', 'yege'bash
# 输出示例:
# Took 0.1234 seconds步骤4:查询数据
bash
# 查询test表的数据
get 'test', 'rk001'bash
# 输出示例:
# COLUMN CELL
# cf:id timestamp=XXXXXXXXXXX, value=yege
# 1 row(s)
# Took 0.1234 seconds步骤5:扫描表
bash
# 扫描test表的所有数据
scan 'test'bash
# 输出示例:
# ROW COLUMN+CELL
# rk001 column=cf:id, timestamp=XXXXXXXXXXX, value=yege
# 1 row(s)
# Took 0.1234 seconds步骤6:退出HBase Shell
bash
# 退出HBase Shell
exit9. 常见问题
9. 1 常见问题及解决方案
| 问题 | 原因 | 解决方案 |
|---|---|---|
| HBase无法启动 | ZooKeeper未启动 | 先启动ZooKeeper集群 |
| HMaster无法启动 | HDFS未启动 | 先启动Hadoop HDFS |
| RegionServer无法启动 | 端口被占用 | 检查端口占用情况 |
| 无法连接HBase Shell | 环境变量未配置 | 配置HBase环境变量 |
| Web界面无法访问 | 防火墙阻止 | 开放16010端口 |
| 数据写入失败 | HDFS空间不足 | 检查HDFS存储空间 |
| 表创建失败 | 配置文件错误 | 检查hbase-site.xml配置 |
9. 2 故障排查命令
检查HBase进程:
bash
# 查看HBase相关进程
jps | grep -i hbase输出示例:
12345 HMaster
12346 HRegionServer
检查HBase日志:
bash
# 查看HMaster日志
tail -f /export/server/hbase/logs/hbase-root-master-node1.log
# 查看HRegionServer日志
tail -f /export/server/hbase/logs/hbase-root-regionserver-node1.log检查HBase配置:
bash
# 查看HBase配置文件
cat /export/server/hbase/conf/hbase-site.xml
# 查看RegionServer列表
cat /export/server/hbase/conf/regionservers检查网络连接:
bash
# 检查ZooKeeper连接
ssh node1 2181
# 检查HDFS连接
hdfs dfs -ls /检查HDFS状态:
bash
# 查看HDFS状态
hdfs dfsadmin -report
# 查看HBase目录
hdfs dfs -ls /hbase课程总结
这节课我们学了HBase分布式集群的安装部署。
HBase架构:
- HMaster - 管理RegionServer
- HRegionServer - 存储实际数据
- 依赖HDFS存储文件
- 依赖ZooKeeper协调
安装步骤:
- 确保JDK、ZooKeeper、Hadoop HDFS已安装
- 下载并解压HBase
- 配置hbase-env.sh(设置JDK路径)
- 配置hbase-site.xml(指定HDFS和ZooKeeper)
- 配置regionservers文件(列出所有RegionServer节点)
- 分发HBase到集群其他节点
启动命令: start-hbase.sh - 启动HBase集群 stop-hbase.sh - 停止HBase集群
Web界面: HMaster Web UI: http://主节点IP:16010
HBase是分布式NoSQL数据库,适合海量数据存储和实时查询。 常用端口: 16010(HMaster), 16020(HMaster端口), 16030(HRegionServer)
通过本课程的学习,学员应该能够独立完成HBase分布式集群的安装部署,并掌握HBase的基本操作技能。
课后练习
练习1(基础)- HBase基本操作
练习内容: 进入HBase Shell,创建一个名为student的表,列族为info。插入3条学生数据(学号、姓名、年龄),查询学号为001的学生信息,扫描student表的所有数据,删除学号为001的学生数据,退出HBase Shell。
提示:
- 进入HBase Shell使用命令:
hbase shell - 创建表的语法:
create '表名', '列族名' - 插入数据的语法:
put '表名', '行键', '列族:列名', '值' - 查询单条数据使用:
get '表名', '行键' - 扫描整个表使用:
scan '表名' - 删除数据使用:
delete '表名', '行键', '列族:列名' - 退出Shell使用:
exit
练习2(进阶)- HBase集群管理
练习内容: 查看HBase集群的Web界面,检查HBase集群的进程状态,查看HBase的日志文件,重启HBase集群,验证HBase集群重启后数据是否丢失。
提示:
- HBase Web界面访问地址:
http://192.168.88.131:16010 - 检查进程使用:
jps | grep -i hbase - HMaster日志路径:
/export/server/hbase/logs/hbase-root-master-node1.log - 停止集群:
stop-hbase.sh - 启动集群:
start-hbase.sh - HBase数据存储在HDFS上,重启不会丢失数据
练习3(高阶)- HBase性能测试
练习内容: 创建一个大表(100万条数据),使用批量插入方式插入数据,测试查询性能,测试扫描性能,分析性能瓶颈。
提示:
- 批量插入可以使用Shell脚本或Java API
- 每次put操作都会产生一次RPC调用,考虑使用批处理
- 测试性能时使用
time命令记录执行时间 - 影响性能的因素包括:网络延迟、磁盘IO、Region数量、缓存设置
- 可以通过调整HBase配置参数优化性能,如
hbase.regionserver.global.memstore.size
练习4(实战)- 用户画像系统
练习内容: 使用HBase构建用户画像系统。创建user_profile表,列族为basic、behavior、preference。插入用户基本信息(用户ID、姓名、性别、年龄),插入用户行为数据(浏览、点击、购买),插入用户偏好数据(兴趣标签、推荐类别),查询指定用户的完整画像,扫描所有用户的画像数据。
提示:
- 建议使用有意义的行键,如
用户ID - basic列族存储:
id、name、gender、age - behavior列族存储:
view_count、click_count、purchase_count - preference列族存储:
tags、recommend_category - 查询完整画像时可以一次性获取多个列的数据
- 使用
scan时可以添加过滤器筛选特定列或条件