hbase集群 数据写入_HBase海量数据存储

本文详细介绍了HBase,一个基于HDFS的非关系型数据库,专注于海量数据存储。内容包括HBase的特点,如列式存储、准实时查询、多版本等。深入解析了HBase的表结构、物理模型,包括Region、RegionServer、Master和Zookeeper的角色。此外,还涵盖了HBase的读写流程、Zookeeper在其中的作用以及如何搭建和管理HBase集群。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HBase

HBase是一个基于HDFS的非关系型数据库(海量数据存储)

HBase的特点

1.海量数据存储,HBase中的表可以容纳上百亿行x上百万列的数据。

2.列式存储,HBase中的数据是基于列进行存储的,能够动态的增加和删除列。

3.准实时查询,HBase在海量的数据量下能够接近准实时的查询(百毫秒以内)

4.多版本,HBase中每一列的数据都有多个版本。

5.高可靠性,HBase中的数据存储于HDFS中且依赖于Zookeeper进行Master和RegionServer的协调管理。

1.HBase的表结构

HBase中的表由RowKey、ColumnFamily、Column、Timestamp组成。

RowKey

记录的唯一标识,相当于关系型数据库中的主键。

RowKey的最大长度为64KB且按字典顺序进行排序存储。

HBase会自动为RowKey加上索引,当按RowKey查询时速度会很快。

ColumnFamily

列簇是列的命名空间,是逻辑上类型相同的一组列,每个列簇下可以有任意数量的列,HBase在创建表时只需要指定表名以及列簇(表中的列簇最好不超过5个)

列簇下的列有着相同的前缀,使用冒号来对列簇和列名进行分隔。

Column

当创建了一张HBase的表时,默认只有列簇,列只有在插入数据后才存在(列在列簇下是有序的),为空的列不占用存储空间。

Timestamp

每个列的value都有多个版本,每个版本对应一个时间戳,在进行插入时由HBase自动进行赋值。

2.HBase的物理模型

2.1 Region

HBase表中的数据存储在Region当中,每个Region都包含MemoryStore和StoreFile,MemoryStore位于内存当中,每个列簇都对应一个MemoryStore,而StoreFile存储在HDFS当中,每当MemoryStore中的数据达到128M时将会生成一个StoreFile并写入到HDFS中。

由Master将新的Region分配到相应的RegionServer中,实现负载均衡。

2.2 RegionServer

RegionServer负责管理Region,会将Region所产生的StoreFile写入到HDFS当中,同时当Reigon中的StoreFile超过一定的数量时,会对StoreFile进行合并,当StoreFile的文件大小达到指定的阀值时,会对Region进行切分。

RegionServer负责对表中的数据进行操作(插入、删除、查询、更新)

2.3 Master

Master负责对表进行操作,同时当RegionServer对Region进行切分后,Master会将新的Region分配给合适RegionServer进行管理(负载均衡),当RegionServer宕机后负责RegionServer上的Region迁移(通过WAL日志)

如果Master失效了仅会导致mete数据和表无法被修改,表中的数据仍然可以进行读取和写入。

2.4 关于Zookeeper在HBase中的作用

当HBase集群启动后,Master和RegionServer会分别向Zookeeper进行注册,并且在Zookeeper中保存meta表数据、Region与RegionServer的关系,以及RegionServer的访问地址等信息。

meta表中维护着TableName与RowKey、RowKey与Region的关系。

1.存放HBase的meta表数据、Region与RegionServer的关系、以及RegionServer的访问地址等信息。

2.保证Master的高可用,当状态为Active的Master无法对外提供服务时,会将状态为StandBy的Master切换为Active状态。

3.实时监控RegionServer,当某个RegionServer节点无法提供服务时将会通知Master,由Master进行RegionServer上的Region迁移。

2.5 HBase处理读请求的流程

1.HBase Client连接Zookeeper,根据TableName和RowKey从Zookeeper中查询这些记录对应存放的Region以及所关联的RegionServe。

2.HBase Client请求这些RegionServer并找到对应的Region。

3.如果Region的MemoryStore中存在目标的RowKey则直接从MemoryStore中进行查询,否则从StoreFile中进行查询。

2.6 HBase处理写请求的流程

1.HBase Client连接Zookeeper,根据TableName找到其Region列表及其关联的RegionServer。

2.然后通过一定的算法计算出数据要写入的Region,并依次连接要写入的Region其对应的RegionServer。

3.然后把数据写入到HLog和Region的MemoryStore中。

4.每当MemoryStore中的大小达到128M时,会生成一个StoreFile,并写入到HDFS中。

5.当StoreFile的数量超过一定时,会进行StoreFile的合并,将多个StoreFile文件合并成一个StoreFile,当StoreFile的文件大小超过指定的阈值时,会进行Region的切分,由Master将新的Region分配给合适的RegionServer进行管理(负载均衡)

HBase Client会在第一次读取或写入时才需要连接Zookeeper,会将Zookeeper中的相关数据缓存到本地,往后直接从本地进行查询,当Zookeeper中的信息发生改变时,将会通过通知机制去通知HBase Client进行更新。

2.7 HBase在HDFS中的目录

tmp目录:当创建和删除HBase的表时,会将表移动到该目录中进行操作。

MasterProcWALs目录:预写日志目录,主要用于存储Master的操作日志。

WALs目录:预写日志目录,主要用于存储RegionServer的操作日志。

data目录:存放Region中的StoreFile。

hbase.id文件:HBase集群的唯一标识。

hbase.version文件:HBase集群的版本号。

oldWALs目录:当WALs目录下的日志文件超过一定时间后,会将其移动到oldWALs目录中,Master会定期进行清理。

3.搭建HBase集群

3.1 安装JDK

由于HBase是通过JAVA语言编写的,因此需要安装JDK并配置好JAVA_HOME环境变量。

3.2 启动HDFS集群

由于HBase是基于HDFS的,因此需要安装Hadoop并启动HDFS集群。

3.3 启动Zookeeper集群

由于HBase需要在Zookeeper中保存meta信息以及Region与RegionServer的关系,同时需要依赖Zookeeper保证Master节点的高可用,因此需要搭建Zookeeper集群(HDFS的NameNode也需要通过Zookeeper保证高可用)

3.4安装HBase

1.从CDH中下载HBase并进行解压 。

3.5 修改配置

1.修改hbase-env.sh配置文件

#设置JDK的安装目录

export JAVA_HOME=/usr/jdk8/jdk1.8.0_161

#true则使用hbase自带的zk服务,false则使用外部的zk服务.

export HBASE_MANAGES_ZK=flase

2.修改hbase-site.xml配置文件

hbase.tmp.dir

/usr/hbase/hbase-1.2.8/logs

hbase.rootdir

hdfs://nameservice:8020/hbase

hbase.cluster.distributed

true

hbase.zookeeper.quorum

192.168.1.80:2181,192.168.1.81:2181,192.168.1.82:2181

4.修改regionservers文件,配置充当RegionServer的节点

值可以是主机名或者IP地址。

如果Hadoop配置了HDFS高可用集群,那么就会有两个NameNode和一个NameService,此时就需要将HDFS的core-site.xml和hdfs-site.xml配置文件复制到HBase的conf目录下,且hbase-site.xml配置文件中的hbase.rootdir配置项的HDFS地址要指向NameService的名称。

5.NTP时间同步

NTP是一个时间服务器,作用是使集群中的各个节点的时间都保持一致。

由于在HBase集群中,Zookeeper与HBase对时间的要求较高,如果两个节点之间的时间相差过大,那么整个集群就会崩溃,因此需要使各个节点的时间都保持一致。

#查看是否安装了NTP服务

rpm -qa|grep ntp

#安装NTP服务

yum install ntp -y

#从NTP服务器中获取时间并同步本地

ntpdate 192.168.1.80

在实际的应用场景中,可以自己搭建NTP服务器,也可以使用第三方开源的NTP服务器,如阿里等。

使用 “ntpdate NTP服务器地址” 命令从NTP服务器中获取时间并同步本地,一般配合Linux的crontab使用,每隔5分钟进行一次时间的同步。

3.6 启动集群

bin/start-hbase.sh

当执行start-

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值