NoSQL和HBase
NoSQL 不只是 SQL
NoSQL的全名是“Not Only SQL”(不仅仅是 SQL)。
我们平时熟悉的MySQL / Excel 表格是关系型数据库,像严格的“网格座位表”,每一行每一列都必须固定。而NoSQL更灵活,可以存储各种各样格式的数据,不用死板的表格!
生活比喻
关系型数据库 = 学校里固定的座位表,每个人必须坐自己编号的位置,不能乱放书包。
NoSQL = 你的手账本/日记本,可以贴照片、画画、写文字,甚至夹电影票,完全随心所欲!
NoSQL 四大金刚(4种主要类型)
- 文档型:像 JSON 文件,例如 MongoDB。存放“简历”一样灵活的文档。
- 键值型:最简单的“绰号→本人”,例如 Redis。 超快查找。
- 列族型:HBase 属于这一类! 下面会详细介绍 👇
- 图类型:存储人和人之间的关系,比如社交网络好友推荐。
NoSQL 的优点(为什么需要它?)
- 数据量巨大时也能飞快读写 (海量数据)
- 可以随时增加新的字段,不用改动旧结构
- 容易在多台机器上“分布式”运行,成本低
- 很适合存储图片、评论、游戏数据、物联网信息等
HBase 列族数据库 · 大数据明星
HBase是 Apache 开源的一个NoSQL 列式存储数据库,它建立在 Hadoop(大数据技术家族)之上,可以存储几十亿行 × 几百万列的超大表格!
超级图书馆类比
普通图书馆(SQL):每本书要按编号放好,改位置很麻烦。
HBase 图书馆:有无数个书架,你可以按“读者ID+时间戳”快速找到任何一本书,还能存不同版本的笔记。特别适合存储互联网公司每天产生的海量日志、推荐数据!
HBase 核心特点
- 列式家族存储:数据按“列族”分组,比如“个人信息”列族包含姓名、年龄,“成绩”列族包含数学、语文。不用的列不占用空间。
- 水平扩展:加一台普通电脑就能存储更多数据,性能几乎线性增长。
- 自动版本管理:每个单元格可以保存多个历史版本(像“时光机”)。
- 强一致性:读到的永远是最新写入的数据,不会混乱。
- 随机读写 + 范围扫描:可以精确查找某一行,也可以扫描一个范围的数据。
NoSQL vs 传统SQL:餐厅点菜对比
HBase 怎么工作的?(架构小漫画)
HBase 采用主从架构,主要有三个角色:
- HMaster: 总管理员,负责分配数据到哪台机器,处理失败节点。
- RegionServer: 工作小弟,负责真正的读写数据,每个 RegionServer 管理若干“Region”(数据分片)。
- HDFS: 底层仓库,数据最终存在硬盘上,且自动复制多份保证安全。
现实生活里 HBase 用来做什么?
许多世界500强公司都在用 HBase 来存储海量数据:
- 小米 / 快手:存储用户行为日志、推荐系统特征。
- Facebook:消息系统和海量指标监控(早期消息组件用HBase)。
- 阿里巴巴:存储商品交易记录、用户历史浏览等。
- 电信运营商:话单查询、位置信息存储,一秒内查询上亿条数据。
NoSQL 与 HBase 的关系图
NoSQL 是一个大家族,HBase 是这个家族里特别能打的一位成员 ——列族数据库代表。
就像 “水果”包含苹果、香蕉,而 HBase 就是那个“大榴莲” ,外表可能有点复杂,但内在无敌海量存储!
实验内容
在已安装好的Hadoop环境基础上,安装并配置HBase。
实验步骤
1.首先在Linux本地,新建/data/hbase1目录,用于存放所需文件。
mkdir -p /data/hbase1切换目录到/data/hbase1下,使用wget命令,下载HBase所需安装包hbase-1.0.0-cdh5.4.5.tar.gz。
cd /data/hbase1 wget http://192.168.1.150:60000/allfiles/hbase1/hbase-1.0.0-cdh52.将/data/hbase1目录下,HBase的安装包hbase-1.0.0-cdh5.4.5.tar.gz,解压缩到/apps目录下。
tar -xzvf /data/hbase1/hbase-1.0.0-cdh5.4.5.tar.gz -C /apps再切换到/apps目录下,将/apps/hbase-1.0.0-cdh5.4.5/,重命名为hbase。
cd /apps mv /apps/hbase-1.0.0-cdh5.4.5/ /apps/hbase3.添加HBase的环境变量。首先使用vim打开用户环境变量文件。
sudo vim ~/.bashrc在环境变量文件末尾位置,追加HBase的bin目录路径相关配置,并保存退出。即下列内容:
#hbase export HBASE_HOME=/apps/hbase export PATH=$HBASE_HOME/bin:$PATH执行source命令,使环境变量生效。
source ~/.bashrc此时就可以调用HBase的bin目录下的脚本了。先来查看一下HBase的版本信息。
hbase version4.下面开始配置HBase。切换目录到/apps/hbase/conf目录下,并使用vim编辑hbase-env.sh文件。
cd /apps/hbase/conf vim hbase-env.sh追加配置内容到hbase-env.sh中,并保存退出。
export JAVA_HOME=/apps/java export HBASE_MANAGES_ZK=true export HBASE_CLASSPATH=/apps/hbase/conf很明显:
JAVA_HOME为java程序所在位置;
HBASE_MANAGES_ZK表示是否使用HBase自带的zookeeper环境;
HBASE_CLASSPATH指向hbase配置文件的路径。
5.下面使用vim打开hbase-site.xml文件。
vim hbase-site.xml在两个<configuration>之间添加如下内容,并保存退出。
<property> <name>hbase.master</name> <value>localhost</value> </property> <property> <name>hbase.rootdir</name> <value>hdfs://localhost:9000/hbase</value> </property> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <property> <name>hbase.zookeeper.quorum</name> <value>localhost</value> </property> <property> <name>hbase.zookeeper.property.dataDir</name> <value>/data/tmp/zookeeper-hbase</value> </property>配置项说明:
hbase.master:HBase主节点地址。
hbase.rootdir:HBase文件所存储的位置。
hbase.cluster.distributed:HBase是否为分布式模式。
hbase.zookeeper.quorum:这里是配置ZooKeeper的服务器的地方。
hbase.zookeeper.property.dataDir:这里表示HBase在ZooKeeper上存储数据的位置。
注意:这里hbase.zookeeper.property.dataDir目录,需要提前创建。
sudo mkdir -p /data/tmp/zookeeper-hbase将/data/tmp/zookeeper-hbase目录切换所属用户为zhangyu及用户组为zhangyu。
sudo chown -R zhangyu:zhangyu /data/tmp/zookeeper-hbase6.使用vim编辑/apps/hbase/conf/regionservers文件,此文件存储了HBase集群节点的ip地址,目前只有一台节点,所以只需要填写localhost即可。
vim /apps/hbase/conf/regionservers修改文件内容为:
localhost7.下面输入jps,查看当前进程,Hadoop进程是否已经启动。
jps若未启动,则切换到/apps/hadoop/sbin目录下,启动Hadoop。
cd /apps/hadoop/sbin ./start-all.sh当Hadoop相关进程启动后,进入HBase的bin目录下,启动HBase服务。
cd /apps/hbase/bin/ ./start-hbase.sh8.输入jps,查看HBase相关进程是否存在。
jps输出结果为:
可以看到HMaster、HRegionServer、HQuorumPeer进程都已启动。
为了进一步测试HBase安装,是否正常,进入HBase Shell接口。
hbase shell注意:如果我们使用SecureCRT这样的远程访问工具,输错命令时,直接按Backspace键,是不能删除掉前面的文字的。在这里可以使用Ctrl键+Backspace键来删除前面输错的文字。
输入list的命令,查看当前有哪些HTable表。
list创建一张表tb,表中含有一个列簇mycf。
create 'tb','mycf'再次输入list,列出HBase中的表。
到此hbase的安装测试都已完毕!
