下载hbase-source之后,里面有相应的源代码,可以找到RowCountEndpoint.java,ExampleProto.java等一系列代码。通过阅读源代码以及其中的注释,我们可以知道,Hbase的很多的功能都是通过protobuf这个工具来生成代码,尤其是其中的RPC调用的工作,主要都是通过protobuf软件生成。
参看Roccount.java的代码,我们发现,一个协处理器必须要继承ExampleProto,coprocessor,coprocessorService三个类,其中ExampleProto是定义自己的RPC调用怪反,而其中两个是完成与hbase coprocessor框架融合等作用。一个自定义的协处理器,只要实现自己的的RPC调用规则,然后继承该三大类,就能完成endpoint的协处理器功能。
在这种想法的基础上,模仿RowCountEndpoint的代码,尝试从hbase中取出其中的数据,即通过endpoint协处理完成对数据的读取操作。
在这个过程中,先编写自己的.proto文件,安装protobuf.2.5.0软件,通过命令行输入protoc -I=. --java_out=. example.proto,生成自己的RPC调用规范,然后建立自己的协处理器。
在操作的过程主要出现问题:
1,过多的RPC连接,超过了最大的RPC连接数;刚开始尝试设置zookeeper的最大连接数,但是解决问题有限,然后阅读自己的协处理器代码,发现其中主要是每次得到一个数据的时候,都重新构造了table,导致RPC连接过度,改掉代码之后,问题解决。