HBase实战之MOB使用指南

本文涉及的产品
云原生多模数据库 Lindorm,多引擎 多规格 0-4节点
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: HBase可以很方便的将图片、文本等文件以二进制的方式进行存储。虽然HBase一般可以处理从1字节到10MB大小的二进制对象,但是HBase通常对于读写路径的优化主要是针对小于100KB的值。当HBase处理数据为100KB~10MB时,由于分裂(split)和压缩(compaction)会引起写的放大,从而会降低HBase性能。

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

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

启用和配置RegionServer上的MOB特性

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

1 设置MOB文件的缓存配置

<property>
    <name>hbase.mob.file.cache.size</name>
    <value>1000</value>
</property>

<property>
    <name>hbase.mob.cache.evict.period</name>
    <value>3600</value>
</property>

<property>
    <name>hbase.mob.cache.evict.remain.ratio</name>
    <value>0.5f</value>
 </property>

说明:

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 配置MobMasterObserver作为协处理器的master,主要用于表在删除后,MOB文件的归档。

<property>
   <name>hbase.coprocessor.master.classes</name>
   <value>org.apache.hadoop.hbase.coprocessor.MobMasterObserver </value>
</property>

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

a . 清理过期的MOB数据(expiredMobFileCleaner)

org.apache.hadoop.hbase.mob.compactions.expiredMobFileCleaner tableName familyName

设置清理延时

<property>
    <name>hbase.mob.cleaner.delay</name>
    <value>60 * 60 * 1000</value>
</property>
  1. 清理工具
org.apache.hadoop.hbase.mob.compactions.Sweeper tableName familyName

属性值设置如下:

<property>
    <name>hbase.mob.compaction.invalid.file.ratio</name>
    <value>0.3f</value>
</property>

<property>
    <name>hbase.mob.compaction.small.file.threshold</name>
    <value>67108864</value>
</property>

<property>
    <name>hbase.mob.compaction.memstore.flush.size</name>
    <value>134217728</value>
</property>

说明:

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/

<property>
    <description>Classpath for typical applications.</description>
     <name>yarn.application.classpath</name>
     <value>
      $HADOOP_CONF_DIR
        $HADOOP_COMMON_HOME/*,$HADOOP_COMMON_HOME/lib/*
        $HADOOP_HDFS_HOME/*,$HADOOP_HDFS_HOME/lib/*,
        $HADOOP_MAPRED_HOME/*,$HADOOP_MAPRED_HOME/lib/*
        $HADOOP_YARN_HOME/*,$HADOOP_YARN_HOME/lib/* 
        $HBASE_HOME/*, $HBASE_HOME/lib/*
    </value>
</property>

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

HColumnDescriptor hcd = new HColumnDescriptor(“f”);
hcd.setValue(MobConstants.IS_MOB, Bytes.toBytes(Boolean.TRUE));

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

HColumnDescriptor hcd;
hcd.setValue(MobConstants.MOB_THRESHOLD, Bytes.toBytes(102400L);

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

c 插入MOB值

KeyValue kv = new KeyValue(row1, family, qf1, ts, KeyValue.Type.Put, value );
Put put = new Put(row1);
put.add(kv);
region.put(put);

d 获取MOB值

Scan scan = new Scan();
InternalScanner scanner = (InternalScanner) region.getScanner(scan);
scanner.next(result, limit);

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

Scan scan = new Scan();
scan.setAttribute(MobConstants.MOB_SCAN_RAW, Bytes.toBytes(Boolean.TRUE));
InternalScanner scanner = (InternalScanner) region.getScanner(scan);
scanner.next(result, limit);

运行一个MOB示例

sudo -u hbase hbase org.apache.hadoop.hbase.IntegrationTestIngestMOB

原文链接:http://hbase.group/article/95

相关实践学习
lindorm多模间数据无缝流转
展现了Lindorm多模融合能力——用kafka API写入,无缝流转在各引擎内进行数据存储和计算的实验。
云数据库HBase版使用教程
&nbsp; 相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情:&nbsp;https://cn.aliyun.com/product/hbase &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
7月前
|
存储 分布式计算 大数据
HBase分布式数据库关键技术与实战:面试经验与必备知识点解析
【4月更文挑战第9天】本文深入剖析了HBase的核心技术,包括数据模型、分布式架构、访问模式和一致性保证,并探讨了其实战应用,如大规模数据存储、实时数据分析及与Hadoop、Spark集成。同时,分享了面试经验,对比了HBase与其他数据库的差异,提出了应对挑战的解决方案,展望了HBase的未来趋势。通过Java API代码示例,帮助读者巩固理解。全面了解和掌握HBase,能为面试和实际工作中的大数据处理提供坚实基础。
473 3
|
4月前
|
分布式计算 大数据 分布式数据库
"揭秘HBase MapReduce高效数据处理秘诀:四步实战攻略,让你轻松玩转大数据分析!"
【8月更文挑战第17天】大数据时代,HBase以高性能、可扩展性成为关键的数据存储解决方案。结合MapReduce分布式计算框架,能高效处理HBase中的大规模数据。本文通过实例展示如何配置HBase集群、编写Map和Reduce函数,以及运行MapReduce作业来计算HBase某列的平均值。此过程不仅限于简单的统计分析,还可扩展至更复杂的数据处理任务,为企业提供强有力的大数据技术支持。
87 1
|
7月前
|
存储 NoSQL 分布式数据库
【HBase入门与实战】一文搞懂HBase!
该文档介绍了HBase,一种高吞吐量的NoSQL数据库,适合处理大规模数据。HBase具备快速读写、列式存储和天然支持集群部署的特点,常用于高并发场景。NoSQL与关系型数据库的主要区别在于数据模型、查询语言和可伸缩性。HBase的物理架构包括Client、Zookeeper、HMaster和RegionServer,其中RegionServer管理数据存储。HBase的读写流程利用MemStore和Bloom Filter提高效率。此外,文档还提到了HBase的应用,如时间序列数据、消息传递和内容服务。
1027 1
【HBase入门与实战】一文搞懂HBase!
|
存储 分布式计算 负载均衡
深入浅出 HBase 实战|青训营笔记
1.介绍 HBase 的适用场景和数据模型;2.分析 HBase 的整体架构和模块设计;3.针对大数据场景 HBase 的解决方案
260 0
深入浅出 HBase 实战|青训营笔记
|
分布式数据库 Hbase
|
分布式数据库 Hbase
《HBase实践之MOB使用指南(未翻译)》电子版地址
HBase实践之MOB使用指南(未翻译)
59 0
《HBase实践之MOB使用指南(未翻译)》电子版地址
|
分布式数据库 Hbase
|
分布式数据库 Hbase
|
分布式计算 Hadoop Java
hbase-微博三表实战demo
这是根据学习图谱中hbase的教程,写的最后的微博案例demo,使用的是mac系统,本地安装的mysql,单机版的hbase,本地环境配置的jdk版本是openjdk11.0.16.1,具体逻辑是用户微博内容写入到内容表,关注该用户的用户根据用户关系表,将数据推送到信箱表中。
236 0
|
大数据 分布式数据库 Hbase
《玩转HBase和Lindorm大数据入门和实战》电子版地址
玩转HBase和Lindorm大数据入门和实战
133 0
《玩转HBase和Lindorm大数据入门和实战》电子版地址