介绍
HBase 是一个开源的分布式、可扩展的 NoSQL 数据库,基于 Hadoop 的 HDFS(Hadoop Distributed File System)构建,主要用于处理大规模的结构化数据。它提供了随机、实时的读写访问,适合于需要快速查询和更新的场景。
原理
HBase 的工作原理可以分为以下几个关键部分:
- 数据模型:HBase 使用列族(Column Family)和行键(Row Key)来组织数据。数据以表格的形式存储,但与传统关系型数据库不同,HBase 的表可以有动态列。
- 存储结构:HBase 将数据分为多个区域(Region),每个区域包含一部分数据。区域会根据数据量自动分裂,以实现负载均衡。
- 读写操作:HBase 支持快速的随机读写操作。写入数据时,数据首先写入内存中的 MemStore,然后定期刷新到磁盘上的 HFile 中。读取数据时,HBase 会在 MemStore 和 HFile 中查找所需数据。
- 分布式架构:HBase 采用主从架构,主节点(Master)负责管理区域的分配和负载均衡,而从节点(Region Server)负责实际的数据存储和处理。
作用
HBase 的主要作用是提供高效的实时数据存储和访问,适用于需要快速查询和更新的应用场景,如社交网络、在线广告、物联网等。
例子
- 数据模型:想象你在一个图书馆,书籍按照作者(行键)和类别(列族)进行分类。每本书可以有不同的章节(动态列),这就类似于 HBase 的数据模型。
- 存储结构:图书馆的书籍被分成多个书架(区域),每个书架上放置一定数量的书籍。当某个书架上的书籍太多时,图书馆会将其分成两个书架,以便更好地管理和查找。这就像 HBase 中的区域分裂。
- 读写操作:当你借书时,首先会在图书馆的前台登记(写入 MemStore),然后图书馆会定期更新书籍的借阅记录(写入 HFile)。当你想查找一本书时,图书馆会先在前台查找(查找 MemStore),如果找不到,再去书架上查找(查找 HFile)。
- 分布式架构:图书馆有一个管理员(主节点),负责管理所有书架和书籍的分配,而每个书架上都有工作人员(从节点),负责维护和管理书籍。这种分工使得图书馆能够高效运作,类似于 HBase 的分布式架构。
前提工作
- 搭建hbase之前可先搭建zookeeper
cd /opt/module
# 解压
tar -zxvf hbase-2.4.11-bin.tar.gz
# 重命名
mv hbase-2.4.11-bin hbase
环境变量
代码语言:shell复制# 编辑配置文件
vim /etc/profile
# HBASE_HOME
export HBASE_HOME=/opt/module/hbase
export PATH=:$HBASE_HOME/bin:$PATH
# 加载环境变量使其生效
source /etc/profile
搭建
代码语言:shell复制# 将Hadoop相关配置文件拷贝至conf目录下
cp core-site.xml hdfs-site.xml /opt/module/hbase/conf
# 修改配置文件
# hbase-env.sh
vim hbase-env.sh
export JAVA_HOME=/opt/module/jdk
export HBASE_MANAGES_ZK=false
export HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP=true
# hbase-site.xml
vim hbase-site.xml
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://hadoop102:8020/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>hadoop102:2181,hadoop103:2181,hadoop104:2181</value>
</property>
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
</configuration>
# regionservers
vim regionservers
hadoop102
hadoop103
hadoop104
分发
代码语言:shell复制# 远程拷贝
scp -r /opt/module/hbase hadoop103:/opt/module/
scp -r /opt/module/hbase hadoop104:/opt/module/
启动
- 切换至hadoop102
- 启动hbase之前需要先启动Hadoop以及zookeeper
# 启动hbase
start-hbase.sh
# 启动hbase shell
hbase shell
检查结果
- hbase shell 输入list看看有无报错