元注解:@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注解的信息,以便在分析程序的时候使用.
参见类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(); }
第十二届 BigData NoSQL Meetup — 基于hbase的New sql落地实践 立即下载
相关文章
- HBase面试题精讲「建议收藏」
- java连接hbase
- 基于Django+LayUI+HBase的文献数据挖掘系统(附源码)
- HBase 快速入门(安装和命令操作)
- Hadoop生态上几个技术的关系与区别:hive、pig、hbase 关系与区别
- NoSql数据库之Hbase详解数据库
- Hbase(三) hbase协处理器与二级索引详解大数据
- Hbase(五) hbase内部原理详解大数据
- Hadoop综合练习第十一节–HBase作业详解大数据
- HBase学习之路 (七)HBase 原理详解大数据
- HBase学习之路 (五)MapReduce操作Hbase详解大数据
- 大数据时代数据库-云HBase架构&生态&实践详解大数据
- Hbase三Java,python操作Hbase详解大数据
- HBase集群中RegionServer崩溃后的快速恢复措施探索详解大数据
- HBase-1.2.1之Get操作源码学习详解大数据
- Hadoop、Hbase、Hive、Spark分布式系统架构详解大数据
- hbase-1.2.1之scan、batch操作的源码学习详解编程语言
- hbase-1.2.1之put操作源码学习详解编程语言
- MySQL数据导入HBase:构建NoSQL数据库(mysql导入hbase)
- Redis与Hbase:探索高效缓存和分布式数据库的最佳实践(redis与hbase)
- Redis实现从HBase中批量读取数据(redis读取hbase)