HBase、Hive、Redis 和 MongoDB的对比

1. 数据库管理

操作 HBase Hive Redis MongoDB
创建数据库 N/A (HBase 没有数据库概念) CREATE DATABASE db_name; N/A (Redis 没有数据库命名功能) use db_name; (自动创建)
查看数据库 N/A SHOW DATABASES; INFO 查看全局信息 show dbs;
删除数据库 N/A DROP DATABASE db_name CASCADE; N/A db.dropDatabase();
切换数据库 N/A USE db_name; SELECT db_index use db_name;

2. 表管理

以下是 HBaseHiveRedisMongoDB 中进行表结构增改操作的总结,具体包括表的增加和修改操作。

操作 HBase Hive Redis MongoDB
增加表 创建时指定列族 create 'table_name', 'cf1', 'cf2' 创建带版本的表 create 'version_table', {NAME => 'cf', VERSIONS => 5} CREATE TABLE table_name (...); N/A (键值对模型,没有表结构) db.createCollection("table_name")
修改表 alter 'table_name', {NAME => 'new_cf', METHOD => 'add'} 添加列族或修改表的配置 ALTER TABLE table_name ADD COLUMNS (column_definition); 修改键值对:SET key_name value db.table_name.updateOne(), db.table_name.updateMany()
查看表 list SHOW TABLES; KEYS * 查询所有键 show collections;
表结构 describe 'table_name' DESCRIBE table_name; 查看详细信息 DESCRIBE table_name; N/A db.table_name.stats()
删除表 disable 'table_name' drop 'table_name' DROP TABLE table_name; DEL key_name db.table_name.drop()

3. 数据操作

插入数据
操作 HBase Hive Redis MongoDB
插入单行 put 'table_name', 'row1', 'cf1:col1', 'value' INSERT INTO table_name VALUES (...); 插入键值对字段SET key value 插入哈希表字段 HSET hkey:hvalue key value db.table_name.insert({...})
批量插入 使用脚本或 API 插入 LOAD DATA INPATH 'path' INTO TABLE ...; MSET key1 value1 key2 value2 db.table_name.insertMany([{...}])

查询数据
操作 HBase Hive Redis MongoDB
查询所有数据 scan 'table_name' SELECT * FROM table_name; KEYS * 查询所有键HGETALL hkey:hvalue db.table_name.find()
按条件查询 get 'table_name', 'row1' 查询版本数据get 'my_table', 'row1', {COLUMN => 'cf:column1', VERSIONS => 3} SELECT * FROM table_name WHERE ...; GET key db.table_name.find({...})
字段查询 get 'table_name', 'row1', 'cf1:col1' SELECT col1 FROM table_name; HGET hkey:hvalue key value db.table_name.find({}, {field: 1})

更新数据
操作 HBase Hive Redis MongoDB
更新单个值 put 'table_name', 'row1', 'cf1:col1', 'new_value' UPDATE table_name SET col1 = ... WHERE ...; SET key new_value db.table_name.updateOne({...}, {$set: {...}},true.false)参数1:查询条件,类似sql update 查询内 where 后的条件;参数2:update 的对象,类似 sql 中 update 中 set 后的内容;参数3:如果没有 update 的记录,true 表示插入,默认 false, 表示不插入;参数4:默认 false 表示只更新找到的第一条记录,true 表示更新所有满足条件的记录。
批量更新 使用脚本或 API 批量更新 批量更新不常见 不支持直接批量更新,需逐个设置 db.table_name.updateMany({...}, {$set: {...}})

删除数据
操作 HBase Hive Redis MongoDB
删除单行 delete 'table_name', 'row1' DELETE FROM table_name WHERE ...; DEL key db.table_name.deleteOne({...})
删除某字段 delete 'table_name', 'row1', 'cf1:col1' N/A HDEL hash_key field db.table_name.update({...}, {$unset: {field: 1}})
删除所有数据 删除表再重建 TRUNCATE TABLE table_name; FLUSHDB db.table_name.deleteMany({})

4. 其他管理操作

操作 HBase Hive Redis MongoDB
查看存储状态 status 查看 Hadoop 状态,需依赖 HDFS INFO 查看运行状态 db.stats()
备份数据 使用快照或导出工具 使用 HDFS 导入导出功能 保存 RDB/AOF 文件 使用 mongodump
恢复数据 使用快照恢复 使用 HDFS 数据恢复 载入 RDB/AOF 文件 使用 mongorestore
查看日志 检查 HBase 日志目录 检查 Hadoop 日志 查看 Redis 日志文件 查看 MongoDB 日志文件

启动和关闭操作总结

数据库 启动命令 关闭命令 说明
Hadoop ./sbin/start-dfs.shstart-yarn.sh ./sbin/stop-dfs.shstop-yarn.sh 启动 Hadoop 分布式文件系统(HDFS)和资源调度框架(YARN),其他组件如 Hive/HBase 均依赖它
HBase ./bin/start-hbase.sh ./bin/stop-hbase.sh 集群模式下,需确保 Zookeeper 服务已启动;依赖 HDFS 提供存储支持
Hive ./bin/hivehive --service hiveserver2 & exit 需先启动 Hadoop 服务,包括 HDFS 和 YARN,Hive 基于 Hadoop 提供 SQL 接口
Redis ./src/redis-server redis-cli shutdownkill <pid> 简单高效,适合开发和缓存场景,独立运行,无需依赖其他服务
MongoDB sudo service mongod startmongod --config ... sudo service mongod stopdb.shutdownServer() 默认无密码,生产环境建议配置用户权限和访问限制,独立运行,无需依赖其他服务

特点总结

数据库特点对比表

特性/维度 HBase Hive Redis MongoDB
数据库类型 分布式 NoSQL 数据库,基于 HDFS 的列式存储 分布式 SQL 数据仓库,基于 Hadoop 的批处理框架 内存型键值对数据库 文档型 NoSQL 数据库,最像关系型数据库的非关系型数据库
数据模型 行键 + 列族 + 列的多维度数据模型 传统关系型数据库表模型(Schema),支持分区表和桶表 键值对模型(字符串、哈希、列表、集合、有序集合、Stream) BSON 文档模型(类 JSON),支持嵌套数据
存储机制 基于 HDFS 的列族存储,分布式存储,适合稀疏表 基于 HDFS 存储,通过 MapReduce 或 Tez 实现查询和处理 内存存储,支持持久化为 RDB 文件或 AOF 文件 二进制 JSON (BSON) 存储,支持分布式存储
查询语言 无查询语言,主要通过 Shell (scan和get)或编程接口(如 Java API)操作 HiveQL(类似 SQL 的查询语言),支持简单的 SQL 操作 无查询语言,命令操作(如 GET, SET, HGET 丰富的查询语言,支持 JSON 格式的复杂查询
事务支持 不支持事务,提供最终一致性 不支持事务,数据主要用于批量查询 支持简单事务(MULTI/EXEC),5.0+ 支持 Lua 脚本事务 支持多文档事务
扩展性 高扩展性,支持 PB 级数据,适合大规模分布式集群 高扩展性,依赖 Hadoop 的分布式架构 高扩展性,支持主从复制和分布式分片 高扩展性,支持分片和复制集
性能 写性能高,读性能较慢,适合实时写入大规模稀疏数据 查询速度慢,依赖 Hadoop 集群执行,适合离线批量查询 极高的读写性能(内存操作),适合实时请求场景 性能较高,适合多样化的数据存储和查询
适用场景 实时写入和查询大规模稀疏表,如 IoT 数据、时间序列数据 大规模数据的批量分析,如数据仓库、报表生成 高速缓存、会话管理、实时计数、排行榜等 应用程序数据库、文档存储、复杂查询场景
数据一致性 提供最终一致性 依赖底层 HDFS 的容错性,最终一致性 单机模式强一致性,分布式模式支持最终一致性 强一致性,支持多文档事务
索引机制 不支持二级索引,查询需按行键检索 依赖分区、桶和 HDFS 的 MapReduce 索引机制 数据类型内置索引(如有序集合),但无复杂索引 支持单字段索引、复合索引、地理空间索引等
编程接口 提供 Java、Python、Thrift 等多种 API,适合与应用程序集成 提供 JDBC/ODBC 接口,适合与 BI 工具和数据分析工具集成 提供多语言客户端库(Python、Java、Node.js 等),简单易用 提供多语言客户端(Python、Java、Node.js 等),支持复杂的查询语法
集群模式 支持分布式集群部署,分布式读写性能高 Hadoop 环境下支持集群部署 主从复制、分布式分片,支持高可用和负载均衡 支持分片集群和复制集模式,适合高并发和高可用场景
持久化机制 数据存储在 HDFS 上,依赖 HDFS 的容错机制 通过 HDFS 持久化 支持 RDB 快照和 AOF 持久化 持久化数据到磁盘,支持定期备份和恢复
开发难度 操作复杂度高,学习曲线陡峭,需要深入理解 HDFS 和 MapReduce 的工作原理 接近传统 SQL,适合有 SQL 基础的开发者 简单易用,入门门槛低,适合轻量级数据管理 易用性较高,灵活性强,适合需要快速开发的场景
高可用支持 支持 HBase Master 和 RegionServer 的容错和自动恢复 高可用性依赖 Hadoop 的容错机制 主从复制和哨兵模式,支持快速故障转移 支持复制集机制,实现高可用性
典型应用 大数据实时存储与分析:物联网、日志存储、金融流水数据 数据仓库与离线分析:ETL、报表生成、用户行为分析 实时缓存:Web 应用、实时统计、消息队列、限流 灵活应用场景:内容管理系统、用户画像、移动应用数据库
开源与维护 开源项目,Apache 基金会维护,活跃度高 开源项目,Apache 基金会维护,广泛应用于大数据处理 开源项目,Redis Labs 维护,社区活跃 开源项目,MongoDB Inc. 维护,商业支持和社区支持丰富

选择建议

使用场景 推荐数据库
实时写入和随机读取大规模稀疏数据 HBase
离线批量处理和数据分析 Hive
高并发实时缓存或会话管理 Redis
灵活存储和复杂查询场景 MongoDB
相关推荐
武子康32 分钟前
大数据-253 离线数仓 - Airflow 任务调度 核心概念与实际案例测试 Py脚本编写
java·大数据·数据仓库·hive·hadoop·springboot
nbplus_0072 小时前
Redis Set操作
数据库·redis·bootstrap
逸曦玥泱3 小时前
搭建分布式HBase集群
数据库·分布式·hbase
weisian1513 小时前
Redis篇-11--数据结构篇3--字符串内存模型(简单动态字符串SDS)
数据结构·数据库·redis
.生产的驴3 小时前
Dcoker Redis哨兵模式集群介绍与搭建 故障转移 分布式 Java客户端连接
java·大数据·数据库·redis·分布式·mysql·缓存
DS小龙哥3 小时前
【CC2530开发基础篇】继电器模块使用
数据库·mongodb·nosql
小马爱打代码3 小时前
SpringBoot集成Canal实现MySQL实时同步数据到Redis
spring boot·redis·mysql
enjoy嚣士5 小时前
docker搭建redis集群
redis·docker
what_20185 小时前
中间件 redis安装
redis·中间件
逸曦玥泱6 小时前
搭建分布式Hive集群
hive·hadoop·分布式