本文摘自 https://hbase.apache.org/book.html

75.存储中型对象(MOB)

数据有多种大小,并且将所有数据(包括图像和文档等二进制数据)保存在HBase中是理想的。从技术上讲,HBase可以处理单元大小大于100 KB的二进制对象,但HBase的常规读写路径已针对小于100KB的值进行了优化。当HBase处理超过此阈值的大量对象(此处称为中型对象或MOB)时,由于拆分和压缩导致的写入放大会降低性能。使用MOB时,理想情况下,您的对象应介于100KB和10MB之间(请参阅FAQ)。HBase 2添加了对MOB的特殊内部处理,以保持性能,一致性和较低的操作开销。HBASE-11339中完成的工作提供了MOB支持。要使用MOB,您需要使用HFile版本3。(可选)为每个RegionServer配置MOB文件读取器的缓存设置(请参阅 配置MOB缓存),然后配置特定列以保存MOB数据。无需更改客户端代码即可利用HBase MOB支持。该功能对客户端是透明的。

75.1。配置MOB的列

您可以在HBase Shell中或通过Java API将列配置为在表创建或更改期间支持MOB。两个相关的属性是boolean IS_MOB和MOB_THRESHOLD,这是将对象视为MOB的字节数。只IS_MOB需要。如果未指定MOB_THRESHOLD,则使用默认阈值100 KB。

使用HBase ShellMOB配置列

hbase>创建't1',{NAME =>'f1',IS_MOB => true,MOB_THRESHOLD => 102400}

hbase> alter't1',{NAME =>'f1',IS_MOB => true,MOB_THRESHOLD => 102400}

示例26.使用Java APIMOB配置列

...

HColumnDescriptor hcd = new HColumnDescriptor(“f”);

hcd.setMobEnabled(true);

...

hcd.setMobThreshold(102400L);

...

75.2。测试MOB

org.apache.hadoop.hbase.IntegrationTestIngestWithMOB提供了该实用程序来帮助测试MOB功能。该实用程序如下运行:

$ sudo -u hbase hbase org.apache.hadoop.hbase.IntegrationTestIngestWithMOB \

-threshold 1024 \

-minMobDataSize 512 \

-maxMobDataSize 5120

  • threshold是将单元格视为MOB的阈值。默认值为1 kB,以字节表示。
  • minMobDataSize是MOB数据大小的最小值。默认值为512 B,以字节表示。
  • maxMobDataSize是MOB数据大小的最大值。默认值为5 kB,以字节为单位。

75.3。MOB架构

本部分来自 HBASE-11339中的信息,该信息涵盖了HBase和HBASE-22749中MOB的初始GA实现 ,该信息通过在RegionServers之间并行化MOB维护进行了改进。有关更多信息,请参见在初始工作期间创建的设计文档的最新版本“ HBASE-11339 MOB GA design.pdf ”,以及分布式mob压缩功能的设计文档“ HBASE-22749 MOB分布式compaction.pdf ”。

75.3.1。总览

MOB功能通过在正常区域之外存储大于已配置阈值的值来避免已配置列系列的总体IO负载,从而避免拆分,合并和最重要的是正常压缩。

第一次将单元格写入区域时,无论值大小如何,都将其存储在WAL和内存存储区中。当来自配置为使用MOB的列族的内存存储最终被刷新时,将同时写入两个hfile。值小于阈值大小的单元格将写入正常区域hfile。值大于阈值的单元格将写入特殊的MOB hfile中,并且MOB参考单元格也将写入正常区域HFile中。当区域服务器刷新启用了MOB的内存并关闭给定的正常区域HFile时,它会附加元数据,该元数据列出了其中的单元所引用的每个特殊MOB hfile。

MOB参考单元具有与其所基于的单元相同的密钥。参考单元格的值由两部分元数据组成:实际值的大小和包含原始单元格的MOB hfile。除了最初写入HBase的任何标签之外,参考单元还附加了两个附加标签。第一个是标记标记,表示该单元格是MOB参考。以后可以使用它专门扫描参考单元。第二个在写出MOB hfile时存储名称空间和表。此标签用于优化在一系列HBase快照操作(参考HBASE-12332)之后,MOB系统如何在MOB hfile中找到基础值。请注意,标记仅在HBase服务器中可用,并且默认情况下不会通过RPC发送。

给定表的所有MOB hfile在不直接服务于请求的逻辑区域内进行管理。通过刷新或MOB压缩创建这些MOB hfile时,它们将放置在hbase根目录下专用于名称空间,表,mob逻辑区域和列族的专用mob数据区域中。通常,这意味着路径的结构如下:

%HBase Root Dir%/ mobdir / data /%namespace%/%table%/%logic region%/%column family%/

使用默认配置,默认名称空间中名为“ some_table”的示例表具有一个启用了MOB的名为“ foo”的列族,此HDFS目录将为

/ hbase / mobdir / data / default / some_table / 372c1b27e3dc0b56c3a031926e5efbe9 / foo /

这些MOB hfile由HBase主服务器中以及各个区域服务器中的特殊杂务来维护。具体来说,这些杂事负责执行和压缩TTL。请注意,这种压缩主要是控制HDFS中文件的总数,因为我们对MOB数据的操作假设是它很少更新或删除。

当由于我们的压缩过程而不再需要给定的MOB hfile时,Master中的杂项将像将其与任何常规hfile一样,将其移至存档中。由于表的mob区域独立于所有普通区域,因此可以在常规归档存储区域中与它们共存:

/ hbase / archive / data / default / some_table / 372c1b27e3dc0b56c3a031926e5efbe9 / foo /

负责最终从正常区域删除不需要的存档文件的hfile清理工作同样也将处理这些MOB hfile。这样,如果存在启用了MOB的表的快照,则清理系统将确保那些MOB文件在快照区域或快照副本中需要时,始终停留在存档区域中。

75.3.2。MOB压缩

每次启用MOB的列族的内存存储执行刷新HBase时,都会将超过MOB阈值的值写入MOB特定的hfile中。发生常规区域压缩时,区域服务器将重写常规数据文件,同时保留对这些MOB文件的引用,而无需重写它们。普通的客户端查找MOB值将透明地接收原始值,因为Region Server内部人员会使用参考数据来将值从特定的MOB文件中拉出。这种间接的方式意味着建立大量的MOB hfile不会影响检索任何特定MOB单元的总时间。因此,我们不需要对MOB hfile进行压缩,几乎不需要像普通hfile那样频繁地进行压缩。结果是,

但是,如果频繁删除和更新MOB单元,则这种间接访问将开始浪费空间。停止使用特定MOB hfile空间的唯一方法是确保没有任何单元格仍保留对其的引用。为此,我们需要确保已将当前值写入新的MOB hfile中。如果我们的后备文件系统像HDFS一样限制了可以显示的文件数量,那么即使我们没有MOB单元的删除或更新,最终也会有足够的MOB hfiles需要合并他们。

具有区域服务器的主坐标中的琐事会定期执行特殊的主要压缩,该压缩还可以处理重新写入的新MOB文件。像所有压缩一样,Region Server将创建更新的hfile,以保存小于MOB阈值的单元格和包含对新重写的MOB文件的引用的单元格。由于此重写的优点是可以查看该区域的所有活动单元,因此我们的几个小型MOB文件应最终成为每个区域一个MOB文件。杂务默认为每周运行一次,可以通过设置hbase.mob.compaction.chore.period为所需的时间(以秒为单位)进行配置。

<property>

<name>hbase.mob.compaction.chore.period</name>

<value>2592000</value>

<description>Example of changing the chore period from a week to a month.</description>

</property>

默认情况下,定期的MOB压缩协调工作将尝试使每个区域都忙于并行进行压缩,以使集群上的工作量最大化。如果需要调整此压缩在底层文件系统上生成的IO量,则可以通过设置hbase.mob.major.compaction.region.batch.size为大于零的整数来控制允许多少个并发区域级压缩请求 。如果将配置设置为0,则将获得尝试并行执行所有区域的默认行为。

<property>

<name>hbase.mob.major.compaction.region.batch.size</name>

<value>1</value>

<description>Example of switching from "as parallel as possible" to "serially"</description>

</property>

75.3.3。MOB文件归档

最终,我们将拥有不再需要的MOB hfile。客户端将覆盖该值,或者MOB重写压缩将存储对更新的较大MOB hfile的引用。因为任何给定的MOB单元最初都可能写在当前区域或某个先前时间点存在的父区域中,所以各个区域服务器无法决定何时存档MOB hfile。取而代之的是,主服务器中的定期杂事会评估MOB hfile进行归档。

MOB HFile将在以下任何条件下进行归档:

  • 任何早于列族的TTL的MOB HFile
  • 任何MOB HFile早于“过时”阈值,且没有针对列族中所有区域的常规hfile对其进行引用

为了确定MOB HFile是否满足第二个条件,杂项从给定表的每个启用MOB的列族的常规HFile中提取元数据。该元数据列举了满足普通HFile区域中存储的引用所需的MOB HFile的完整集合。

可以通过设置hbase.master.mob.cleaner.period为正整数秒数来配置清洁工作的时间。默认情况下每天运行。除非您具有非常积极的TTL或非常高的MOB更新率以及相应的非MOB压缩率,否则您无需调整它。

75.4。MOB优化任务

75.4.1。进一步限制写放大

如果您的MOB工作负载几乎没有更新或删除,那么您可以选择采用MOB压缩,这种压缩可以优化以限制写入放大量。它通过设置大小阈值以在压缩过程中忽略MOB文件来实现此目的。当给定区域通过MOB压缩时,它将评估当前保存实际值的MOB文件的大小,如果该文件超过阈值,则跳过重写该值。

在这种模式下,写放大的界限可以近似为 写放大=logķ(M小号)写放大=日志ķ(中号小号)其中,K是压缩选择中的文件数,M是MOB文件大小的可配置阈值,S是首先创建MOB文件的内存存储刷新的最小大小。例如,假设每次压缩拾取了5个文件,阈值为1 GB,刷新大小为10MB,则写入放大将为 log5(1 ģ 乙10 M乙) =日志5(100 ) =2.86日志5(1个G乙10中号乙)=日志5(100)=2.86。

如果我们使用的是底层文件系统,并且文件数量受到限制,例如HDFS,并且我们知道我们期望的数据集大小,那么我们可以选择最大文件大小以接近此限制,但可以将其保持在最大以内,以最大程度地减少写入放大。例如,如果我们希望存储PB,并且在我们的HDFS实例中保守地限制了一百万个文件,则 1P乙1 M= 1 ģ 乙1个P乙1个中号=1个G乙 为我们提供了每个MOB文件1 GB的目标限制。

要加入此压缩模式,您必须设置hbase.mob.compaction.type为optimized。此模式下的默认MOB大小阈值设置为1GB。可以通过将其设置hbase.mob.compactions.max.file.size为正整数字节来更改它 。

<property>

<name>hbase.mob.compaction.type</name>

<value>optimized</value>

<description>opt-in to write amplification optimized mob compaction.</description>

</property>

<property>

<name>hbase.mob.compactions.max.file.size</name>

<value>10737418240</value>

<description>Example of tuning the max mob file size to 10GB</dscription>

</property>

此外,以这种模式运行时,压缩过程将设法避免写入超出最大文件阈值的MOB文件。在将其他MOB值写入MOB hfile时,它将检查是否有其他数据导致hfile超过最大文件大小。当MOB值的hfile达到限制时,MOB hfile将被提交到MOB存储区并创建一个新的。具有参考单元的hfile将跟踪其元数据中所需的完整MOB hfile集。

 

注意完成区域压缩的总时间

使用写放大优化的压缩模式时,您需要注意最长的时间来压缩单个区域。如果将近一个小时,则应通读下面的“故障排除”部分,“ 调整MOB清理器对新hfile的容忍度”。不进行此处讨论的调整可能会导致数据丢失。

75.4.2。配置MOB缓存

因为与HFiles的数量相比,任何时候都可以有大量的MOB文件,所以MOB文件并不总是保持打开状态。MOB文件读取器缓存是一种LRU缓存,可保持最近使用的MOB文件打开。若要在每个RegionServer上配置MOB文件读取器的缓存,请将以下属性添加到R​​egionServer的hbase-site.xml,自定义配置以适合您的环境,然后重新启动或滚动重新启动RegionServer。

例子27.例子MOB缓存配置

<property>

<name>hbase.mob.file.cache.size</name>

<value>1000</value>

<description>

Number of opened file handlers to cache.

A larger value will benefit reads by providing more file handlers per mob

file cache and would reduce frequent file opening and closing.

However, if this is set too high, this could lead to a "too many opened file handers"

The default value is 1000.

</description>

</property>

<property>

<name>hbase.mob.cache.evict.period</name>

<value>3600</value>

<description>

The amount of time in seconds after which an unused file is evicted from the

MOB cache. The default value is 3600 seconds.

</description>

</property>

<property>

<name>hbase.mob.cache.evict.remain.ratio</name>

<value>0.5f</value>

<description>

A multiplier (between 0.0 and 1.0), which determines how many files remain cached

after the threshold of files that remains cached after a cache eviction occurs

which is triggered by reaching the `hbase.mob.file.cache.size` threshold.

The default value is 0.5f, which means that half the files (the least-recently-used

ones) are evicted.

</description>

</property>

75.4.3。手动压缩MOB文件

若要手动压缩MOB文件,而不是等待定期的琐事触发压缩,请使用 major_compactHBase Shell命令。这些命令要求第一个参数为表名,并以列族作为第二个参数。如果与包含MOB数据的列系列一起使用,则这些运算符的请求将导致MOB数据被压缩。

hbase> major_compact't1'

hbase> major_compact't2','c1'

可以通过Admin.majorCompactJava API 发出相同的请求。

75.5。MOB故障排除

75.5.1。调整MOB清理器对新hfile的容忍度

MOB清理程序杂项将忽略在杂项开始前一个小时之前创建的所有MOB hfile,以确保我们不会错过相应常规hfile中的参考元数据。没有此安全检查,清洁工可能会看到正在进行冲洗或压实的MOB hfile,并过早地归档了MOB数据。此默认缓冲区应足以正常使用。

如果使用写放大优化的MOB压缩,并且基础文件系统性能和数据形状的组合可能需要一个多小时才能完成单个区域的主要压缩,则需要调整公差。例如,如果您分配的MOB数据使您的最大区域在包括重写MOB数据的压缩之间添加了80GB的MOB数据,并且您的HDFS群集仅能够为单个文件写入20MB / s,则在执行优化的压缩时,区域服务器将花费大约一分钟的时间来写入第一个1GB MOB hfile,然后再花费一个小时零七分钟来写入其余的79GB 1GB MOB hfile,然后在压缩结束时最终提交新的参考hfile。在此示例中,您将需要更大的公差范围。

如果对于提交MOB hfile和引用它的普通hfile所需的两次HDFS移动操作,Region Server刷新操作花费的时间超过一个小时,则还需要调整公差。对于正常配置且运行良好的HDFS和HBase,这种延迟不应发生。

通过设置hbase.mob.min.age.archive为正整数毫秒数来控制“最近”的清洁器窗口。

<property>

<name>hbase.mob.min.age.archive</name>

<value>86400000</value>

<description>Example of tuning the cleaner to only archive files older than a day.</dscription>

</property>

75.5.2。通过HBase Shell检索MOB元数据

解决MOB系统中的故障时,可以通过在扫描中指定特殊属性来通过HBase Shell检索一些内部信息。

hbase(main):112:0>扫描'some_table',{STARTROW =>'00012-example-row-key',LIMIT => 1,

hbase(main):113:1 * CACHE_BLOCKS => false,ATTRIBUTES => {'hbase.mob.scan.raw'=>'1',

hbase(main):114:2 *'hbase.mob.scan.ref.only'=>'1'}}

将MOB内部信息存储为四个字节,以表示基础单元格值的大小,然后将其存储为包含基础单元格值的MOB HFile名称的UTF8字符串。请注意,默认情况下,此序列化结构的整体将通过HBase Shell的二进制字符串转换器传递。这意味着组成值大小的字节很可能会写为转义的不可打印字节值,例如'\ x03',除非它们恰好对应于ASCII字符。

让我们看一个具体的例子:

hbase(main):112:0>扫描'some_table',{STARTROW =>'00012-example-row-key',LIMIT => 1,

hbase(main):113:1 * CACHE_BLOCKS => false,ATTRIBUTES => {'hbase.mob.scan.raw'=>'1',

hbase(main):114:2 *'hbase.mob.scan.ref.only'=>'1'}}

行列+单元格

00012-example-row-key column = foo:bar,时间戳= 1511179764,value = \ x00 \ x02 | \ x94d41d8cd98f00b204

e9800998ecf8427e19700118ffd9c244fe69488bbc9f2c77d24a3e6a

0.0130秒内出现1行

在这种情况下,前四个字节\x00\x02|\x94对应于这些字节 [0x00, 0x02, 0x7C, 0x94]。(请注意,第三个字节被打印为ASCII字符“ |”。)被解码为整数,这使我们的基础值大小为162,964字节。

其余字节为我们提供了一个HFile名称,即“ d41d8cd98f00b204e9800998ecf8427e19700118ffd9c244fe69488bbc9f2c77d24a3e6a”。该HFile很可能存储在此特定表的指定MOB存储区中。但是,如果此表来自已还原的快照,则文件也可能位于存档区域中。此外,如果该表来自其他表的克隆快照,则该文件可能位于该源表的活动区域或归档区域中。如上面对MOB参考单元的说明中所述,区域服务器将在发现MOB HFile时使用服务器端标签来优化查看正确原始表的mob和存档区域。由于您的扫描是在客户端进行的,因此无法检索该标签,您将需要已经知道表格的谱系,或者需要在所有表格中进行搜索。

假设您已通过HBase超级用户权限认证为用户,则可以搜索它:

$> hdfs dfs -find / hbase -name \

d41d8cd98f00b204e9800998ecf8427e19700118ffd9c244fe69488bbc9f2c77d24a3e6a

/ hbase / mobdir / data / default / some_table / 372c1b27e3dc0b56c3a031926e5efbe9 / foo / d41d8cd98f00b204e9800998ecf8427e19700118ffd9c244fe69488bbc9f2c77d24a3e6a

75.5.3。将列族移出MOB

如果要禁用列族上的MOB,则必须确保指示HBase在关闭功能之前将数据从MOB系统中迁移出来。如果这样做失败,则HBase将内部MOB元数据返回给应用程序,因为它不知道需要解析实际值。

以下过程将安全地迁移基础数据,而无需群集中断。应用配置设置并重新加载区域时,客户端将看到许多重试。

步骤:停止MOB维护,更改MOB阈值,通过压缩重写数据

  1. 通过将设置hbase.mob.file.compaction.chore.period为,确保母版中的MOB压缩琐事已关闭 0。应用此配置更改将需要滚动重启HBase Master。这将需要对主动主服务器进行至少一次故障转移,这可能会导致重试执行HBase管理操作的客户端。
  2. 确保在此迁移期间,没有通过HBase Shell为表发布任何MOB压缩。
  3. 使用HBase Shell可以将要迁移的列系列的MOB大小阈值更改为大于列系列中最大单元格的值。例如,给定一个名为“ some_table”的表和一个名为“ foo”的列族,我们可以选择一个千兆字节作为任意“大于存储的值”:
  4. hbase(main):011:0> alter'some_table',{NAME =>'foo',MOB_THRESHOLD =>'1000000000'}
  5. 使用新架构更新所有区域...
  6. 9/25地区已更新。
  7. 25/25个地区已更新。
  8. 做完了

在3.4940秒内0行

请注意,如果您仍在提取数据,则必须确保此阈值大于您可能写入的任何单元格值;MAX_INT将是一个安全的选择。

  1. 在桌子上进行大夯实。具体来说,您是在执行“常规”压缩而不是MOB压缩。
  2. hbase(main):012:0> major_compact'some_table'

0.2600秒内0行

  1. 监视主要压实的结束。由于压缩是异步处理的,因此您需要使用Shell首先查看压缩的开始,然后查看压缩的结束。

HBase首先应该说正在发生“主要”压缩。

hbase(main):015:0> @ hbase.admin(@formatter).instance_eval做

hbase(main):016:1 * p @ admin.get_compaction_state('some_table')。to_string

hbase(main):017:2 *结束

“重大的”

压实完成后,结果应打印为“ NONE”。

hbase(main):015:0> @ hbase.admin(@formatter).instance_eval做

hbase(main):016:1 * p @ admin.get_compaction_state('some_table')。to_string

hbase(main):017:2 *结束

“没有”

  1. 运行mobrefs实用程序,以确保没有MOB单元。具体来说,该工具将启动Hadoop MapReduce作业,当我们成功重写所有数据时,该作业将显示0输入记录的作业计数器。
  2. $> HADOOP_CLASSPATH = / etc / hbase / conf:$ {hbase mapredcp)纱罐\
  3. /some/path/to/hbase-shaded-mapreduce.jar mobrefs mobrefs-report-output some_table foo
  4. ...
  5. 10/19/12 11:38:47 INFO impl.YarnClientImpl:提交的应用程序application_1575695902338_0004
  6. 10/12/19 11:38:47 INFO mapreduce.Job:跟踪作业的网址:https://rm-2.example.com:8090/proxy/application_1575695902338_0004/
  7. 10/12/19 11:38:47 INFO mapreduce.Job:正在运行的作业:job_1575695902338_0004
  8. 10/12/19 11:38:57 INFO mapreduce.Job:以超级模式运行的Job job_1575695902338_0004:false
  9. 10/12/19 11:38:57 INFO mapreduce.Job:地图0%减少0%
  10. 10/12/19 11:39:07 INFO mapreduce.Job:地图7%减少0%
  11. 10/12/19 11:39:17 INFO mapreduce.Job:地图13%减少0%
  12. 10/12/19 11:39:19 INFO mapreduce.Job:地图33%减少0%
  13. 10/12/19 11:39:21 INFO mapreduce.Job:地图40%减少0%
  14. 10/12/19 11:39:22 INFO mapreduce.Job:地图47%减少0%
  15. 10/12/19 11:39:23 INFO mapreduce.Job:地图60%减少0%
  16. 10/12/19 11:39:24 INFO mapreduce.Job:地图73%减少0%
  17. 10/12/19 11:39:27 INFO mapreduce.Job:地图100%减少0%
  18. 10/12/19 11:39:35 INFO mapreduce.Job:地图100%减少100%
  19. 10/12/19 11:39:35 INFO mapreduce.Job:工作job_1575695902338_0004成功完成
  20. 10/12/19 11:39:35 INFO mapreduce.Job:计数器:54
  21. ...
  22. Map-Reduce框架
  23. 地图输入记录= 0
  24. ...

19/12/19 22:41:28 INFO mapreduce.MobRefReporter:完成为“ some_table”,family =“ foo”创建报告

如果数据尚未成功移出,则此报告将显示非零数量的输入记录和mob单元数。

$> HADOOP_CLASSPATH = / etc / hbase / conf:$ {hbase mapredcp)纱罐\

/some/path/to/hbase-shaded-mapreduce.jar mobrefs mobrefs-report-output some_table foo

...

10/19/12 11:44:18 INFO impl.YarnClientImpl:提交的应用程序application_1575695902338_0005

10/12/19 11:44:18 INFO mapreduce.Job:跟踪作业的网址:https://busbey-2.gce.cloudera.com:8090/proxy/application_1575695902338_0005/

10/12/19 11:44:18 INFO mapreduce.Job:正在运行的工作:job_1575695902338_0005

10/12/19 11:44:26 INFO mapreduce.Job:以超级模式运行的Job job_1575695902338_0005:false

10/12/19 11:44:26 INFO mapreduce.Job:地图0%减少0%

10/12/19 11:44:36 INFO mapreduce.Job:地图7%减少0%

10/12/19 11:44:45 INFO mapreduce.Job:地图13%减少0%

10/12/19 11:44:47 INFO mapreduce.Job:地图27%减少0%

10/12/19 11:44:48 INFO mapreduce.Job:地图33%减少0%

10/12/19 11:44:50 INFO mapreduce.Job:地图40%减少0%

10/12/19 11:44:51 INFO mapreduce。工作:地图53%减少0%

10/12/19 11:44:52 INFO mapreduce.Job:地图73%减少0%

10/12/19 11:44:54 INFO mapreduce.Job:地图100%减少0%

10/12/19 11:44:59 INFO mapreduce.Job:地图100%减少100%

10/12/19 11:45:00 INFO mapreduce.Job:工作job_1575695902338_0005成功完成

10/12/19 11:45:00 INFO mapreduce.Job:Counters:54

...

Map-Reduce框架

地图输入记录= 1

...

暴民

NUM_CELLS = 1

...

10/12/19 11:45:00 INFO mapreduce.MobRefReporter:完成为'some_table'创建报告,family ='foo'

如果发生这种情况,则应确认已禁用MOB压缩,并确认选择了足够大的MOB阈值,然后重做主要的压缩步骤。

  1. mobrefs报告显示MOB系统中不再存储任何数据时,则可以安全地更改列族配置,以便禁用MOB功能。
  2. hbase(main):017:0> alter'some_table',{NAME =>'foo',IS_MOB =>'false'}
  3. 使用新架构更新所有区域...
  4. 更新了8/25个区域。
  5. 25/25个地区已更新。
  6. 做完了

2.9370秒内有0行

  1. 列系列不再显示已启用MOB功能后,可以安全地再次启动MOB维护工作。您可以hbase.mob.file.compaction.chore.period通过从配置文件中删除默认值或将其恢复为开始此过程之前的任何自定义值来允许使用默认 值。
  2. 一旦禁用了列族的MOB功能,就不会有内部HBase进程在该列族特定的MOB存储区域中查找数据。在压缩过程之前,仍然会有数据存在,这些数据将值重新写入了HBase的数据区域。您可以作为HBase超级用户直接在HDFS中检查此残留数据。
  3. $ hdfs dfs -count / hbase / mobdir / data / default / some_table

4 54 9063269081 / hbase / mobdir / data / default / some_table

该数据是虚假的,可能会被回收。您应该将其放在一边,验证应用程序在表中的视图,然后将其删除。

75.6。MOB升级注意事项

通常,使用MOB功能存储的数据应该透明地继续在HBase升级中正常工作。

75.6.1。升级到具有“分布式MOB压缩”功能的版本

在HBASE-22749“分布式MOB压缩”中进行工作之前,HBase让Master协调MOB hfile的所有压缩维护。集中管理MOB数据可以优化空间,但安全地将该管理与区域服务器协调会导致出现边缘情况,从而导致数据丢失(ref HBASE-22075)。

升级到包含HBASE-22749的HBase版本的MOB功能的用户应注意以下更改:

  • MOB系统不再允许设置“ MOB压缩策略”
  • MOB系统不再每天或以其他方式根据所述压缩策略按原始单元时间戳的日期对MOB值进行分组
  • MOB系统不再需要通过使用带有后缀的MOB存储区中的特殊文件来跟踪单个单元格的删除_del。升级后,您应该将这些文件放在一边。
  • 在默认配置下,MOB系统应花费更少的时间来压缩MOB存储的值。这是以下事实的直接结果:在压缩MOB存储的值时,HBase会在底层文件系统上施加更大的负载。额外负载应为区域服务器数量的数量级的倍数。即,对于具有三个区域服务器和两个主服务器的群集,与主服务器处理的MOB压缩相比,默认配置应使HBase在重写MOB数据的主要压缩期间将HDFS的负载增加三倍;它的速度也应该是大约三倍。
  • 当MOB系统检测到一个表具有引用MOB数据的hfile,但是引用hfile尚未具有所需的文件级元数据时(即,由于使用了HBASE-22749之前的MOB功能),它将拒绝归档任何 MOB。该表中的hfiles。正常情况下,区域服务器执行的定期压缩过程将使用MOB引用更新现有的hfile,但是直到给定表通过所需的压缩为止,操作员应期望MOB功能使用的存储量增加。
  • 使用“ MOB”类型执行压缩不再具有特殊的处理来专门压缩MOB hfile。相反,它将发出警告并压缩表。例如,按以下方式使用HBase Shell将在主日志中产生警告,然后分别对“示例”表的全部或“大”列进行重大压缩。
  • hbase> major_compact'example',nil,'MOB'
hbase> major_compact'示例','大','MOB'

直接将Java API用于的情况也是如此 admin.majorCompact(TableName.valueOf("example"), CompactType.MOB)

  • 同样,手动对表或区域执行主要压缩还将分别压缩该表或区域的MOB存储值。

以下配置设置已被弃用和替换:

  • hbase.master.mob.ttl.cleaner.period 已被替换为 hbase.master.mob.cleaner.period

不再使用以下配置设置:

  • hbase.mob.compaction.mergeable.threshold
  • hbase.mob.delfile.max.count
  • hbase.mob.compaction.batch.size
  • hbase.mob.compactor.class
  • hbase.mob.compaction.threads.max

Hbase MOB 简介相关推荐

  1. HBase MOB简介以及使用

    背景 视图数据现在发展都比较快,数据量也越来越多,数据价值也越来越大,通过数据挖掘分析,可以产生越来越多的价值.所以这种大对象的存储需求也越来越多,HBase 2.0 发布了很多新的特性,其中一个非常 ...

  2. Hbase配置项简介

    Hbase配置项简介 转自网络 Hbase配置项(1) hbase.tmp.dir:本地文件系统的临时目录,默认是java.io.tmpdir/hbase?{user.name}: hbase.roo ...

  3. HBASE region简介

    HBASE region简介 一.为什么要预分区 二.region拆分方式 (一)自动拆分 (二)预拆分 (三)强制拆分 三.推荐Region拆分的方案 四.Hbase的Web界面简单介绍 五.ROW ...

  4. HBase MOB特性介绍

    前言 又是一个周末,学习脚步不歇,今天给大家推荐的是关于HBase  MOB特性的介绍,希望能帮助大家,之前作者有翻译过这篇文章,有社区同学提出文章有些地方翻译不当,小编重新进行了二次翻译与推敲,若有 ...

  5. HBASE MOB设计

    HBase MOB 1 术语 LOB: 大对象.它通常指的是BLOB(二进制大对象)和CLOB(字符 大对象).它可以是PDF文档.Word文档.图像.多媒体对象, 等等.与典型记录不同,LOB通常可 ...

  6. Hbase协处理器简介

    Hbase协处理器简介 使用协处理器的风险:直接在RegionServer上运行,直接接触数据,轻则影响集群的性能和稳定性,重则破坏数据: 系统协处理器针对整个集群,表协处理器只针对某张表:

  7. HBASE Compaction 简介

    HBASE Compaction 简介 序 since: 2021年4月8日  9:43 auth: Hadi 参考: https://blog.csdn.net/u011598442/article ...

  8. HBase过滤器简介

    HBase过滤器简介 HBase过滤器(filter)提供非常强大的特性帮助用户提高其处理表中数据的效率. HBase中两种主要的数据读取函数是get()和scan(),他们都支持直接访问数据和通过指 ...

  9. hbase 数据库简介安装与常用命令的使用

    一:hbase 简介与架构功能 二:hbase 安装与配置 三:hbase 常见shell 命令操作 一:hbase 简介与架构功能 1.1 为什么要使用hbase 数据库 传统的RDBMS关系型数据 ...

最新文章

  1. 线上经验总结:一台 Java 服务器可以跑多少个线程?
  2. 两位智源青年科学家榜上有名!2020青橙奖公布
  3. fitnesse页面增加认证
  4. Python中递增和递减运算符的行为
  5. 使用nginx源代码编译安装lnmp
  6. ribbon客户端的负载均衡
  7. 最小完美哈希函数简介
  8. C++ Opengl WaveFlag(飘扬的旗帜)源码
  9. linux 卸载 flash,使用率下降到8%,Chrome 87将完全移除Flash
  10. 华为鸿蒙os什么运行内存多大,华为公布鸿蒙OS 2.0硬件安装要求:只要128K内存就能跑...
  11. 2万字详解,彻底讲透 全文搜索引擎 Elasticsearch
  12. 构建数据库云管平台 实现数据价值最大化
  13. Linux小工具bc使用
  14. python 下载百度文库_百度文库随便下载,解除限制
  15. 计算机Excel及格率怎么,及格率怎么算在excel里?
  16. PHP数组关于数字键名的问题
  17. Unity实现推箱子
  18. 黄页 - 埃及的官方网上商业指南和本地搜索引擎
  19. fatal: unable to access ‘https://github.com/xxx/123.git/‘: Failed connect to github.com:443 解决方案
  20. AliOS-Things+ESP32 BLE篇 (1)BLE peripheral

热门文章

  1. 窈窕如烟秋水流转——同人立绘征集大赛赵婵雪·金奖
  2. php微信获取openid_微信公众号获取openid(php实例)
  3. JNDI 是个什么东东?
  4. 入门科普:一文看懂机器学习3种类型的概念、根本差别及应用 | 洞见
  5. OTA平台数智化赋能单体酒店,用“轻改造”创“高营收”!
  6. jdk的安装路径在哪_忘记jdk安装路径怎么办
  7. blueStacks模拟器安装应用慢的问题
  8. vmware虚拟机安装ghost版xp-黑屏错误及解决方法
  9. 【2021年CCPC河南省赛】闯关游戏
  10. 基于深度学习GPU+FPGA 多路高清视频处理模块