一文彻底搞懂HBase
Posted 刘元涛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一文彻底搞懂HBase相关的知识,希望对你有一定的参考价值。
本文是基于CentOS 7.9系统环境,进行HBase的学习和使用
一、HBase的简介
1.1 HBase基本概念
HBase是一种分布式、可扩展、支持海量数据存储的NoSQL数据库,可以解决HDFS随机写的问题
1.2 HBase数据模型
逻辑上,HBase的数据模型同关系型数据库很类似,数据存储在一张表中,有行有列。但从HBase的底层物理存储结构(K-V)来看,HBase更像是一个multi-dimensional map
-
Name Space
命名空间,类似于关系型数据库的DatabBase概念,每个命名空间下有多个表。HBase有两个自带的命名空间,分别是hbase和default,hbase中存放的是HBase内置的表,default表是用户默认使用的命名空间。
-
Region
类似于关系型数据库的表概念。不同的是,HBase定义表时只需要声明列族即可,不需要声明具体的列。这意味着,往HBase写入数据时,字段可以动态、按需指定。因此,和关系型数据库相比,HBase能够轻松应对字段变更的场景。
-
Row
HBase表中的每行数据都由一个RowKey和多个Column(列)组成,数据是按照RowKey的字典顺序存储的,并且查询数据时只能根据RowKey进行检索,所以RowKey的设计十分重要。
-
Column
HBase中的每个列都由Column Family(列族)和Column Qualifier(列限定符)进行限定,例如info:name,info:age。建表时,只需指明列族
,而列限定符无需预先定义。 -
Time Stamp
用于标识数据的不同版本(version),每条数据写入时,如果不指定时间戳,系统会自动为其加上该字段,其值为写入HBase的时间。
-
Cell
由{rowkey, column Family:column Qualifier, time Stamp} 唯一确定的单元。cell中的数据是没有类型的,全部是字节码形式存储
1.3 HBase逻辑结构
这种逻辑结构,采用避免全表扫描的分区策略
1.4 HBase物理存储结构
HBase依赖时间戳进行数据的管理,因此时间戳对于HBase十分重要,一定要确保不同系统之间的时间一致,否则在操作HBase时会出现各种异常错误
1.5 HBase基础架构
-
Region Server
Region Server为 Region的管理者,其实现类为HRegionServer,主要作用如下:
对于数据的操作:get, put, delete
对于Region的操作:splitRegion、compactRegion -
Master
Master是所有Region Server的管理者,其实现类为HMaster,主要作用如下:
对于表的操作:create,delete,alter,select
对于RegionServer的操作:分配regions到每个RegionServer,监控每个RegionServer的状态,负载均衡和故障转移 -
Zookeeper
HBase通过Zookeeper来做Master的高可用、RegionServer的监控、元数据的入口以及集群配置的维护等工作
-
HDFS
HDFS为HBase提供最终的底层数据存储服务,同时为HBase提供高可用的支持
二、HBase的伪分布式安装
2.1 HBase依赖环境
(1) Hadoop启动
sbin/start-dfs.sh
sbin/start-yarn.sh
sbin/mr-jobhistory-daemon.sh start historyserver
2.2 HBase安装
(1) HBase解压
tar -xzvf hbase-1.3.1-bin.tar.gz -C /opt/module
(2) 配置regionservers
vi /opt/module/hbase/conf/regionservers
# 添加内容如下
192.168.0.109
(3) 配置hbase-env.sh
vi /opt/module/hbase/conf/hbase-env.sh
# 修改内容如下
export JAVA_HOME=/opt/module/jdk1.8.0_201
# 注释内容
# export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m"
# export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m"
# 修改内容如下
export HBASE_MANAGES_ZK=true
(4) 配置hbase-site.xml
首先创建一个zkData目录
mkdir -p /opt/module/hbase/data/zkData
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://192.168.0.109:9000/HBase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- 0.98后的新变动,之前版本没有.port,默认端口为60000 -->
<property>
<name>hbase.master.port</name>
<value>16000</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/opt/module/hbase/data/zkData</value>
</property>
</configuration>
(5) 配置hadoop的软连接到hbase
ln -s /opt/module/hadoop-2.7.2/etc/hadoop/core-site.xml /opt/module/hbase/conf/core-site.xml
ln -s /opt/module/hadoop-2.7.2/etc/hadoop/hdfs-site.xml /opt/module/hbase/conf/hdfs-site.xml
2.3 HBase启动
(1) HBase启动zookeeper
cd /opt/module/hbase/
bin/hbase-daemon.sh start zookeeper
(2) HBase启动master
cd /opt/module/hbase/
bin/hbase-daemon.sh start master
(3) HBase启动regionserver
cd /opt/module/hbase/
bin/hbase-daemon.sh start regionserver
(4) HBase停止regionserver
cd /opt/module/hbase/
bin/hbase-daemon.sh stop regionserver
(5) HBase停止master
cd /opt/module/hbase/
bin/hbase-daemon.sh stop master
(6) HBase停止zookeeper
cd /opt/module/hbase/
bin/hbase-daemon.sh stop zookeeper
(7) HBase集群启动
cd /opt/module/hbase/
bin/start-hbase.sh
(8) HBase集群停止
cd /opt/module/hbase/
bin/stop-hbase.sh
三、HBase的完全分布式安装
3.1 HBase依赖环境
(1) zookeeper启动
#启动所有zookeeper集群节点
cd /opt/module/zookeeper-3.4.10
bin/zkServer.sh start
(2) Hadoop启动
sbin/start-dfs.sh
sbin/start-yarn.sh
3.2 HBase安装
(1) HBase解压
tar -xzvf hbase-1.3.1-bin.tar.gz -C /opt/module
(2) 配置regionservers
vi /opt/module/hbase/conf/regionservers
# 添加内容如下
hadoop101
hadoop102
hadoop103
(3) 配置hbase-env.sh
vi /opt/module/hbase/conf/hbase-env.sh
# 修改内容如下
export JAVA_HOME=/opt/module/jdk1.8.0_201
# 注释内容
# export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m"
# export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m"
# 修改内容如下
export HBASE_MANAGES_ZK=false
(4) 配置hbase-site.xml
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://hadoop101:9000/HBase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- 0.98后的新变动,之前版本没有.port,默认端口为60000 -->
<property>
<name>hbase.master.port</name>
<value>16000</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>hadoop101,hadoop102,hadoop103</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/opt/module/zookeeper-3.4.10/zkData</value>
</property>
</configuration>
(5) 配置hadoop的软连接到hbase
ln -s /opt/module/hadoop-2.7.2/etc/hadoop/core-site.xml /opt/module/hbase/conf/core-site.xml
ln -s /opt/module/hadoop-2.7.2/etc/hadoop/hdfs-site.xml /opt/module/hbase/conf/hdfs-site.xml
(6) 配置集群时间同步
安装ntp
yum -y install net-tools
yum -y install ntp
修改配置文件/etc/ntp.conf
vi /etc/ntp.conf
# 限制 192.168.1.0~192.168.255.255之间的服务器可以访问
restrict 192.168.1.0 mask 255.255.0.0 nomodify notrap
# 注释以下内容,因为集群在局域网中,所以不属于互联网其他时间
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
#添加以下信息,当失去互联网连接后,使用本机时间做同步
server 127.127.1.0
fudge 127.127.1.0 stratum 10
修改配置文件/etc/sysconfig/ntpd
vi /etc/sysconfig/ntpd
#添加以下信息,硬件时间与系统时间同步
SYNC_HWCLOCK=yes
hadoop101节点上启动ntp
systemctl stop chronyd
systemctl disable chronyd
systemctl start ntpd
systemctl enable ntpd
其他节点上启动ntp
crontab -e
# 编写定时任务如下:
*/10 * * * * /usr/sbin/ntpdate hadoop101
3.3 HBase启动
(1) HBase启动master
cd /opt/module/hbase/
bin/hbase-daemon.sh start master
(2) HBase启动regionserver
cd /opt/module/hbase/
bin/hbase-daemon.sh start regionserver
(3) HBase停止regionserver
cd /opt/module/hbase/
bin/hbase-daemon.sh stop regionserver
(4) HBase停止master
cd /opt/module/hbase/
bin/hbase-daemon.sh stop master
(5) HBase集群启动
cd /opt/module/hbase/
bin/start-hbase.sh
(6) HBase集群停止
cd /opt/module/hbase/
bin/stop-hbase.sh
以上是关于一文彻底搞懂HBase的主要内容,如果未能解决你的问题,请参考以下文章
图文详解一文全面彻底搞懂HBaseLevelDBRocksDB等NoSQL背后的存储原理:LSM-tree日志结构合并树...
图文详解一文全面彻底搞懂HBaseLevelDBRocksDB等NoSQL背后的存储原理:LSM-tree日志结构合并树...
图文详解一文全面彻底搞懂HBaseLevelDBRocksDB等NoSQL背后的存储原理:LSM-tree日志结构合并树...