HBase架构和部署(超级详细)

N.1 HBaes介绍

N.1.1 HBase简介

1)HBase是一个分布式的、面向列的开源数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。

(1)关系型数据库:

————————————————————————

————————————————————————

(2)非关系型数据库:

————————————————————————

————————————————————————

2)行式存储倾向于结构固定,列式存储倾向于结构弱化。

3)行式存储一行数据只需一份主键,列式存储把一行拆多行数据每行都有主键。

4)面向列的存储和权限控制,列(簇)独立检索。

5)稀疏:对于为空(null)的列,并不占用存储空间,因此,表的设计的非常的稀疏。

N.2 HBase架构

1)首先我们要知道HBase储存底层就是HDFS存储。

(这里的单词前面H表示Hadoop的意思,也可以省略)

2)一个HRegionServer可以包含多个HRegion,每个HRegionServer维护一个HLog,和多个HRegion。RegionServer运行于DataNode上,数量可以与DatNode数量一致。

(1)HMater(只能有一个active)类似于NameNode;

(2)HRegionServer类似于DataNode;

(3)HRegion是一张分区表,类似DataNode的数据块的切片;

(4)Store是分区表的某一些字段,即数据块的部分列簇;

(5)HFile就是Store里面的数据,storeFile是对HFile的包装,可以简单认为HFile是表的列簇

行数据和块索等引组成。

(6)Hlog和MemStore,是给用户读写数据用的。

————————————————————————

————————————————————————

N.2.1 HMaster

1)功能:

(1)监控HRegionServer

(2)处理HRegionServer故障转移,迁移HRegionServer

(3)处理元数据的变更

(4)管理用户对Table的增、删、改、查操作

(5)在空闲时间进行数据的负载均衡,管理HRegionServer的负载均衡,调整Region分布

(6)通过Zookeeper发布自己的位置给客户端

(7)HMaster没有单点问题,HBase中可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master运行

N.2.2 HRegionServer

1)功能:

(1)HRegionServer内部管理了一系列HRegion对象,每个HRegion对应了Table中的一个Region,HRegion中由多个HStore组成。每个HStore对应了Table中的一个Column Family的存储,可以看出每个Column Family其实就是一个集中的存储单元,因此最好将具备共同IO特性的column放在一个Column Family中,这样最高效。

(2)负责存储HBase的实际数据

(3)处理分配给它的HRegion

(4)刷新缓存到HDFS  

(5)维护HLog

(6)执行压缩

(7)负责处理HRegion分片

2)组件:

(1) Write-Ahead logs

HBase的修改记录,当对HBase写数据的时候,数据不是直接写进磁盘,它会在内存中保留一段时间(时间以及数据量阈值可以设定)。但把数据保存在内存中可能有更高的概率引起数据丢失,为了解 决这个问题,数据操作等先写在一个叫做Write-Ahead logfile的文件中,然后再写入内存中。所以在系统出现故障的时候,数据可以通过这个日志文件重建。 

(2) HRegion(和split类似)

HBase表的分片,HBase表会数据过多会被切分成不同的HRegion并存储在HRegionServer中,在一个HRegionServer中可以有多个不同的HRegion。

(3) Store(column family)

HStore存储是HBase存储的核心了,其中由两部分组成,一部分是MemStore,一部分是StoreFiles

一个Store对应HBase表中的一个列簇(列簇有多个列组成,表如果有很多个字段(列),就可能分成好多个列簇)。

(4)HLog

每个HRegionServer中都有一个HLog对象,HLog是一个实现Write Ahead Log的类,在每次用户操作写入MemStore的同时,也会写一份日志到HLog文件中(注意,日志不是那些真正的数据,记入了一些行为记录。HLog文件定期会滚动(多个小日志)出新的

(5) MemStore & StoreFiles

[1] MemStore

顾名思义,就是内存存储,位于内存中,用来保存当前的数据操作,所以当日志信息保存在 Write-Ahead logs中之后,HRegsionServer会在内存中存储键值对。 

HStore存储是HBase存储的核心了,其中由两部分组成,一部分是MemStore,一部分是StoreFiles(即HFile,可以类似认为一个字段的所有数据,也可能是多个字段,主要看多少数据) MemStore是Sorted Memory Buffer,

[2] StoreFiles

用户写入的数据先log,后MemStore,当MemStore满了以后会Flush成一个StoreFile(底层实现是HFile),当StoreFile文件数量增长到一定阈值,会触发Compact合并操作,将多个StoreFiles合并成一个StoreFile,合并过程中会进行版本合并和数据删除,因此可以看出HBase其实只有增加数据,所有的更新和删除操作都是在后续的compact过程中进行的,这使得用户的写操作只要进入内存中就可以立即返回,保证了HBase I/O的高性能。(所以如果是写比较多的话,就使用一个Store好,即列簇少点,这样内存刷新落盘的次数比较少。如果是读多的话可以使用多个Store,即列簇多点,因为这样可以准确定位,避免全部扫描)。

compact机制则是把flush出来的小文件合并成大的Storefile文件。当单个StoreFile大小超过一定阈值后,会触发Split操作,同时把当前HRegion Split拆成2个HRegion被HMaster分配到相应的HRegionServer上,使得原先1个HRegion的压力得以分流到2个HRegion上

————————————————————————

————————————————————————

(6)HFile

这是在磁盘上保存原始数据的实际的物理文件,

是实际的存储文件。HFile存储在StoreFile中,一对一关系,相当于包装了一下。

可以简单认为HFile是表的几行数据。storefile包装的一行数据。

Hfile的结构:dataBlock的大小是64KB;

————————————————————————

————————————————————————

N.2.3 Compact

1)Compact的作用:

在Memstore超过一定的阈值的时候,就要新开一个进程将Memstore flush到storefile中,新的Memstore继续写入接受到的数据,当storefile越来越多时,就会降低读的性能,为了提高读的性能,可以对这些storefile进行compact操作,形多个storefile合并成一个大的storefile,那么compact就需要对HBase的数据进行多次的重新读写,这将产生大量的IO操作,所以Compact操作就是以IO操作来换取后面读的性能。当storefile数量超过3时,会启动compaction过程将它们合并为⼀个storefile

2)Compaction 分类:

在完成 Compaction 后,HFile 文件数量减少,文件大小减小,能够显著提高读数据的效率。其中 (1)Compaction 方式又分为两种:

[1] MinorCompaction小合并

只对部分的StoreFile(HFile)做合并成一个StoreFile(HFile),对TTL(TimeToLive存活时间)过期数据设置过期清理,不会对文件内容进行清除操作工作。

[2] MajorCompaction大合并

是对所有StoreFile(HFile)合并为一个大文件,并且清除删除、过期、多余版本的数据在企业中,MajorCompaction 时间会持续比较长,整个过程会消耗大量系统资源,对上层业务有比较大的影响,一般也是配置了一个datacube.hregion.majorcompaction=0,这是配置major的合并周期(默认为7天),很多集群配置成一天,如果配置成0即关闭Major合并。

N.2.4 HBase数据恢复原理

0)HLog的整个生命历程可以使用下面一张图来表示

————————————————————————

————————————————————————

1)第一步 HLog滚动 

HBase后台启动了一个线程会每隔一段时间(由参数’hbase.regionserver.logroll.period’决定,默认1小时)进行日志滚动,即新生成一个新的日志文件。可见,HLog日志文件并不是一个大文件,而是会产生很多小文件,最早的部分日志完全可以被删掉。而删除数据最好是一个文件整体删除,因此设计了日志滚动机制(滚动出多个日志),方便日志的整体删除。

2)Hlog回滚机制(数据恢复)

HMaster首先会处理遗留的 HLog文件,将其中不同HRegion的Log数据进行拆分,然后再将失效的HRegion重新分配,领取 到这些HRegion的HRegionServer在Load HRegion的过程中,会发现有历史HLog需要处理,重新将HLog中的数据加载到MemStore中,然后flush到StoreFiles,完成数据恢复

3)第二步 HLog失效 

(1)上文提到,很多日志在之后会因为失效进而可以被删除,并且删除操作是以文件为单元执行的。那怎么判断一个日志文件里面的数据失效了呢?首先从原理上讲一旦数据从Memstore中落盘,对应的日志就可以被删除,因此一个文件所有数据失效,只需要看该文件中最大sequenceID对应的数据是否已经落盘就可以,HBase会在每次执行flush的时候纪录对应的最大的sequenceid(不同HRegion的sequenceid相互独立),如果前者小于后者,则可以认为该日志文件失效(前者小于后者是操作成功的标志,如果不成功,重新进行任务,直到前者小于后者,该日志失效。

(2)可以"类似"的认为sequenceID相当于文本的偏移量一样,文本最后的偏移量一定是最大的,如果写完后把实际的偏移量与最大的比较下,若实际偏移量等于最大偏移量的说明写成功了。一旦判断失效就会将该文件从Write-Ahead logs文件夹移动到OldWrite-Ahead logs文件夹。 

4)第三步 HLog删除 

HMaster后台会启动一个线程每隔一段时间(由参数’hbase.master.cleaner.interval’,默认1分钟)会检查一次文件夹OldWALs下的所有失效日志文件,确认是否可以被删除,确认之后执行删除操作。

那问题来了,刚才不是已经确认可以被删除了吗?这里基于两点考虑, 到达两次失效失效,HLog会进行删除。

(1)对于使用HLog进行主从复制的业务来说,HLog失效 确认并不完整,需要继续确认是否该HLog还在应用于主从复制;

(2)对于没有执行主从复制的业务来讲,HBase依然提供了一个过期的TTL(由参数’hbase.master.logcleaner.ttl’决定,默认10分钟),也就是说OldWALs里面的文件最多依然再保存10分钟。

N.3 HBase部署

0)前提环境

安装 Java、SSH 和 HadoopHDFS 以后。

如果hbase单机安装是可以不安装hadoop的,但是如果要分布式安装,就需要安装haoop.

1)HBase的解压

解压HBase到指定目录:

tar -zxvf /softWare/hbase-1.3.1-bin.tar.gz -C /softWare

配置环境变量

2) HBase的配置文件

(1)hbase-env.sh修改内容:

export JAVA_HOME=/softWare/jdk1.8.0_144

export HBASE_MANAGES_ZK=false

(2)hbase-site.xml修改内容:

        <property>  

                 <name>hbase.rootdir</name>  

                 <value>hdfs://bigData111:9000/hbase</value>  

        </property>

        <property>

                 <name>hbase.cluster.distributed</name>

                 <value>true</value>

        </property>

        <property>

                 <name>hbase.master.port</name>

                 <value>16000</value>

        </property>

        <property>  

                 <name>hbase.zookeeper.quorum</name>

                <value>bigData111:2181,bigData1112:2181,bigData1113:2181</value>

        </property>

        <property>  

                 <name>hbase.zookeeper.property.dataDir</name>

         <value>/softWare/zookeeper-3.4.10/zkData</value>

        </property>

<property>

<name>hbase.master.maxclockskew</name>

<value>180000</value>

</property>

(3)conf/regionserver文件添加域名:

bigdata111

bigdata112

bigdata113

3)配置环境变量

vi /etc/profile

export HBASE_HOME=/softWare/hbase-1.3.1

export PATH=$HBASE_HOME/bin:$PATH

source /etc/profile

4) HBase远程scp到其他集群

scp -r /softWare/hbase-1.3.1/ bigdata112:/softWare/

scp -r /softWare/hbase-1.3.1/ bigdata113:/softWare/

5)HBase服务的启动

(1)启动方式1:

bin/hbase-daemon.sh start master

bin/hbase-daemon.sh start regionserver

尖叫提示:如果集群之间的节点时间不同步,会导致regionserver无法启动,抛出ClockOutOfSyncException异常。

(2)启动方式2:

start-hbase.sh

对应的停止服务:

stop-hbase.sh

6)查看Hbse页面

http://bigData111:16010查看能否进入hbase页面

http://bjigData111:50070查看是否生成目录hbase

7) Zookeeper中hbase的节点的存储信息(此步骤可略)

(1)rs:regionserver节点信息,命令 ls /hbase/rs

(2)table-lock:hbase的除meta以外的所有表,ls /hbase/table-lock

(3)Table:hbase的所有的表,ls /hbase/table

(4)注:HBase运行了一段时出现自动停止进程,情况如下:

[1] 时间没有同步(解决:将时间同步起来)

[2] zookeeper异常

(5)解决:删除zookeeper的HBase节点、删除hdfs的 /HBse的目录,

删除每个HBase的每一个log日志,重新启动

(6)特别注意,开启HBase进程,电脑最好不要待机,会导致自动关闭进程,一旦出现了一次,要么重新安装要么按方法二处理。

原文地址:https://blog.csdn.net/weixin_43871785/article/details/130493933

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


文章浏览阅读301次。你可以使用Thrift客户端来测试HBase Thrift服务。例如,在Python中,你可以使用。请确保你的HBase伪集群已正确配置并且Thrift服务已经启动。这将在你的伪集群中启动HBase Thrift服务。库或者直接使用Thrift接口。进入HBase的安装目录,找到。请根据需要进行相应的配置。这将停止Thrift服务。_hbase 单机 thrift 配置
文章浏览阅读565次。hive和hbase数据迁移_hive转hbase
文章浏览阅读707次。基于单机版安装HBase,前置条件为Hadoop安装完成,安装Hadoop可以参考链接,Hadoop单机安装。地址:https://dlcdn.apache.org/hbase/2.4.13/hbase-2.4.13-src.tar.gz2.解压缩文件3.进入到conf目录下4.修改配置文件 hbase-env.sh示例:示例:6.修改配置文件 hbase-site.xml示例:8.访问页面访问你所以在服务器的16010端口,查看页面以上就是单机版安装HBase的内容,后续_hbase 2.4.13下载
文章浏览阅读301次。linux集群搭建-HBase_linux中在/home目录下创建目录hbase
文章浏览阅读933次。中没有库的概念,说一个数据说的是哪一个名称空间下的那一张表下的哪一个行键的哪一个列族下面的哪一个列对应的是这个数据。注意:put数据需要指定往哪个命名空间的哪个表的哪个rowKey的哪个列族的哪个列中put数据,put的值是什么。注意:put数据需要指定往哪个命名空间的哪个表的哪个rowKey的哪个列族的哪个列中put数据,put的值是什么。注意:put数据需要指定往哪个命名空间的哪个表的哪个rowKey的哪个列族的哪个列中put数据,put的值是什么。操作Hbase系统DDL,对名称空间等进行操作。_hbase中报错undefined method for main:object
文章浏览阅读1k次,点赞16次,收藏21次。整理和梳理日常hbase的监控核心指标,作为经验沉淀_hbase 对应promethus指标名
文章浏览阅读1.5k次,点赞45次,收藏20次。今天把之前学习Hbase的入门基础知识笔记翻出来了,为了不忘记也是帮助身边的小伙伴,我把他又整理了下放了出来给大家,希望对HBASE一知半解的小伙伴,能够对Hbase有一个清晰的认识,好了废话不多说,进入正题。以上内容就是初的识HBase 入门知识,包含了hbase的由来,特性,物理存储,逻辑存储模型,以及优缺点,应用场景这些内容,相信后面在使用或更深入的研究Hbase打下了良好的基础,后面的更深入的学习内容,看计划安排在后面的文章中进行更新。
文章浏览阅读655次。HDFS,适合运行在通用硬件上的分布式文件系统,是一个高度容错性的系统,适合部署在廉价的机器上。Hbase,是一个分布式的、面向列的开源数据库,适合于非结构化数据存储。MapReduce,一种编程模型,方便编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。Chukwa,是一个开源的用于监控大型分布式系统的数据收集系统。_开源非结构化数据存储
文章浏览阅读1.9k次。mongodb和hbase的区别和应用场景_hbase和mongodb的区别
文章浏览阅读1.2k次。Hbase入门篇01---基本概念和部署教程_hbase教程
文章浏览阅读1.6k次,点赞19次,收藏25次。hbase相关内容
文章浏览阅读942次,点赞16次,收藏20次。在hbase1.x中transition是令广大大数据运维人员头疼的一个话题,因为,region 的状态转移涉及到了三个核心组件,分别为:hbase master,zookeeper和hbase 的regionserver,这三个组件中的某一个region的状态都是一致的情况下,这个region 才算是正常,状态转移过程及其复杂,hbase 集群很容易出现RIT。好消息是,hbase2.x中有个工具HBCK2,这个工具可不是简单的hbase1.x中hbck 的升级,变化有点大,详细变化请参考帮助文档(
文章浏览阅读1k次。在HBase中,Region分裂是一种自动的机制,用于在Region大小达到一定阈值时将其分裂成两个Region,以便更好地管理数据。HBase中的Region大小是可以配置的,通过设置HBase表的最小和最大Region大小来控制。需要注意的是,禁止Region分裂后,当表的大小达到一定阈值时,数据将不再分裂成新的Region,因此需要根据实际需求进行调整。需要注意的是,禁止Region分裂后,当表的大小达到一定阈值时,数据将不再分裂成新的Region,因此需要根据实际需求进行调整。_hbase region大小
文章浏览阅读737次。可以看出,HBase作为数据仓库的一种补充,可以用于存储和管理大量数据,以便快速地分析和查询。是一种基于数据库的形式,用于存储和管理大量数据,以便快速地分析和查询。例如,可以使用HBase存储一些用户行为数据,然后进行分析,以便更好地了解用户行为和需求。其次,需要配置HBase相关的环境变量,例如JAVA_HOME、HBASE_HOME等。HBase可以用于存储结构化和非结构化数据,包括文本、图像、视频等。例如,可以使用HBase存储一些传感器数据,然后进行实时分析和处理。一、HBase集群环境搭建。_用hbase 搭建数仓
文章浏览阅读1.9k次。Data。_springboot整合hbase
文章浏览阅读880次,点赞23次,收藏20次。etc/abrt下的两个文件,分别是:abrt-action-save-package-data.conf 和 abrt.conf,修改内容如下。我们后面排查的时候去查看/run/cloudera-scm-agent/process/2325-hbase-REGIONSERVER下是否有。发现有个hs_err_pid15967.log JVM生成的错误日志,那么把这个日志下载查看,返现日志这么写的。接下来就等下一次hbase的节点挂了之后查看转储文件,转储文件在/var/sqool/abrt下。_regionserver 退出 没有错误日志
文章浏览阅读1.7k次。以下命令都需要在Hbase Shell中运行:Hbase信息status:服务器状态version:版本表操作查看所有表:list表基本信息:describe "表名称"查看表是否存在:exists '表名称'创建表:create '表名称', '列族1', '列族2', '列族3'删除表:首先禁用表:disable '表名称'然后删除表:drop '表名称'修改表:表数据操作查看所有数据:scan "表名称"..._hbase sehll怎么看登录的是哪个hbase
文章浏览阅读885次,点赞18次,收藏21次。在HBase中执行查询操作通常使用HBase Shell或编程语言API(如Java或Python)来执行。使用编程语言API,您可以使用相应的HBase客户端库来执行查询操作。这是一个简单的Java代码示例,演示了如何使用HBase Java API进行单行查询。这些示例仅为基本查询操作,HBase Shell还提供其他高级查询功能,如按时间戳过滤,使用正则表达式进行查询等。请注意,这只是HBase查询的基本示例,您可以根据实际需求和HBase的数据模型进行更复杂的查询操作。
文章浏览阅读7.3k次,点赞7次,收藏28次。找到hbase的bin目录并进入,执行启动hbase hmaster命令。问题原因 hmaster挂了 ,需要重新启动hmaster才行。hbase shell输入命令出现如下问题。_keepererrorcode = nonode for /hbase/master
文章浏览阅读1.3k次。三次信息化浪潮。_大数据应用开发技术笔记