HBase2 使用协处理器删除指定qualifier的全部数据
用户画像的场景中,通常会开发很多标签,每个标签作为一个qualifier,其中有一些不再使用后需要下线,但hbase提供的delete相关api都只能针对单行,要清理某个qualifier的全部数据不太容易,这里提供一个基于协处理器的实现方案;
hbase对于compact过程提供了以下5个hook可以嵌入自定义代码:
- preCompactSelection
- postCompactSelection
- preCompactScannerOpen
- preCompact
- postCompact
而preCompact会在创建了storeScanner之后读取数据之前调用,因此这里的思路就是对scanner进行代理,创建一个新的scanner实现其next方法,进而对读取到的原始数据进行加工;
代码如下,参考了hbase-examples模块中的ValueRewritingObserver类:
public class QualifierDeletingObserver implements RegionObserver, RegionCoprocessor { private static final Logger LOG = LoggerFactory.getLogger(QualifierDeletingObserver.class); private byte[] qualifierToDelete = null; private Bytes.ByteArrayComparator comparator; @Override public Optional<RegionObserver> getRegionObserver() { // Extremely important to be sure that the coprocessor is invoked as a RegionObserver return Optional.of(this); } @Override public void start( @SuppressWarnings("rawtypes") CoprocessorEnvironment env) throws IOException { RegionCoprocessorEnvironment renv = (RegionCoprocessorEnvironment) env; qualifierToDelete = Bytes.toBytes(renv.getConfiguration().get("qualifier.to.delete")); comparator = new Bytes.ByteArrayComparator(); } @Override public InternalScanner preCompact( ObserverContext<RegionCoprocessorEnvironment> c, Store store, final InternalScanner scanner, ScanType scanType, CompactionLifeCycleTracker tracker, CompactionRequest request) { InternalScanner modifyingScanner = new InternalScanner() { @Override public boolean next(List<Cell> result, ScannerContext scannerContext) throws IOException { boolean ret = scanner.next(result, scannerContext); for (int i = 0; i < result.size(); i++) { Cell c = result.get(i); byte[] qualifier = CellUtil.cloneQualifier(c); if (comparator.compare(qualifier, qualifierToDelete) == 0) { result.remove(i); } } return ret; } @Override public void close() throws IOException { scanner.close(); } }; return modifyingScanner; } }
打成jar包上传到hdfs;
以下是简单的测试过程展示;
create 'cp_test','f' put 'cp_test','rk1','f:q1','123' put 'cp_test','rk1','f:q2','123' put 'cp_test','rk2','f:q1','123' put 'cp_test','rk2','f:q2','123' put 'cp_test','rk2','f:q3','123' hbase(main):015:0> scan 'cp_test' ROW COLUMN+CELL rk1 column=f:q1, timestamp=1590567958995, value=123 rk1 column=f:q2, timestamp=1590567959023, value=123 rk2 column=f:q1, timestamp=1590567959048, value=123 rk2 column=f:q2, timestamp=1590567959073, value=123 rk2 column=f:q3, timestamp=1590567959842, value=123 alter 'cp_test' \ , METHOD => 'table_att', 'coprocessor'=>'hdfs://xxx.jar|xxx.QualifierDelexxxtingObserver|1024|qualifier.to.delete=q1' flush 'cp_test' major_compact 'cp_test' hbase(main):017:0> scan 'cp_test' ROW COLUMN+CELL rk1 column=f:q2, timestamp=1590567959023, value=123 rk2 column=f:q2, timestamp=1590567959073, value=123 rk2 column=f:q3, timestamp=1590567959842, value=123
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
如何在 Ubuntu 20.04 上安装和使用 Docker
本文最先发布在:https://www.itcoder.tech/posts/how-to-install-and-use-docker-on-ubuntu-20-04/ Docker 是一个开源的容器化平台,它允许你构建,测试,并且作为可移动的容器去部署应用,这些容器可以在任何地方运行。一个容器表示一个应用的运行环境,并且包含软件运行所需要的所有依赖软件。 Docker 是现代软件开发,持续集成,持续交付的一部分。 这篇教程将会涉及如何在 Ubuntu 上安装 Docker。 Docker 在标准的 Ubuntu 20.04 软件源中可用,但是可能不是最新的版本。我们将会从 Docker 的官方软件源中安装最新的 Docker 软件包。 一、在 Ubuntu 20.04 上安装 Docker 在 Ubuntu 上安装 Docker 非常直接。我们将会启用 Docker 软件源,导入 GPG key,并且安装软件包。 首先,更新软件包索引,并且安装必要的依赖软件,来添加一个新的 HTTPS 软件源: sudo apt update sudo apt install apt-transp...
- 下一篇
Spark on MaxCompute读写阿里云的Hbase
背景 Spark on MaxCompute可以访问位于阿里云VPC内的实例(例如ECS、HBase、RDS),默认MaxCompute底层网络和外网是隔离的,Spark on MaxCompute提供了一种方案通过配置spark.hadoop.odps.cupid.vpc.domain.list来访问阿里云的vpc网络环境的Hbase。Hbase标准版和增强版的配置不同,本文通过访问阿里云的标准版和增强版的Hbase简单的描述需要加的配置。 Hbase标准版 环境准备Hbase的网络环境是存在vpc下的,所以我们首先要添加安全组开放端口2181、10600、16020.同时Hbase有白名单限制我们需要把对应的MaxCompute的IP加入到Hbase的白名单。设置对应vpc的安全组找到对应的vpc id然后添加安全组设置端口 添加Hb
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2全家桶,快速入门学习开发网站教程