HBASE MOB设计

HBase MOB
1 术语
LOB: 大对象。它通常指的是BLOB(二进制大对象)和CLOB(字符
大对象)。它可以是PDF文档、Word文档、图像、多媒体对象,
等等。与典型记录不同,LOB通常可以是几百KB到几十KB或
数百MB大小。
MOB: 中等对象。它没有大对象那么大。通常是10MB。
Metadata:记录中除了MOB以外的其他数据,通常他们是MOB的元数据信息,例如标题,描述等。
2 目的
现如今,很多用户有了一个日益增长的需求,就是在HBASE中存储文档,图像和一些中等对象(MOB),并希望以低延迟读写这些对象。
这些用户可能是希望存储客户签名文件扫描件的银行,他们也可能是想存储交通和行驶车辆快照的运输机构。mob上的操作通常是写密集型的,很少更新或删除,但是相对较少的阅读频率。mob通常与其元数据一起存储。元数据是MOB的元信息,如车号、速度、颜色等。相对于MOB来说他们很小。通常考虑到大小的问题,元数据通常用于分析,而mob通常只有在显式地使用行键请求时才被随机访问。

3 设计目的
1.更好、更多的可预测性能。
2.HBASE提供的强大数据一致性。
3.对API和操作改动最小。
4.利用现有的HBASE功能,例如快照,大量下载,复制,安全机制等。
3.1现有解决方案
让我们列出一些现有的解决方案,并进行比较
3.1.1将MOB直接存储在HBASE表中

在这里插入图片描述
第一种方法是将MOB直接存储在HBASE中
1.把这些MOB储存在一个单独的列族中。
2.将元数据存储到其他列族中。

通常情况下,MOB一般有几百KB或者几十MB,内存会被频繁的刷新,因此会有更多的压缩被触发。随着MOB的聚集,由压缩导致的I/O是巨大的,这会减慢压缩速度,进一步减缓内存的刷新,最终阻止更新。一个大的MOB会频繁的触发region的分割,也会使得这些region离线并且阻止更新。

换个角度想想,怎样跳过或者减少对MOB的压缩。
在这里插入图片描述
随着存储文件数量的增加,一个单独的存储被打开了太多的读者,甚至比操作系统允许的还多,很多的内存被消耗,读性能受到了严重影响。

3.1.2把MOB写在HDFS上,元数据写在HBASE表中
另一种方式是 使用HBASE+HDFS模型来存数元数据和MOB。
在这个解决方案中,MOB存储在HDFS中的单个文件中,其链接存储在HBASE中。
在这里插入图片描述
这是一个客户端解决方案,事务由客户端控制。HBASE端的内存没有被MOB消耗,读写都很快。这种方法适用于大于10MB的LOB,但是对于MOB来说,有太多中等大小的文件,这导致HDFS的使用效率低下,因为默认HDFS块大小为64 MB。例如,NameNode有48GB的内存,每个MOB文件是500kb,每个文件占用内存超过300字节。48GB的内存可以容纳不到1.6亿个文件,而HDFS只能存储80TB的MOB文件总数。
作为一种改进,我们可以将小的MOB文件组合成一个更大的文件。这意味着我们必须将偏移量和长度存储在HBASE表中。这很难让MOB保持一致性,很难管理被删除的MOB和可能的小的MOB文件。
在这里插入图片描述
如果我们用这种方法,我们必须考虑新的安全政策,失去写操作的原子性,而且可能会丢失复制和快照提供的备份和灾难恢复。

4 HBase MOB
大部分I/O都是通过压缩造成的,我们需要把MOB从正常region的管理中移开,以避免他们对region的分裂和压缩的影响。
对于现有的解决方案,遇到了几个问题。
1.压缩产生的写入放大会影响写入性能。
2. 过多的小文件会导致读取速度慢和HDFS使用效率低下。
3 . MOB文件的数据一致性问题和池管理性。
内存的刷新保证了刷新时的数据一致性。
如果把MOB移出内存,很难保证这一点。
在这里插入图片描述
HBase MOB与HBase+HDFS方法非常相似,它也将元数据和mob分开存储。
但区别在于这是一个完全的服务器端设计,我们使用内存在mob被刷新到磁盘之前缓存它们,在每次刷新时,MOB被写入一个称为MOB file的HFile文件中,而且MOB文件有多个条目,而不是HDFS中每个MOB的一个文件。此MOB文件存储在HBASE不管理的特殊区域中。所有的读写操作都可以被当前的HBASE API使用。HBASE MOB的读取路径为“在HBASE表中查找单元格并查找MOB文件路径”->“按路径查找MOB文件”->“在MOB文件中按行键查找单元格”。从MOB文件中读取的是单个文件,它是快速的,无论有多少MOB文件与它并存。太多的MOB文件不会影响读取,不需要拆分和压缩MOB文件。

4.1Write and read
我们对MOB有个阈值,如果单元格的值长度大于此阈值,这个单元格被认为是一个MOB单元格。
在这里插入图片描述
当MOB单元更新到该region时,它们被写进了WAL和memstore,就像正常单元格一样。在刷新中,MOB单元被刷新为MOB文件,这个MOB文件的元数据和路径被刷新到存储文件。此设计内置了数据一致性和HBASE复制功能。MOB文件存储在一个特殊的虚拟region中,文件路径类似于/mobRootDir/data/namespace/tableQualifierName/
dummyRegionName/columnFamilyName/${filename}。所有的MOB文件属于同一个表和列族一起保存。文件名是可读的,由三部分组成,开始键的MD5此MOB文件中单元格的最新日期,还有UUID。第一部分是这个MOB文件从中刷新的区域的开始键。通常MOB有一个用户定义的TTL,我们可以通过比较第二部分和TTL来查找和删除过期的MOB文件。
包含MOB文件路径的单元格称为引用单元格,格式如下所示。
在这里插入图片描述
标记保留在引用单元格中,我们仍然可以依赖HBASE安全机制。特别是它有一个参考标签,可以用来区分正常单元格和参考单元格。引用单元格表示它在MOB文件中有一个MOB单元格,我们需要在阅读中做进一步的解析。
在这里插入图片描述
在阅读过程中,存储扫描器同时打开memstore和store文件的扫描仪。如果满足参考单元格,扫描仪从单元格值中读取文件路径,并从该文件中查找相同的行键。可以通过以下方式为MOB启用块缓存在扫描中设置一个可以加速搜索的属性。
4.2Cache
我们在MOB有两个缓存。一个是region server的块缓存,另一个是MOB文件的缓存。
MOB可以使用块缓存进行读取,就像在扫描中设置属性来读取HFiles的数据块一样。MOB文件缓存不缓存MOB文件的数据,它缓存打开的读卡器。
当读取MOB文件时,需要打开读卡器。这些读卡器应该缓存在区域服务器拥有的池中,以避免频繁打开它们。这个池大小是固定的,如果打开的读卡器太多,其中一部分被关闭并被上LRU驱逐。
4.3Housekeeping 内务处理
我们提供了两种方法来做内务处理。它们都可以由用户触发,并在HMaster中定期运行。
1.根据列族中的TTL和min_Versions删除过期的MOB文件。
它只处理过期且min_Versions为0的文件。
2.MOB文件压缩。
小文件被合并成更大的文件,同时删除的文件也被删除。
4.3.1 Clean the expired MOB data清理过期MOB数据
HBASE MOB在master中有一个内务,它扫描MOB文件,找到文件名中日期确定的过期MOB文件,并删除它们。因此,磁盘空间可以周期性地回收。我们可以通过比较文件中的日期和TTL来确定过期的MOB文件。只有当日期早于(current time-TTL)且minVersions为0时,MOB文件才会过期。
4.3.2MOB compaction 压缩
与HDFS块相比,MOB文件可能相对较小,如果我们写入只有少数条目符合MOB条件的行,也可能存在被删除的单元格。我们需要删除那些被删除的单元格,并将小文件合并为更大的文件,以提高HDFS的利用率。MOB压缩只对小文件进行压缩,而对大文件不进行严格的压缩,避免了对大文件的无限压缩,使写放大更具可预测性。我们需要知道在MOB压缩中删除了哪些单元格。因此,在每次HBASE主压缩中,删除标记都会在删除之前写入DEL文件。
压缩MOB文件的步骤如下所示。
在这里插入图片描述
1减少DEL文件的数量,将DEL文件合并成更大的文件。
2找到所有的小的MOB文件并按名称前缀将它们分组到分区中(开始密钥和日期的编码名称)。
3对于每个分区,打开扫描器到小的MOB文件和所有DEL文件,将有效单元格写入新的更大的MOB文件,同时将新的引用单元格写入新的存储文件。
4提交新的MOB文件,将新的存储文件批量加载到HBASE,并删除旧的MOB文件。
5如果MOB压缩是一个主要的压缩,那么在所有分区中完成压缩之后删除所有DEL文件。
MOB压缩过程中的更新是否影响数据一致性?
让我们看看下面两个案例。
1.更新而不删除。
在这里插入图片描述
在MOB压缩中,当我们创建一个新的引用单元时,我们在其中保留旧的时间戳,并且只有具有相同时间戳的单元才会被替换。在提交阶段,我们首先提交新的MOB文件,然后批量加载存储文件。这可以保证数据的一致性,并使更改同时可见。
2.Update with delete 更新和删除
在这里插入图片描述

上图显示了当存在删除标记时可能存在的争用条件问题,而在MOB压缩运行时则显示了一个主要压缩。删除的单元格返回到HBASE!为了避免这种情况,我们需要在MOB-enabled列族的MOB-compression和region-compression中添加锁。在每一个操作中,它都必须获得一个锁才能继续。它们相互排斥,不能同时运行。

4.3.3 MOB文件生命周期
当MOB文件被删除时,它们实际上并没有被删除,而是被归档。MOB文件的生命周期如下所示,它们是在刷新memstore时创建的,当快照未引用或在存档中过期时,HFileCleaner会将其从文件系统中删除。
在这里插入图片描述
4.3.4 MOB文件归档
MOB文件被删除时会被归档,就像存储文件的方式一样。当他们被删除时存储文件存档到目录中/{hbase.rootdir}/archive/data/ns/tn /region/cf。因此快照功能可以与它们一起工作。同样,MOB文件在删除时以相同的方式存档。不同的是MOB文件使用一个特殊的区域名,它的路径是/{hbase.rootdir}/archive/data/ns/tn/{mobRegion}/cf。
4.3.5 MOB压缩过程中的扫描
如果在存档选定的旧MOB文件之前打开扫描仪,并在存档后从选定的旧MOB单元中读取MOB单元,该怎么办?
在这里插入图片描述
由于MOB压缩用完了区域,所以我们不能像在每个区域压缩之后所做的那样做(例如,重新打开存储文件扫描器)。在这种情况下,扫描器无法获得最新路径,它将读取MOB目录中不存在的文件。此时,扫描仪被切换到读取归档目录中的MOB文件。

4.4快照
当用户为一个表拍摄快照时,HBase会将现有存储文件的名称添加到每个区域的清单中,它对MOB文件也是这样做的。在快照中,MOB被视为一个特殊区域。此区域与快照中的正常区域一起存储在同一清单中。
4.4.1恢复/克隆快照
恢复/克隆正常区域中的HFiles快照时,hfilelinks将在region目录中被创建。同样,HFileLinks是在MOB目录下同时被创建的。在恢复/克隆第一个正常region(具有空的开始密钥)之前,将还原/克隆MOB文件的快照。
在这里插入图片描述

4.4.2 Scan after Restoring Snapshot恢复快照后扫描
还原或克隆表后,MOB目录中可能存在HFileLinks。在普通区域中,文件名模式指示在哪里找到真正的文件。对于MOB,由于读取路径不同,需要从多个位置搜索文件。
1.MOB目录。
2.MOB归档目录。

在这里插入图片描述
4.5处理压缩中的MOB
包含MOB单元的HFiles可以批量加载到HBASE中,MOB细胞直接驻留在HBASE中。
我们怎么处理这些MOB单元?此外,如果阈值变了怎么办?
这可以在区域压缩中处理,对于压缩中的每个单元格,我们将值大小与阈值进行比较,将大于阈值的单元格移动到MOB文件中,否则将单元格移动到存储文件中。
1.单元格没有引用标记HBASE中的正常单元),我们将值大小与阈值进行比较。
a) 大于阈值,将此单元格写入MOB文件,并将引用单元格写入存储文件。
b) 否则,直接将其写入存储文件。
2. 一个单元格有引用标记,我们将其引用的MOB单元格的值大小与阈值进行比较。
a) 大于阈值,将此MOB单元写入MOB文件,并将引用单元写入存储文件。
b) 否则,将单元格从MOB文件移动到存储文件。
4.6 Limitations 局限性
1.与列值相关的过滤器不适用于MOB扫描仪。
2.MOB数据的大小不能太大,最好将MOB大小控制在100KB和10MB之间。由于MOB单元是在刷新之前写入memstore中的,因此大型MOB单元会对区域服务器中的内存造成压力。
3.MOB单元和元数据存储在不同的列族中。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HBase是一个分布式、可扩展的开源NoSQL数据库,适用于处理大规模数据。它利用分布式文件系统Hadoop HDFS来存储数据,并提供高可靠性和容错性。 HBase MOB(Medium Object)是HBase的一个特性,用于存储较大的对象,如PDF文件。它通过对大对象进行切分和存储,提供了高效的存储、检索和管理能力。 HBase MOB提供了以下特性和优势: 1. 快速检索:HBase MOB使用索引来加快大对象的检索速度,可以通过行键或时间戳进行快速的查找。 2. 高效存储:HBase MOB通过切分大对象,并将其存储在单独的存储文件中,以减小存储开销。同时,可以进行压缩和编码,进一步减小存储空间。 3. 数据一致性:HBase MOB通过使用WAL(Write-Ahead Log)和HLog(HBase日志)保证数据的一致性和持久性。 4. 生命周期管理:HBase MOB可以根据设定的时间范围自动清理过时的数据,以节省存储空间。 5. 安全性:HBase MOB提供数据的安全性和权限控制,可以限制用户对MOB对象的访问和修改。 在使用HBase MOB存储PDF文件时,可以将PDF文件拆分为较小的块,并存储在HBase中。可以根据需要检索和管理PDF文件。 综上所述,HBase MOBHBase的一个扩展功能,适用于存储和管理较大的对象,如PDF文件。它提供了高效的存储、检索和管理能力,可以根据需要进行配置和调整,满足不同场景下的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值