元注解:@Retention 在hbase中用于获取确定高优先级的RPC操作

简介:

概念

        注解@Retention可以用来修饰注解,是注解的注解,称为元注解。
        Retention注解有一个属性value,是RetentionPolicy类型的,Enum RetentionPolicy是一个枚举类型,
        这个枚举决定了Retention注解应该如何去保持,也可理解为Rentention 搭配 RententionPolicy使用。

        RetentionPolicy有3个值:CLASS  RUNTIME   SOURCE
        用@Retention(RetentionPolicy.CLASS)修饰的注解,表示注解的信息被保留在class文件(字节码文件)中当程序编译时,但不会被虚拟机读取在运行的时候;
        用@Retention(RetentionPolicy.SOURCE )修饰的注解,表示注解的信息会被编译器抛弃,不会留在class文件中,注解的信息只会留在源文件中;
        用@Retention(RetentionPolicy.RUNTIME )修饰的注解,表示注解的信息被保留在class文件(字节码文件)中当程序编译时,会被虚拟机保留在运行时,
        所以他们可以用反射的方式读取。RetentionPolicy.RUNTIME 可以让你从JVM中读取Annotation注解的信息,以便在分析程序的时候使用.

在hbase中的使用

        参见类org.apache.hadoop.hbase.regionserver.AnnotationReadingPriorityFunction

        用于确定高优先级的RPC操作

        1:如果请求的方法使用了QosPriority of QOS_HIGH注释,则认为是高优先级

        2:如果请求是操作meta region,则认为是高优先级(代码层面针对此做了一些优化操作,避免过早的反序列化PB对象)

代码示例

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.reflect.Method;
import java.net.UnknownHostException;
import java.util.HashMap;
import java.util.Map;

import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CloseRegionResponse;
import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CompactRegionResponse;
import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetOnlineRegionResponse;
import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoResponse;
import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.MergeRegionsResponse;
import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionResponse;
import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ReplicateWALEntryResponse;
import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.SplitRegionResponse;

@SuppressWarnings("unchecked")
public class Test {
	public static void main(String[] args) throws UnknownHostException {
		Test test = new Test();
	}

	public Test() {
		Map<String, Integer> qosMap = new HashMap<String, Integer>();
		for (Method m : Test.class.getMethods()) {
			QosPriority p = m.getAnnotation(QosPriority.class);
			if (p != null) {
				String capitalizedMethodName = capitalize(m.getName());
				qosMap.put(capitalizedMethodName, p.priority());
				System.out.println(capitalizedMethodName + "," + p.priority());
			}
		}
	}

	@Retention(RetentionPolicy.RUNTIME)
	protected @interface QosPriority {
		int priority() default 0;
	}

	@QosPriority(priority = HConstants.HIGH_QOS)
	public GetRegionInfoResponse getRegionInfo() {
		System.out.println("getRegionInfo");
		return null;
	}

	@QosPriority(priority = HConstants.HIGH_QOS)
	public GetOnlineRegionResponse getOnlineRegion() {
		System.out.println("getOnlineRegion");
		return null;
	}

	@QosPriority(priority = HConstants.HIGH_QOS)
	public OpenRegionResponse openRegion() {
		System.out.println("openRegion");
		return null;
	}

	@QosPriority(priority = HConstants.HIGH_QOS)
	public CloseRegionResponse closeRegion() {
		System.out.println("closeRegion");
		return null;
	}

	@QosPriority(priority = HConstants.HIGH_QOS)
	public SplitRegionResponse splitRegion() {
		System.out.println("splitRegion");
		return null;
	}

	@QosPriority(priority = HConstants.HIGH_QOS)
	public MergeRegionsResponse mergeRegions() {
		System.out.println("mergeRegions");
		return null;
	}

	@QosPriority(priority = HConstants.HIGH_QOS)
	public CompactRegionResponse compactRegion() {
		System.out.println("compactRegion");
		return null;
	}

	@QosPriority(priority = HConstants.REPLICATION_QOS)
	public ReplicateWALEntryResponse replicateWALEntry() {
		System.out.println("replicateWALEntry");
		return null;
	}

	@QosPriority(priority = HConstants.REPLAY_QOS)
	public ReplicateWALEntryResponse replay() {
		System.out.println("replay");
		return null;
	}

	private String capitalize(final String s) {
		StringBuilder strBuilder = new StringBuilder(s);
		strBuilder.setCharAt(0, Character.toUpperCase(strBuilder.charAt(0)));
		return strBuilder.toString();
	}
}
相关实践学习
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
目录
相关文章
|
8月前
|
分布式计算 资源调度 Hadoop
HBase表数据的读、写操作与综合操作
HBase表数据的读、写操作与综合操作
104 0
|
8月前
|
Java Shell 分布式数据库
【大数据技术Hadoop+Spark】HBase数据模型、Shell操作、Java API示例程序讲解(附源码 超详细)
【大数据技术Hadoop+Spark】HBase数据模型、Shell操作、Java API示例程序讲解(附源码 超详细)
166 0
|
Shell 分布式数据库 Apache
Hbase常用shell操作
Hbase常用shell操作
444 1
|
Java Shell 分布式数据库
HBase高级操作
HBase高级操作
308 0
|
8月前
|
分布式计算 Hadoop Shell
熟悉常用的HBase操作
熟悉常用的HBase操作
179 3
熟悉常用的HBase操作
|
8月前
|
分布式计算 Hadoop Shell
|
6月前
|
DataWorks 数据管理 大数据
DataWorks操作报错合集之在连接HBase时出现超时问题,该怎么解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
7月前
|
Java 大数据 API
【大数据】HDFS、HBase操作教程(含指令和JAVA API)
【大数据】HDFS、HBase操作教程(含指令和JAVA API)
160 0
【大数据】HDFS、HBase操作教程(含指令和JAVA API)
|
8月前
|
消息中间件 关系型数据库 MySQL
实时计算 Flink版操作报错合集之使用 Event Time Temporal Join 关联多个 HBase 后,Kafka 数据的某个字段变为 null 是什么原因导致的
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
160 0
|
8月前
|
SQL 消息中间件 Kafka
实时计算 Flink版操作报错合集之使用 Event Time Temporal Join 关联多个 HBase 后,Kafka 数据的某个字段变为 null 是什么原因导致的
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
109 0