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日志,重新启动文章来源:https://www.toymoban.com/news/detail-765199.html (6)特别注意,开启HBase进程,电脑最好不要待机,会导致自动关闭进程,一旦出现了一次,要么重新安装要么按方法二处理。文章来源地址https://www.toymoban.com/news/detail-765199.html |
到了这里,关于HBase架构和部署(超级详细)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!