HBase+Spark社区 + 关注
手机版

案例篇-HBase 实战之 MOB 使用指南

  1. 云栖社区>
  2. HBase+Spark社区>
  3. 博客>
  4. 正文

案例篇-HBase 实战之 MOB 使用指南

hbase小能手 发布时间:2019-01-10 13:19:35 浏览659 评论0

摘要: 1. 背景 HBase 可以很方便的将图片、文本等文件以二进制的方式进行存储。虽然 HBase 一般可以处理从 1 字节到 10MB 大小的二进制对象,但是 HBase 通常对于读写路径的优化主要是针对小于 100KB 的值。

1. 背景

HBase 可以很方便的将图片、文本等文件以二进制的方式进行存储。虽然 HBase 一般可以处理从 1 字节到 10MB 大小的二进制对象,但是 HBase 通常对于读写路径的优化主要是针对小于 100KB 的值。当 HBase 处理数据为 100KB~10MB 时, 由于分裂(split)和压缩(compaction)会引起写的放大,从而会降低 HBase 性 能。所以在 HBase2.0+引入了 MOB 特性,这样保持了 HBase 的高性能、强一致 性和低开销。

若要启用 MOB 功能,需要在每个 RegionServer 进行配置,并在建表或者修改表 时对指定列族启用 MOB 特性。在 HBase 尝鲜版中启用 MOB 功能,需要由 admin 用户设置定期进程,以重新优化 MOB 数据的分布。

2. 启用和配置 RegionServer 上的 MOB 特性

增加或者修改 hbase-site.xml 文件中的某些配置

2.1 设置 MOB 文件的缓存配置

_2019_01_10_11_11_54

说明:

  1. hbase.mob.file.cache.size 打开的文件句柄缓存数,默认值是 1000。通 过增加文件句柄数可以提高读的性能,可以减少频繁的打开、关闭文件。若这个值设置过大,会导致“too many opened file handers”。
  2. hbase.mob.cache.evict.period MOB 缓存淘汰缓存的 MOB 文件时间间隔
    (以秒为单位),默认值为 3600 秒。
  3. hbase.mob.cache.evict.remain.ratio 当缓存的 MOB 文件数 目超 过hbase.mob.file.cache.size 设置的数目后,会触发 MOB 缓存淘汰机制 (eviction),0.5f 为剩余的 MOB 缓存比率(0~1),默认的比率为 0.5f。

2.2 配置 MobMasterObserver 作为协处理器的 master

主要用于表在删除后,MOB 文件的归档。

_2019_01_10_11_33_17

MOB的管理 MOB 特性为 HBase 引入新的读写路径,此时我们采用外部工具对其进行优化处理,一个是 expiredMobFileCleanerTTL 处理 TTL 和时间的过期数据,另一个是清理工具用来合并小的 MOB 文件或者多次更新、删除的 MOB 文件。

2.2.1 清理过期的 MOB 数据(expiredMobFileCleaner)

_2019_01_10_11_34_17

设置清理延时

_2019_01_10_11_34_57

2.2.2 清理工具

_2019_01_10_11_35_31

属性值设置如下:

_2019_01_10_11_54_35

说明:

  1. hbase.mob.compaction.invalid.file.ratio 如果在 MOB 文件中删除了太 多的单元格,则被视为作为无效文件,需要重新写入或者合并。当 MOB 文件 (mobFileSize)大小减去存在的单元格(existingCellsSize)大小之差除 以 MOB 文件(mobFileSize)的比率小于设定的值时,我们就认为其为无效 文件。默认值为0.3f。
  2. hbase.mob.compaction.small.file.threshold 如果 MOB 的大小小于阈值, 则视为小文件,需要合并。默认值为64MB。
  3. hbase.mob.compaction.memstore.flush.size MOB 里 memstore 大小,超过 此大小就会 flush,并且每个 sweep reducer 拥有各自 memstore。

警告
使用清理工具最坏的情况:MOB 文件压缩合并成功,但是相关的(put)更新失败。 这意味着新的 MOB 文件已经创建但未能将新的 MOB 文件路径。存入 HBase 中, 因此 HBase 不会指向这些 MOB 文件。

小贴士

请检查 yarn-site.xml 的配置,在 yarn.application.classpath 中添加 hbase 的安装 路径:$HBASE_HOME/ 和 hbase 的 lib 路径: $HBASE_HOME/lib/

_2019_01_10_11_55_54

在表中开启 MOB 特性 a 将列族设置为 MOB

_2019_01_10_11_56_20

2.2.3 设置 MOB 单元格的阈值,默认为 102400

_2019_01_10_11_57_07

对于客户端而言,MOB 单元格操作和普通单元格类似。

2.2.4 插入 MOB 值

_2019_01_10_11_59_07

2.2.5 获取 MOB 值

_2019_01_10_11_59_41

2.2.6 获取 MOB 所有数据(raw =true)

_2019_01_10_1_15_49

运行一个 MOB 示例

_2019_01_10_1_16_32

【云栖快讯】云栖专辑 | 阿里开发者们的20个感悟,一通百通  详情请点击

网友评论