Skip to content

项目6 💾 基于HBase存储电影分析结果学习教程:从入门到实践 ​

本教程将详细介绍 HBase 分布式数据库的核心概念、集群安装部署、Shell 命令操作,并结合电影网站项目实战,演示如何使用 Java API 将分析结果持久化存储。

🚀 一、 认识 HBase 分布式数据库 ​

HBase 是一个面向列的非关系型分布式数据库 1,它构建于 Hadoop 文件系统(HDFS)之上 2,弥补了 HDFS 不能随机访问数据的缺陷 3,用于支持对数据的实时存取。

1. HBase 的核心特点 ​

特点描述
海量存储可存储 PB 级数据 4。
面向列数据按列族存储,同列族的数据紧密存储在一起 5。
多版本每个单元格都保存同一数据的多个版本,通过时间戳区分 666。
动态灵活数据模型动态性好,不区分数据类型,支持结构化、半结构化和非结构化数据 7。
高可靠性依赖 HDFS 和 ZooKeeper 保证集群高可用 8。

2. HBase 数据模型解析(理解存储结构) ​

HBase 采用“四维坐标”定位一个单元格,是理解 HBase 操作的基础 9。

组件说明作用
行键 (Row Key)类似于传统数据库的主键,是 HBase 表的唯一标识 10。决定数据存储位置和检索效率(按 Row Key 排序存储)。
列族 (Column Family)创建表时必须定义,一个或多个列的集合 11111111。物理存储单元,同一个列族内的所有列具有相同的属性 12。
列名 (Column)由 列族名:限定符 组成 13。具体的数据字段。
时间戳 (Timestamp)每次操作隐式或显式生成 14。区分同一单元格的不同版本数据 15。

🛠️ 二、 安装部署 HBase 集群(实操步骤) ​

HBase 集群采用 主/从架构,运行需要依赖 Hadoop 和 ZooKeeper 16。

1. ZooKeeper 集群安装与启动 ​

ZooKeeper 是 HBase 的协调服务,用于 Master 选举和 RegionServer 状态管理 17。

操作流程(分布式模式)

部署:在集群节点(如 slave1, slave2, slave3)上配置 ZooKeeper 文件 zoo.cfg 和 myid 文件 18181818。

启动:在所有 ZooKeeper 节点上执行 zkServer.sh start 命令 19191919。

验证:使用 zkServer.sh status 查看 Leader 和 Follower 角色状态 20。

2. HBase集群启动与验证 ​

HBase 需要在 ZooKeeper 和 Hadoop 启动后才能运行 21。

启动 Hadoop:在 Master 节点执行 $HADOOP_HOME/sbin/start-all.sh 22。

启动 HBase:在 Master 节点执行 start-hbase.sh 命令 23。

验证(Web UI):通过浏览器访问 Master 主服务器地址(例如:http://192.168.128.130:16010) 24,查看集群状态和 RegionServers 列表 25。

💻 三、 掌握 HBase Shell 常用命令(高效管理) ​

HBase Shell 是最常用的管理和操作 HBase 数据库的方式。

功能模块常用命令语法示例(以 student 表为例)说明
表管理create 26create 'student', 'info', 'score'创建包含 info 和 score 两个列族的表 27。
list 28list列出所有表 29。
describe 30describe 'student'显示表的详细信息 31。
结构修改disable 3232disable 'student'禁用表(修改或删除前必须先禁用) 33333333。
alter 34alter 'student', NAME=>'relationship'修改表,增加 relationship 列族 35353535。
drop 36drop 'student'删除已禁用的表 37。
数据操作put 38put 'student', '2023001', 'info:name', '张三'向指定单元格插入数据 39。
get 40get 'student', '2023001'获取行键为 2023001 的所有数据 41。
scan 42scan 'student', {LIMIT => 10}扫描并查询表数据(可设置条件) 43。
deleteall 44deleteall 'student', '2023001'删除行键为 2023001 的整行数据 45。
truncate 46truncate 'student'清空表中的所有数据 47。

🎬 四、 项目实践:Java API 实现分析结果存储 ​

在实际项目中,我们通常使用 Java API 进行数据导入和应用集成。

1. Java API 开发环境搭建(Maven) ​

创建 Maven 项目:使用 IntelliJ IDEA 创建 Maven 工程 48。

配置依赖:在 pom.xml 中引入 HBase 相关的 Maven 依赖 49。

连接配置:在 Java 类中初始化 Configuration 配置信息,然后使用 Connection 和 Admin 类建立与 HBase 集群的连接 50。

核心 Java API说明
Admin 51用于建立客户端和 HBase 数据库的连接,进行表管理。
HColumnDescriptor 52描述列族信息。
Table 53用于实现 HBase 表通信,进行数据操作。
Put 54用于向 HBase 表中插入数据。
Get/Scan用于查询单条或多条记录。

2. 电影分析结果表设计(存储方案) ​

项目将 Hive/MapReduce 分析出的四份结果数据存储到不同的 HBase 表中。表结构设计的核心是合理利用 RowKey 来实现高效检索。

目标分析结果HBase 表名RowKey 设计(用于检索)列族(CF)列限定符(CQ)
评分次数最多的10部电影 56film_RateNum 57Top+"[1~10]"(排名) 58scoringtimes 59MovieID, Movietype, RateNum 60
不同性别的用户评分最高的10部电影 61film_GenderRatings 62第一个字段(性别)+_Top+"[1~10]" 63info 64MovieID, Rating 65
电影ID为2858的电影各年龄段用户的平均评分 66film_AgeRatings 67Age=+第一个字段(年龄段) 68info 69avgRating, MovieID 70
各种类型电影中评分最高的5部电影 71film_TypeRatings 72第一个字段(电影类型)+_Top+"[1~5]" 73info 74MovieID, Rating 75

3. Java API 数据插入(实操核心) ​

将 HDFS 中存储的分析结果文件(如 /join/outputTop10/part-r-00000 76)读取后,使用 Put 对象插入到 HBase 表中。

插入数据流程:

连接 HDFS:连接 HDFS,逐行读取分析结果文件内容 77。

创建表:使用 Admin 接口创建 HBase 表,并指定列族 78。

封装数据:对每一行数据,创建一个 Put 对象,指定 RowKey 79。

  1. 添加单元格:使用 put.addColumn(列族字节, 列限定符字节, 值字节) 方法,根据表设计添加数据。

提交:使用 Table.put(put对象) 将数据提交到 HBase 80。

通过这种方式,即可实现将海量数据分析结果快速、灵活地存储到 HBase 中,为前端应用提供实时查询能力。

基于 Vite 强力驱动 | 纯静态轻量托管