跳转到内容

课程介绍

接下来我们学习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对比

特性HBaseRedis
数据模型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 -version
bash
# 输出示例:
# 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进程
jps
bash
# 应该看到QuorumPeerMain进程

步骤3:检查Hadoop HDFS状态

bash
# 在每台节点上检查Hadoop进程
jps
bash
# 应该看到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 start
bash
# 验证ZooKeeper启动状态
jps

3. 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.gz
bash
# 等待下载完成

步骤2:验证下载文件

bash
# 查看下载的文件
ls -lh hbase-2.1.0-bin.tar.gz
bash
# 输出示例:
# -rw-r--r-- 1 root root 120M XXX日期 hbase-2.1.0-bin.tar.gz

3. 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.0
bash
# 输出示例:
# drwxr-xr-x 10 root root 4096 XXX日期 hbase-2.1.0

3. 3 创建软链接

步骤1:创建软链接

bash
# 创建hbase软链接
ln -s /export/server/hbase-2.1.0 /export/server/hbase
bash
# 查看软链接
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

# 查看目录内容
ls

4. 配置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
# 保存并退出
:wq

4. 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
# 保存并退出
:wq

4. 3 修改regionservers文件

步骤1:编辑regionservers文件

bash
# 编辑regionservers文件
vim regionservers

步骤2:清空文件内容

bash
# 删除文件中的所有内容
:%d

步骤3:添加RegionServer节点

node1
node2
node3

步骤4:保存退出

bash
# 保存并退出
:wq

5. 分发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/hbase
bash
# 验证软链接
ls -l | grep hbase

5. 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/hbase
bash
# 验证软链接
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 $PATH

6. 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_HOME

6. 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_HOME

7. 启动HBase集群

7. 1 启动前检查

步骤1:检查Hadoop HDFS状态

bash
# 在NODE1上检查Hadoop进程
jps
bash
# 应该看到:
# NameNode
# DataNode
# SecondaryNameNode

步骤2:检查ZooKeeper状态

bash
# 在每台节点上检查ZooKeeper进程
jps
bash
# 应该看到:
# QuorumPeerMain

步骤3:启动ZooKeeper(如果未启动)

bash
# 在每台节点上启动ZooKeeper
cd /export/server/zookeeper
bin/zkServer.sh start
bash
# 验证ZooKeeper启动状态
jps

7. 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上检查进程
jps
bash
# 应该看到:
# HMaster
# HRegionServer
bash
# 在NODE2上检查进程
jps
bash
# 应该看到:
# HRegionServer
bash
# 在NODE3上检查进程
jps
bash
# 应该看到:
# HRegionServer

7. 3 HBase集群架构

集群角色:

节点角色说明
NODE1HMaster + HRegionServer管理节点 + 工作节点
NODE2HRegionServer工作节点
NODE3HRegionServer工作节点

架构说明:

  • 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 shell
bash
# 等待进入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
exit

9. 常见问题

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协调

安装步骤:

  1. 确保JDK、ZooKeeper、Hadoop HDFS已安装
  2. 下载并解压HBase
  3. 配置hbase-env.sh(设置JDK路径)
  4. 配置hbase-site.xml(指定HDFS和ZooKeeper)
  5. 配置regionservers文件(列出所有RegionServer节点)
  6. 分发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列族存储:idnamegenderage
  • behavior列族存储:view_countclick_countpurchase_count
  • preference列族存储:tagsrecommend_category
  • 查询完整画像时可以一次性获取多个列的数据
  • 使用scan时可以添加过滤器筛选特定列或条件

评论区

专业的Linux技术学习平台,从入门到精通的完整学习路径