HBase 集群部署与实战开发

手把手带你玩转大数据“超级硬盘”

建议授课时长:90 分钟 | 纯实操演练

本节实操地图

1

伪分布式部署

从修改配置到拉起集群,搭建我们的第一座 HBase 数据基地。

2

Shell 实战演练

告别鼠标,用极客的方式与 HBase 对话,实现数据的增删改查。

3

课堂大闯关

趣味实战考核!用今天学到的绝招,完成数据收录任务。

第一模块:HBase 环境部署

纸上得来终觉浅,绝知此事要躬行。
让我们一步步把 HBase 集群拉起来!

战前准备:三大件点名

Zookeeper

代号:通讯员/保安

它是 HBase 的“大管家”,负责记录集群里谁活着、谁挂了,并维护核心元数据。

*必须第一个启动!

Hadoop (HDFS)

代号:底层大仓库

HBase 自己是不存数据的,所有的数据最终都存在 HDFS 这个巨型文件系统里。

*必须第二个启动!

HBase

代号:核心指挥部

负责提供表结构、处理高并发查询,是今天实操的绝对主角。

*最后压轴出场!

第一步:启动 Zookeeper 与 Hadoop

1. 唤醒 Zookeeper

打开终端,输入启动命令并检查状态:

zkServer.sh start
zkServer.sh status

*看到 Mode: standalone 就说明启动成功啦!

2. 唤醒 Hadoop (HDFS)

接着,把底层仓库拉起来:

start-dfs.sh

*HBase 只依赖 HDFS,不需要启动 YARN。

第二步:修改 HBase 配置文件 (1)

进入配置目录:cd /opt/module/hbase/conf

首先编辑 hbase-env.sh 文件,告诉 HBase Java在哪里,以及谁来管 Zookeeper。


# 1. 配置 JAVA 环境变量
export JAVA_HOME=/opt/module/jdk1.8.0_212

# 2. 禁用 HBase 自带的 Zookeeper(我们用自己装的)
export HBASE_MANAGES_ZK=false

易错点:false 千万别拼错,否则启动会冲突!

第三步:修改 HBase 配置文件 (2)

编辑核心文件:hbase-site.xml

这是 HBase 的“大脑”,要告诉它 HDFS 的地址和 Zookeeper 的地址。

<property>
  <name>hbase.rootdir</name>
  <value>hdfs://hadoop102:8020/hbase</value> <!-- 你的HDFS地址 -->
</property>
<property>
  <name>hbase.cluster.distributed</name>
  <value>true</value> <!-- 开启分布式模式 -->
</property>
<property>
  <name>hbase.zookeeper.quorum</name>
  <value>hadoop102,hadoop103,hadoop104</value> <!-- 你的ZK集群地址 -->
</property>

第四步:点火启动 HBase!

一键拉起集群

start-hbase.sh

运行后,系统会自动启动 Master 和 RegionServer。

验明正身 (JPS)

敲下 jps 命令,必须看到以下两个新进程,才算成功:

  • HMaster (仓库主管)
  • HRegionServer (搬砖工人)

避坑指南:JPS 进程不对怎么办?

新手常见翻车现场排查:

  • 现象 1:没有 HMaster 或刚出来就消失了?
    排查:大概率是 HDFS 还在“安全模式”(Safe Mode),或者 Zookeeper 根本没起!
  • 现象 2:没有 HRegionServer?
    排查:时间同步问题!HBase 极度依赖集群时间一致。检查所有虚拟机的时间是否一致。
  • 通用大招:看日志!
    /opt/module/hbase/logs 目录下找带 .log 结尾的文件,里面的 ERROR 就是答案。

第二模块:HBase Shell 基本操作

基地建好了,现在我们要开始干活了。
敲下命令,亲自感受数据的增删改查。

敲开 HBase 的大门

进入 Shell 客户端

在终端里敲击下面这个命令,我们将进入 HBase 的交互式世界:

hbase shell

当你看到提示符变成 hbase(main):001:0> 时,恭喜你,连接成功!

(提示:按 Ctrl+Backspace 可以退格删除打错的字哦)

命名空间 (Namespace) 实战

还记得概念吗?

命名空间就相当于 MySQL 里的 Database,是一个逻辑上的文件夹。

实操任务:我们来创建一个名为 school 的命名空间。

# 1. 创建空间
create_namespace 'school'

# 2. 查看所有空间
list_namespace

建表与查看 (Create / List)

实操任务:在 school 下创建一张 student 表

需要两个列族:info (存基础信息) 和 score (存成绩)。

create 'school:student', 'info', 'score'


检查我们建的表

# 查看所有的表
list

# 查看这个表的详细结构
desc 'school:student'

填装弹药:录入数据 (Put)

HBase 是一格一格填数据的。我们来给学号为 s1001 的同学录入信息。


# 填入姓名:张三
put 'school:student', 's1001', 'info:name', 'ZhangSan'

# 填入年龄:20
put 'school:student', 's1001', 'info:age', '20'

# 填入大数据课成绩:95
put 'school:student', 's1001', 'score:bigdata', '95'

*大家注意看引号!表名、RowKey、列族:列名、值,全部都要加单引号!

精确查询 (Get) - 狙击手模式

查询整行数据

我想看看 s1001 这个学生到底录入了哪些信息?

get 'school:student', 's1001'

*你会看到控制台打印出了张三的 name, age 和 bigdata 三条记录(3个Cell)。

查得更细一点

如果我只想看张三的“成绩”,不想看“基础信息”呢?

get 'school:student', 's1001', 'score'

在后面加参数,可以精准定位到列族甚至具体的列!

范围扫描 (Scan) - 雷达模式

为了演示 Scan,请大家花 1 分钟,快速用 put 命令录入一个 s1002 的李四同学(随便写点数据)。

1. 扫全表 (看看班里有谁)

scan 'school:student'


2. 限制条数扫描

如果表里有十亿条数据,全表 Scan 会死机。我们可以限制只看前 1 条数据:

scan 'school:student', {LIMIT => 1}

注意大括号里的语法,LIMIT 是大写!

数据删除 (Delete / Deleteall)

擦掉一个小格子 (delete)

哎呀,张三的年龄录错了。我们把它删掉:

delete 'school:student', 's1001', 'info:age'

执行完再 get 一下,发现年龄确实没了。

开除整个学生 (deleteall)

李四 (s1002) 退学了,要把他的所有数据全部干掉:

deleteall 'school:student', 's1002'

再 scan,表里就只剩张三了。

过滤器 (Filter) 初体验

场景需求

表里可能有几万条数据,我不知道 RowKey,我只想找到名字叫 'ZhangSan' 的所有记录


使用 ValueFilter (值过滤器)

scan 'school:student', {FILTER => "ValueFilter(=, 'binary:ZhangSan')"}


代码解析:在扫描的时候加一个“安检门”,只有值等于(binary) "ZhangSan" 的数据才会被放行显示出来。

表的删除(善后工作)

最后,如果我们不要这张表了,该怎么删?

理论课讲过:必须“先停用,再删除”!

  1. disable 'school:student' # 停用表
  2. drop 'school:student' # 彻底删除

大家可以自己敲一遍试试,然后用 list 看看表是不是没了。

实操总结与下课准备

今日成就解锁

  • 成功拉起了 HBase 的伪分布式集群。
  • 掌握了排错的核心:学会看 JPS 和 Logs。
  • 学会了用 Shell 管理 Namespace 和 Table。
  • 熟练掌握了 HBase 的四大金刚:Put, Get, Scan, Delete。

下课前的最后一步:优雅关机

离开机房前,请养成好习惯,不要直接拔电源,否则下次 HDFS 容易损坏!在终端执行:

# 1. 退出 shell
exit

# 2. 关闭 HBase
stop-hbase.sh

同学们辛苦了!

只要自己敲出代码,大数据就不再神秘。