zoukankan      html  css  js  c++  java
  • hbase协处理器编码实例

    Observer协处理器通常在一个特定的事件(诸如GetPut)之前或之后发生,相当于RDBMS中的触发器。Endpoint协处理器则类似于RDBMS中的存储过程,因为它可以让你在RegionServer上对数据执行自定义计算,而不是在客户端上执行计算。

    本文是以上两者的简单实例,使用的环境:环境 jdk1.8 hadoop2.6.5 hbase1.2.4。

    1、Endpoint实例 
    1> 编写适用于protobuf的proto文件,如下,尽量不要带注释,因为编译时可能出现乱码

    option java_package = "com.endpoint.test";
    option java_outer_classname = "Sum";
    option java_generic_services = true;
    option java_generate_equals_and_hash = true;
    option optimize_for = SPEED;
    
    message SumRequest {
        required string family = 1;    
        required string column = 2;    
    }
    message SumResponse {
        required int64 sum = 1 [default = 0];
    }
    service SumService {
        rpc getSum(SumRequest)
            returns (SumResponse);
    }

     2> 编译上面的proto文件
    使用protoc程序进行编译,linux下或者windows均可,protoc程序可以直接从github下载:https://github.com/google/protobuf/releases,也可以自己编译生成,参见protobuf的编译安装

    注意,编译的版本要与hadoop以及hbase使用的版本相同,或者略高,但最好不要过高,hadoop2.6.5 hbase1.2.4使用的都是protobuf2.5.0的版本,写此篇文章时的最新版为3.1.0

    (高版本必须指定syntax,例如proto3的syntax在第一行非空白非注释行,必须写:syntax = "proto3",字段规则移除了 “required”,并把 “optional” 改名为 “singular”,移除了 default 选项。可搜索Protobuf 的 proto3 与 proto2 的区别进行了解。)下载的话选择带win或linux的版本,这是编译好的版本。有很多带具体语言的版本,是一些具体某种语言的发行版源码包。为了与hbase以及hadoop统一起来,此处用的是protoc-2.5.0-win32.zip。

    解压文件:

     

     使用windows命令行进入上面的目录,执行以下命令即可:

    protoc.exe sum1.proto --java_out=./

    高版本有编译好的适用于linux下的protoc程序文件,低版本没有。在linux下执行以下命令:

    protoc sum.proto --java_out=./

     结果都一样,生成的代码参见折叠部分,有很多,因为上面文件中指定java_outer_classname = "Sum",所以会生成Sum类,将这个类引入到项目中,注意项目的包名称与上面文件中指定(option java_package = "com.endpoint.test")的名称要一致。

       1 // Generated by the protocol buffer compiler.  DO NOT EDIT!
       2 // source: sumcode.proto
       3 
       4 package com.endpoint.test;
       5 
       6 public final class Sum {
       7   private Sum() {}
       8   public static void registerAllExtensions(
       9       com.google.protobuf.ExtensionRegistry registry) {
      10   }
      11   public interface SumRequestOrBuilder
      12       extends com.google.protobuf.MessageOrBuilder {
      13 
      14     // required string family = 1;
      15     /**
      16      * <code>required string family = 1;</code>
      17      */
      18     boolean hasFamily();
      19     /**
      20      * <code>required string family = 1;</code>
      21      */
      22     java.lang.String getFamily();
      23     /**
      24      * <code>required string family = 1;</code>
      25      */
      26     com.google.protobuf.ByteString
      27         getFamilyBytes();
      28 
      29     // required string column = 2;
      30     /**
      31      * <code>required string column = 2;</code>
      32      */
      33     boolean hasColumn();
      34     /**
      35      * <code>required string column = 2;</code>
      36      */
      37     java.lang.String getColumn();
      38     /**
      39      * <code>required string column = 2;</code>
      40      */
      41     com.google.protobuf.ByteString
      42         getColumnBytes();
      43   }
      44   /**
      45    * Protobuf type {@code SumRequest}
      46    */
      47   public static final class SumRequest extends
      48       com.google.protobuf.GeneratedMessage
      49       implements SumRequestOrBuilder {
      50     // Use SumRequest.newBuilder() to construct.
      51     private SumRequest(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      52       super(builder);
      53       this.unknownFields = builder.getUnknownFields();
      54     }
      55     private SumRequest(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
      56 
      57     private static final SumRequest defaultInstance;
      58     public static SumRequest getDefaultInstance() {
      59       return defaultInstance;
      60     }
      61 
      62     public SumRequest getDefaultInstanceForType() {
      63       return defaultInstance;
      64     }
      65 
      66     private final com.google.protobuf.UnknownFieldSet unknownFields;
      67     @java.lang.Override
      68     public final com.google.protobuf.UnknownFieldSet
      69         getUnknownFields() {
      70       return this.unknownFields;
      71     }
      72     private SumRequest(
      73         com.google.protobuf.CodedInputStream input,
      74         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
      75         throws com.google.protobuf.InvalidProtocolBufferException {
      76       initFields();
      77       int mutable_bitField0_ = 0;
      78       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
      79           com.google.protobuf.UnknownFieldSet.newBuilder();
      80       try {
      81         boolean done = false;
      82         while (!done) {
      83           int tag = input.readTag();
      84           switch (tag) {
      85             case 0:
      86               done = true;
      87               break;
      88             default: {
      89               if (!parseUnknownField(input, unknownFields,
      90                                      extensionRegistry, tag)) {
      91                 done = true;
      92               }
      93               break;
      94             }
      95             case 10: {
      96               bitField0_ |= 0x00000001;
      97               family_ = input.readBytes();
      98               break;
      99             }
     100             case 18: {
     101               bitField0_ |= 0x00000002;
     102               column_ = input.readBytes();
     103               break;
     104             }
     105           }
     106         }
     107       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
     108         throw e.setUnfinishedMessage(this);
     109       } catch (java.io.IOException e) {
     110         throw new com.google.protobuf.InvalidProtocolBufferException(
     111             e.getMessage()).setUnfinishedMessage(this);
     112       } finally {
     113         this.unknownFields = unknownFields.build();
     114         makeExtensionsImmutable();
     115       }
     116     }
     117     public static final com.google.protobuf.Descriptors.Descriptor
     118         getDescriptor() {
     119       return com.endpoint.test.Sum.internal_static_SumRequest_descriptor;
     120     }
     121 
     122     protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
     123         internalGetFieldAccessorTable() {
     124       return com.endpoint.test.Sum.internal_static_SumRequest_fieldAccessorTable
     125           .ensureFieldAccessorsInitialized(
     126               com.endpoint.test.Sum.SumRequest.class, com.endpoint.test.Sum.SumRequest.Builder.class);
     127     }
     128 
     129     public static com.google.protobuf.Parser<SumRequest> PARSER =
     130         new com.google.protobuf.AbstractParser<SumRequest>() {
     131       public SumRequest parsePartialFrom(
     132           com.google.protobuf.CodedInputStream input,
     133           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
     134           throws com.google.protobuf.InvalidProtocolBufferException {
     135         return new SumRequest(input, extensionRegistry);
     136       }
     137     };
     138 
     139     @java.lang.Override
     140     public com.google.protobuf.Parser<SumRequest> getParserForType() {
     141       return PARSER;
     142     }
     143 
     144     private int bitField0_;
     145     // required string family = 1;
     146     public static final int FAMILY_FIELD_NUMBER = 1;
     147     private java.lang.Object family_;
     148     /**
     149      * <code>required string family = 1;</code>
     150      */
     151     public boolean hasFamily() {
     152       return ((bitField0_ & 0x00000001) == 0x00000001);
     153     }
     154     /**
     155      * <code>required string family = 1;</code>
     156      */
     157     public java.lang.String getFamily() {
     158       java.lang.Object ref = family_;
     159       if (ref instanceof java.lang.String) {
     160         return (java.lang.String) ref;
     161       } else {
     162         com.google.protobuf.ByteString bs = 
     163             (com.google.protobuf.ByteString) ref;
     164         java.lang.String s = bs.toStringUtf8();
     165         if (bs.isValidUtf8()) {
     166           family_ = s;
     167         }
     168         return s;
     169       }
     170     }
     171     /**
     172      * <code>required string family = 1;</code>
     173      */
     174     public com.google.protobuf.ByteString
     175         getFamilyBytes() {
     176       java.lang.Object ref = family_;
     177       if (ref instanceof java.lang.String) {
     178         com.google.protobuf.ByteString b = 
     179             com.google.protobuf.ByteString.copyFromUtf8(
     180                 (java.lang.String) ref);
     181         family_ = b;
     182         return b;
     183       } else {
     184         return (com.google.protobuf.ByteString) ref;
     185       }
     186     }
     187 
     188     // required string column = 2;
     189     public static final int COLUMN_FIELD_NUMBER = 2;
     190     private java.lang.Object column_;
     191     /**
     192      * <code>required string column = 2;</code>
     193      */
     194     public boolean hasColumn() {
     195       return ((bitField0_ & 0x00000002) == 0x00000002);
     196     }
     197     /**
     198      * <code>required string column = 2;</code>
     199      */
     200     public java.lang.String getColumn() {
     201       java.lang.Object ref = column_;
     202       if (ref instanceof java.lang.String) {
     203         return (java.lang.String) ref;
     204       } else {
     205         com.google.protobuf.ByteString bs = 
     206             (com.google.protobuf.ByteString) ref;
     207         java.lang.String s = bs.toStringUtf8();
     208         if (bs.isValidUtf8()) {
     209           column_ = s;
     210         }
     211         return s;
     212       }
     213     }
     214     /**
     215      * <code>required string column = 2;</code>
     216      */
     217     public com.google.protobuf.ByteString
     218         getColumnBytes() {
     219       java.lang.Object ref = column_;
     220       if (ref instanceof java.lang.String) {
     221         com.google.protobuf.ByteString b = 
     222             com.google.protobuf.ByteString.copyFromUtf8(
     223                 (java.lang.String) ref);
     224         column_ = b;
     225         return b;
     226       } else {
     227         return (com.google.protobuf.ByteString) ref;
     228       }
     229     }
     230 
     231     private void initFields() {
     232       family_ = "";
     233       column_ = "";
     234     }
     235     private byte memoizedIsInitialized = -1;
     236     public final boolean isInitialized() {
     237       byte isInitialized = memoizedIsInitialized;
     238       if (isInitialized != -1) return isInitialized == 1;
     239 
     240       if (!hasFamily()) {
     241         memoizedIsInitialized = 0;
     242         return false;
     243       }
     244       if (!hasColumn()) {
     245         memoizedIsInitialized = 0;
     246         return false;
     247       }
     248       memoizedIsInitialized = 1;
     249       return true;
     250     }
     251 
     252     public void writeTo(com.google.protobuf.CodedOutputStream output)
     253                         throws java.io.IOException {
     254       getSerializedSize();
     255       if (((bitField0_ & 0x00000001) == 0x00000001)) {
     256         output.writeBytes(1, getFamilyBytes());
     257       }
     258       if (((bitField0_ & 0x00000002) == 0x00000002)) {
     259         output.writeBytes(2, getColumnBytes());
     260       }
     261       getUnknownFields().writeTo(output);
     262     }
     263 
     264     private int memoizedSerializedSize = -1;
     265     public int getSerializedSize() {
     266       int size = memoizedSerializedSize;
     267       if (size != -1) return size;
     268 
     269       size = 0;
     270       if (((bitField0_ & 0x00000001) == 0x00000001)) {
     271         size += com.google.protobuf.CodedOutputStream
     272           .computeBytesSize(1, getFamilyBytes());
     273       }
     274       if (((bitField0_ & 0x00000002) == 0x00000002)) {
     275         size += com.google.protobuf.CodedOutputStream
     276           .computeBytesSize(2, getColumnBytes());
     277       }
     278       size += getUnknownFields().getSerializedSize();
     279       memoizedSerializedSize = size;
     280       return size;
     281     }
     282 
     283     private static final long serialVersionUID = 0L;
     284     @java.lang.Override
     285     protected java.lang.Object writeReplace()
     286         throws java.io.ObjectStreamException {
     287       return super.writeReplace();
     288     }
     289 
     290     @java.lang.Override
     291     public boolean equals(final java.lang.Object obj) {
     292       if (obj == this) {
     293        return true;
     294       }
     295       if (!(obj instanceof com.endpoint.test.Sum.SumRequest)) {
     296         return super.equals(obj);
     297       }
     298       com.endpoint.test.Sum.SumRequest other = (com.endpoint.test.Sum.SumRequest) obj;
     299 
     300       boolean result = true;
     301       result = result && (hasFamily() == other.hasFamily());
     302       if (hasFamily()) {
     303         result = result && getFamily()
     304             .equals(other.getFamily());
     305       }
     306       result = result && (hasColumn() == other.hasColumn());
     307       if (hasColumn()) {
     308         result = result && getColumn()
     309             .equals(other.getColumn());
     310       }
     311       result = result &&
     312           getUnknownFields().equals(other.getUnknownFields());
     313       return result;
     314     }
     315 
     316     private int memoizedHashCode = 0;
     317     @java.lang.Override
     318     public int hashCode() {
     319       if (memoizedHashCode != 0) {
     320         return memoizedHashCode;
     321       }
     322       int hash = 41;
     323       hash = (19 * hash) + getDescriptorForType().hashCode();
     324       if (hasFamily()) {
     325         hash = (37 * hash) + FAMILY_FIELD_NUMBER;
     326         hash = (53 * hash) + getFamily().hashCode();
     327       }
     328       if (hasColumn()) {
     329         hash = (37 * hash) + COLUMN_FIELD_NUMBER;
     330         hash = (53 * hash) + getColumn().hashCode();
     331       }
     332       hash = (29 * hash) + getUnknownFields().hashCode();
     333       memoizedHashCode = hash;
     334       return hash;
     335     }
     336 
     337     public static com.endpoint.test.Sum.SumRequest parseFrom(
     338         com.google.protobuf.ByteString data)
     339         throws com.google.protobuf.InvalidProtocolBufferException {
     340       return PARSER.parseFrom(data);
     341     }
     342     public static com.endpoint.test.Sum.SumRequest parseFrom(
     343         com.google.protobuf.ByteString data,
     344         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
     345         throws com.google.protobuf.InvalidProtocolBufferException {
     346       return PARSER.parseFrom(data, extensionRegistry);
     347     }
     348     public static com.endpoint.test.Sum.SumRequest parseFrom(byte[] data)
     349         throws com.google.protobuf.InvalidProtocolBufferException {
     350       return PARSER.parseFrom(data);
     351     }
     352     public static com.endpoint.test.Sum.SumRequest parseFrom(
     353         byte[] data,
     354         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
     355         throws com.google.protobuf.InvalidProtocolBufferException {
     356       return PARSER.parseFrom(data, extensionRegistry);
     357     }
     358     public static com.endpoint.test.Sum.SumRequest parseFrom(java.io.InputStream input)
     359         throws java.io.IOException {
     360       return PARSER.parseFrom(input);
     361     }
     362     public static com.endpoint.test.Sum.SumRequest parseFrom(
     363         java.io.InputStream input,
     364         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
     365         throws java.io.IOException {
     366       return PARSER.parseFrom(input, extensionRegistry);
     367     }
     368     public static com.endpoint.test.Sum.SumRequest parseDelimitedFrom(java.io.InputStream input)
     369         throws java.io.IOException {
     370       return PARSER.parseDelimitedFrom(input);
     371     }
     372     public static com.endpoint.test.Sum.SumRequest parseDelimitedFrom(
     373         java.io.InputStream input,
     374         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
     375         throws java.io.IOException {
     376       return PARSER.parseDelimitedFrom(input, extensionRegistry);
     377     }
     378     public static com.endpoint.test.Sum.SumRequest parseFrom(
     379         com.google.protobuf.CodedInputStream input)
     380         throws java.io.IOException {
     381       return PARSER.parseFrom(input);
     382     }
     383     public static com.endpoint.test.Sum.SumRequest parseFrom(
     384         com.google.protobuf.CodedInputStream input,
     385         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
     386         throws java.io.IOException {
     387       return PARSER.parseFrom(input, extensionRegistry);
     388     }
     389 
     390     public static Builder newBuilder() { return Builder.create(); }
     391     public Builder newBuilderForType() { return newBuilder(); }
     392     public static Builder newBuilder(com.endpoint.test.Sum.SumRequest prototype) {
     393       return newBuilder().mergeFrom(prototype);
     394     }
     395     public Builder toBuilder() { return newBuilder(this); }
     396 
     397     @java.lang.Override
     398     protected Builder newBuilderForType(
     399         com.google.protobuf.GeneratedMessage.BuilderParent parent) {
     400       Builder builder = new Builder(parent);
     401       return builder;
     402     }
     403     /**
     404      * Protobuf type {@code SumRequest}
     405      */
     406     public static final class Builder extends
     407         com.google.protobuf.GeneratedMessage.Builder<Builder>
     408        implements com.endpoint.test.Sum.SumRequestOrBuilder {
     409       public static final com.google.protobuf.Descriptors.Descriptor
     410           getDescriptor() {
     411         return com.endpoint.test.Sum.internal_static_SumRequest_descriptor;
     412       }
     413 
     414       protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
     415           internalGetFieldAccessorTable() {
     416         return com.endpoint.test.Sum.internal_static_SumRequest_fieldAccessorTable
     417             .ensureFieldAccessorsInitialized(
     418                 com.endpoint.test.Sum.SumRequest.class, com.endpoint.test.Sum.SumRequest.Builder.class);
     419       }
     420 
     421       // Construct using com.endpoint.test.Sum.SumRequest.newBuilder()
     422       private Builder() {
     423         maybeForceBuilderInitialization();
     424       }
     425 
     426       private Builder(
     427           com.google.protobuf.GeneratedMessage.BuilderParent parent) {
     428         super(parent);
     429         maybeForceBuilderInitialization();
     430       }
     431       private void maybeForceBuilderInitialization() {
     432         if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
     433         }
     434       }
     435       private static Builder create() {
     436         return new Builder();
     437       }
     438 
     439       public Builder clear() {
     440         super.clear();
     441         family_ = "";
     442         bitField0_ = (bitField0_ & ~0x00000001);
     443         column_ = "";
     444         bitField0_ = (bitField0_ & ~0x00000002);
     445         return this;
     446       }
     447 
     448       public Builder clone() {
     449         return create().mergeFrom(buildPartial());
     450       }
     451 
     452       public com.google.protobuf.Descriptors.Descriptor
     453           getDescriptorForType() {
     454         return com.endpoint.test.Sum.internal_static_SumRequest_descriptor;
     455       }
     456 
     457       public com.endpoint.test.Sum.SumRequest getDefaultInstanceForType() {
     458         return com.endpoint.test.Sum.SumRequest.getDefaultInstance();
     459       }
     460 
     461       public com.endpoint.test.Sum.SumRequest build() {
     462         com.endpoint.test.Sum.SumRequest result = buildPartial();
     463         if (!result.isInitialized()) {
     464           throw newUninitializedMessageException(result);
     465         }
     466         return result;
     467       }
     468 
     469       public com.endpoint.test.Sum.SumRequest buildPartial() {
     470         com.endpoint.test.Sum.SumRequest result = new com.endpoint.test.Sum.SumRequest(this);
     471         int from_bitField0_ = bitField0_;
     472         int to_bitField0_ = 0;
     473         if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
     474           to_bitField0_ |= 0x00000001;
     475         }
     476         result.family_ = family_;
     477         if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
     478           to_bitField0_ |= 0x00000002;
     479         }
     480         result.column_ = column_;
     481         result.bitField0_ = to_bitField0_;
     482         onBuilt();
     483         return result;
     484       }
     485 
     486       public Builder mergeFrom(com.google.protobuf.Message other) {
     487         if (other instanceof com.endpoint.test.Sum.SumRequest) {
     488           return mergeFrom((com.endpoint.test.Sum.SumRequest)other);
     489         } else {
     490           super.mergeFrom(other);
     491           return this;
     492         }
     493       }
     494 
     495       public Builder mergeFrom(com.endpoint.test.Sum.SumRequest other) {
     496         if (other == com.endpoint.test.Sum.SumRequest.getDefaultInstance()) return this;
     497         if (other.hasFamily()) {
     498           bitField0_ |= 0x00000001;
     499           family_ = other.family_;
     500           onChanged();
     501         }
     502         if (other.hasColumn()) {
     503           bitField0_ |= 0x00000002;
     504           column_ = other.column_;
     505           onChanged();
     506         }
     507         this.mergeUnknownFields(other.getUnknownFields());
     508         return this;
     509       }
     510 
     511       public final boolean isInitialized() {
     512         if (!hasFamily()) {
     513           
     514           return false;
     515         }
     516         if (!hasColumn()) {
     517           
     518           return false;
     519         }
     520         return true;
     521       }
     522 
     523       public Builder mergeFrom(
     524           com.google.protobuf.CodedInputStream input,
     525           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
     526           throws java.io.IOException {
     527         com.endpoint.test.Sum.SumRequest parsedMessage = null;
     528         try {
     529           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
     530         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
     531           parsedMessage = (com.endpoint.test.Sum.SumRequest) e.getUnfinishedMessage();
     532           throw e;
     533         } finally {
     534           if (parsedMessage != null) {
     535             mergeFrom(parsedMessage);
     536           }
     537         }
     538         return this;
     539       }
     540       private int bitField0_;
     541 
     542       // required string family = 1;
     543       private java.lang.Object family_ = "";
     544       /**
     545        * <code>required string family = 1;</code>
     546        */
     547       public boolean hasFamily() {
     548         return ((bitField0_ & 0x00000001) == 0x00000001);
     549       }
     550       /**
     551        * <code>required string family = 1;</code>
     552        */
     553       public java.lang.String getFamily() {
     554         java.lang.Object ref = family_;
     555         if (!(ref instanceof java.lang.String)) {
     556           java.lang.String s = ((com.google.protobuf.ByteString) ref)
     557               .toStringUtf8();
     558           family_ = s;
     559           return s;
     560         } else {
     561           return (java.lang.String) ref;
     562         }
     563       }
     564       /**
     565        * <code>required string family = 1;</code>
     566        */
     567       public com.google.protobuf.ByteString
     568           getFamilyBytes() {
     569         java.lang.Object ref = family_;
     570         if (ref instanceof String) {
     571           com.google.protobuf.ByteString b = 
     572               com.google.protobuf.ByteString.copyFromUtf8(
     573                   (java.lang.String) ref);
     574           family_ = b;
     575           return b;
     576         } else {
     577           return (com.google.protobuf.ByteString) ref;
     578         }
     579       }
     580       /**
     581        * <code>required string family = 1;</code>
     582        */
     583       public Builder setFamily(
     584           java.lang.String value) {
     585         if (value == null) {
     586     throw new NullPointerException();
     587   }
     588   bitField0_ |= 0x00000001;
     589         family_ = value;
     590         onChanged();
     591         return this;
     592       }
     593       /**
     594        * <code>required string family = 1;</code>
     595        */
     596       public Builder clearFamily() {
     597         bitField0_ = (bitField0_ & ~0x00000001);
     598         family_ = getDefaultInstance().getFamily();
     599         onChanged();
     600         return this;
     601       }
     602       /**
     603        * <code>required string family = 1;</code>
     604        */
     605       public Builder setFamilyBytes(
     606           com.google.protobuf.ByteString value) {
     607         if (value == null) {
     608     throw new NullPointerException();
     609   }
     610   bitField0_ |= 0x00000001;
     611         family_ = value;
     612         onChanged();
     613         return this;
     614       }
     615 
     616       // required string column = 2;
     617       private java.lang.Object column_ = "";
     618       /**
     619        * <code>required string column = 2;</code>
     620        */
     621       public boolean hasColumn() {
     622         return ((bitField0_ & 0x00000002) == 0x00000002);
     623       }
     624       /**
     625        * <code>required string column = 2;</code>
     626        */
     627       public java.lang.String getColumn() {
     628         java.lang.Object ref = column_;
     629         if (!(ref instanceof java.lang.String)) {
     630           java.lang.String s = ((com.google.protobuf.ByteString) ref)
     631               .toStringUtf8();
     632           column_ = s;
     633           return s;
     634         } else {
     635           return (java.lang.String) ref;
     636         }
     637       }
     638       /**
     639        * <code>required string column = 2;</code>
     640        */
     641       public com.google.protobuf.ByteString
     642           getColumnBytes() {
     643         java.lang.Object ref = column_;
     644         if (ref instanceof String) {
     645           com.google.protobuf.ByteString b = 
     646               com.google.protobuf.ByteString.copyFromUtf8(
     647                   (java.lang.String) ref);
     648           column_ = b;
     649           return b;
     650         } else {
     651           return (com.google.protobuf.ByteString) ref;
     652         }
     653       }
     654       /**
     655        * <code>required string column = 2;</code>
     656        */
     657       public Builder setColumn(
     658           java.lang.String value) {
     659         if (value == null) {
     660     throw new NullPointerException();
     661   }
     662   bitField0_ |= 0x00000002;
     663         column_ = value;
     664         onChanged();
     665         return this;
     666       }
     667       /**
     668        * <code>required string column = 2;</code>
     669        */
     670       public Builder clearColumn() {
     671         bitField0_ = (bitField0_ & ~0x00000002);
     672         column_ = getDefaultInstance().getColumn();
     673         onChanged();
     674         return this;
     675       }
     676       /**
     677        * <code>required string column = 2;</code>
     678        */
     679       public Builder setColumnBytes(
     680           com.google.protobuf.ByteString value) {
     681         if (value == null) {
     682     throw new NullPointerException();
     683   }
     684   bitField0_ |= 0x00000002;
     685         column_ = value;
     686         onChanged();
     687         return this;
     688       }
     689 
     690       // @@protoc_insertion_point(builder_scope:SumRequest)
     691     }
     692 
     693     static {
     694       defaultInstance = new SumRequest(true);
     695       defaultInstance.initFields();
     696     }
     697 
     698     // @@protoc_insertion_point(class_scope:SumRequest)
     699   }
     700 
     701   public interface SumResponseOrBuilder
     702       extends com.google.protobuf.MessageOrBuilder {
     703 
     704     // required int64 sum = 1 [default = 0];
     705     /**
     706      * <code>required int64 sum = 1 [default = 0];</code>
     707      */
     708     boolean hasSum();
     709     /**
     710      * <code>required int64 sum = 1 [default = 0];</code>
     711      */
     712     long getSum();
     713   }
     714   /**
     715    * Protobuf type {@code SumResponse}
     716    */
     717   public static final class SumResponse extends
     718       com.google.protobuf.GeneratedMessage
     719       implements SumResponseOrBuilder {
     720     // Use SumResponse.newBuilder() to construct.
     721     private SumResponse(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
     722       super(builder);
     723       this.unknownFields = builder.getUnknownFields();
     724     }
     725     private SumResponse(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
     726 
     727     private static final SumResponse defaultInstance;
     728     public static SumResponse getDefaultInstance() {
     729       return defaultInstance;
     730     }
     731 
     732     public SumResponse getDefaultInstanceForType() {
     733       return defaultInstance;
     734     }
     735 
     736     private final com.google.protobuf.UnknownFieldSet unknownFields;
     737     @java.lang.Override
     738     public final com.google.protobuf.UnknownFieldSet
     739         getUnknownFields() {
     740       return this.unknownFields;
     741     }
     742     private SumResponse(
     743         com.google.protobuf.CodedInputStream input,
     744         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
     745         throws com.google.protobuf.InvalidProtocolBufferException {
     746       initFields();
     747       int mutable_bitField0_ = 0;
     748       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
     749           com.google.protobuf.UnknownFieldSet.newBuilder();
     750       try {
     751         boolean done = false;
     752         while (!done) {
     753           int tag = input.readTag();
     754           switch (tag) {
     755             case 0:
     756               done = true;
     757               break;
     758             default: {
     759               if (!parseUnknownField(input, unknownFields,
     760                                      extensionRegistry, tag)) {
     761                 done = true;
     762               }
     763               break;
     764             }
     765             case 8: {
     766               bitField0_ |= 0x00000001;
     767               sum_ = input.readInt64();
     768               break;
     769             }
     770           }
     771         }
     772       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
     773         throw e.setUnfinishedMessage(this);
     774       } catch (java.io.IOException e) {
     775         throw new com.google.protobuf.InvalidProtocolBufferException(
     776             e.getMessage()).setUnfinishedMessage(this);
     777       } finally {
     778         this.unknownFields = unknownFields.build();
     779         makeExtensionsImmutable();
     780       }
     781     }
     782     public static final com.google.protobuf.Descriptors.Descriptor
     783         getDescriptor() {
     784       return com.endpoint.test.Sum.internal_static_SumResponse_descriptor;
     785     }
     786 
     787     protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
     788         internalGetFieldAccessorTable() {
     789       return com.endpoint.test.Sum.internal_static_SumResponse_fieldAccessorTable
     790           .ensureFieldAccessorsInitialized(
     791               com.endpoint.test.Sum.SumResponse.class, com.endpoint.test.Sum.SumResponse.Builder.class);
     792     }
     793 
     794     public static com.google.protobuf.Parser<SumResponse> PARSER =
     795         new com.google.protobuf.AbstractParser<SumResponse>() {
     796       public SumResponse parsePartialFrom(
     797           com.google.protobuf.CodedInputStream input,
     798           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
     799           throws com.google.protobuf.InvalidProtocolBufferException {
     800         return new SumResponse(input, extensionRegistry);
     801       }
     802     };
     803 
     804     @java.lang.Override
     805     public com.google.protobuf.Parser<SumResponse> getParserForType() {
     806       return PARSER;
     807     }
     808 
     809     private int bitField0_;
     810     // required int64 sum = 1 [default = 0];
     811     public static final int SUM_FIELD_NUMBER = 1;
     812     private long sum_;
     813     /**
     814      * <code>required int64 sum = 1 [default = 0];</code>
     815      */
     816     public boolean hasSum() {
     817       return ((bitField0_ & 0x00000001) == 0x00000001);
     818     }
     819     /**
     820      * <code>required int64 sum = 1 [default = 0];</code>
     821      */
     822     public long getSum() {
     823       return sum_;
     824     }
     825 
     826     private void initFields() {
     827       sum_ = 0L;
     828     }
     829     private byte memoizedIsInitialized = -1;
     830     public final boolean isInitialized() {
     831       byte isInitialized = memoizedIsInitialized;
     832       if (isInitialized != -1) return isInitialized == 1;
     833 
     834       if (!hasSum()) {
     835         memoizedIsInitialized = 0;
     836         return false;
     837       }
     838       memoizedIsInitialized = 1;
     839       return true;
     840     }
     841 
     842     public void writeTo(com.google.protobuf.CodedOutputStream output)
     843                         throws java.io.IOException {
     844       getSerializedSize();
     845       if (((bitField0_ & 0x00000001) == 0x00000001)) {
     846         output.writeInt64(1, sum_);
     847       }
     848       getUnknownFields().writeTo(output);
     849     }
     850 
     851     private int memoizedSerializedSize = -1;
     852     public int getSerializedSize() {
     853       int size = memoizedSerializedSize;
     854       if (size != -1) return size;
     855 
     856       size = 0;
     857       if (((bitField0_ & 0x00000001) == 0x00000001)) {
     858         size += com.google.protobuf.CodedOutputStream
     859           .computeInt64Size(1, sum_);
     860       }
     861       size += getUnknownFields().getSerializedSize();
     862       memoizedSerializedSize = size;
     863       return size;
     864     }
     865 
     866     private static final long serialVersionUID = 0L;
     867     @java.lang.Override
     868     protected java.lang.Object writeReplace()
     869         throws java.io.ObjectStreamException {
     870       return super.writeReplace();
     871     }
     872 
     873     @java.lang.Override
     874     public boolean equals(final java.lang.Object obj) {
     875       if (obj == this) {
     876        return true;
     877       }
     878       if (!(obj instanceof com.endpoint.test.Sum.SumResponse)) {
     879         return super.equals(obj);
     880       }
     881       com.endpoint.test.Sum.SumResponse other = (com.endpoint.test.Sum.SumResponse) obj;
     882 
     883       boolean result = true;
     884       result = result && (hasSum() == other.hasSum());
     885       if (hasSum()) {
     886         result = result && (getSum()
     887             == other.getSum());
     888       }
     889       result = result &&
     890           getUnknownFields().equals(other.getUnknownFields());
     891       return result;
     892     }
     893 
     894     private int memoizedHashCode = 0;
     895     @java.lang.Override
     896     public int hashCode() {
     897       if (memoizedHashCode != 0) {
     898         return memoizedHashCode;
     899       }
     900       int hash = 41;
     901       hash = (19 * hash) + getDescriptorForType().hashCode();
     902       if (hasSum()) {
     903         hash = (37 * hash) + SUM_FIELD_NUMBER;
     904         hash = (53 * hash) + hashLong(getSum());
     905       }
     906       hash = (29 * hash) + getUnknownFields().hashCode();
     907       memoizedHashCode = hash;
     908       return hash;
     909     }
     910 
     911     public static com.endpoint.test.Sum.SumResponse parseFrom(
     912         com.google.protobuf.ByteString data)
     913         throws com.google.protobuf.InvalidProtocolBufferException {
     914       return PARSER.parseFrom(data);
     915     }
     916     public static com.endpoint.test.Sum.SumResponse parseFrom(
     917         com.google.protobuf.ByteString data,
     918         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
     919         throws com.google.protobuf.InvalidProtocolBufferException {
     920       return PARSER.parseFrom(data, extensionRegistry);
     921     }
     922     public static com.endpoint.test.Sum.SumResponse parseFrom(byte[] data)
     923         throws com.google.protobuf.InvalidProtocolBufferException {
     924       return PARSER.parseFrom(data);
     925     }
     926     public static com.endpoint.test.Sum.SumResponse parseFrom(
     927         byte[] data,
     928         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
     929         throws com.google.protobuf.InvalidProtocolBufferException {
     930       return PARSER.parseFrom(data, extensionRegistry);
     931     }
     932     public static com.endpoint.test.Sum.SumResponse parseFrom(java.io.InputStream input)
     933         throws java.io.IOException {
     934       return PARSER.parseFrom(input);
     935     }
     936     public static com.endpoint.test.Sum.SumResponse parseFrom(
     937         java.io.InputStream input,
     938         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
     939         throws java.io.IOException {
     940       return PARSER.parseFrom(input, extensionRegistry);
     941     }
     942     public static com.endpoint.test.Sum.SumResponse parseDelimitedFrom(java.io.InputStream input)
     943         throws java.io.IOException {
     944       return PARSER.parseDelimitedFrom(input);
     945     }
     946     public static com.endpoint.test.Sum.SumResponse parseDelimitedFrom(
     947         java.io.InputStream input,
     948         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
     949         throws java.io.IOException {
     950       return PARSER.parseDelimitedFrom(input, extensionRegistry);
     951     }
     952     public static com.endpoint.test.Sum.SumResponse parseFrom(
     953         com.google.protobuf.CodedInputStream input)
     954         throws java.io.IOException {
     955       return PARSER.parseFrom(input);
     956     }
     957     public static com.endpoint.test.Sum.SumResponse parseFrom(
     958         com.google.protobuf.CodedInputStream input,
     959         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
     960         throws java.io.IOException {
     961       return PARSER.parseFrom(input, extensionRegistry);
     962     }
     963 
     964     public static Builder newBuilder() { return Builder.create(); }
     965     public Builder newBuilderForType() { return newBuilder(); }
     966     public static Builder newBuilder(com.endpoint.test.Sum.SumResponse prototype) {
     967       return newBuilder().mergeFrom(prototype);
     968     }
     969     public Builder toBuilder() { return newBuilder(this); }
     970 
     971     @java.lang.Override
     972     protected Builder newBuilderForType(
     973         com.google.protobuf.GeneratedMessage.BuilderParent parent) {
     974       Builder builder = new Builder(parent);
     975       return builder;
     976     }
     977     /**
     978      * Protobuf type {@code SumResponse}
     979      */
     980     public static final class Builder extends
     981         com.google.protobuf.GeneratedMessage.Builder<Builder>
     982        implements com.endpoint.test.Sum.SumResponseOrBuilder {
     983       public static final com.google.protobuf.Descriptors.Descriptor
     984           getDescriptor() {
     985         return com.endpoint.test.Sum.internal_static_SumResponse_descriptor;
     986       }
     987 
     988       protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
     989           internalGetFieldAccessorTable() {
     990         return com.endpoint.test.Sum.internal_static_SumResponse_fieldAccessorTable
     991             .ensureFieldAccessorsInitialized(
     992                 com.endpoint.test.Sum.SumResponse.class, com.endpoint.test.Sum.SumResponse.Builder.class);
     993       }
     994 
     995       // Construct using com.endpoint.test.Sum.SumResponse.newBuilder()
     996       private Builder() {
     997         maybeForceBuilderInitialization();
     998       }
     999 
    1000       private Builder(
    1001           com.google.protobuf.GeneratedMessage.BuilderParent parent) {
    1002         super(parent);
    1003         maybeForceBuilderInitialization();
    1004       }
    1005       private void maybeForceBuilderInitialization() {
    1006         if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
    1007         }
    1008       }
    1009       private static Builder create() {
    1010         return new Builder();
    1011       }
    1012 
    1013       public Builder clear() {
    1014         super.clear();
    1015         sum_ = 0L;
    1016         bitField0_ = (bitField0_ & ~0x00000001);
    1017         return this;
    1018       }
    1019 
    1020       public Builder clone() {
    1021         return create().mergeFrom(buildPartial());
    1022       }
    1023 
    1024       public com.google.protobuf.Descriptors.Descriptor
    1025           getDescriptorForType() {
    1026         return com.endpoint.test.Sum.internal_static_SumResponse_descriptor;
    1027       }
    1028 
    1029       public com.endpoint.test.Sum.SumResponse getDefaultInstanceForType() {
    1030         return com.endpoint.test.Sum.SumResponse.getDefaultInstance();
    1031       }
    1032 
    1033       public com.endpoint.test.Sum.SumResponse build() {
    1034         com.endpoint.test.Sum.SumResponse result = buildPartial();
    1035         if (!result.isInitialized()) {
    1036           throw newUninitializedMessageException(result);
    1037         }
    1038         return result;
    1039       }
    1040 
    1041       public com.endpoint.test.Sum.SumResponse buildPartial() {
    1042         com.endpoint.test.Sum.SumResponse result = new com.endpoint.test.Sum.SumResponse(this);
    1043         int from_bitField0_ = bitField0_;
    1044         int to_bitField0_ = 0;
    1045         if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
    1046           to_bitField0_ |= 0x00000001;
    1047         }
    1048         result.sum_ = sum_;
    1049         result.bitField0_ = to_bitField0_;
    1050         onBuilt();
    1051         return result;
    1052       }
    1053 
    1054       public Builder mergeFrom(com.google.protobuf.Message other) {
    1055         if (other instanceof com.endpoint.test.Sum.SumResponse) {
    1056           return mergeFrom((com.endpoint.test.Sum.SumResponse)other);
    1057         } else {
    1058           super.mergeFrom(other);
    1059           return this;
    1060         }
    1061       }
    1062 
    1063       public Builder mergeFrom(com.endpoint.test.Sum.SumResponse other) {
    1064         if (other == com.endpoint.test.Sum.SumResponse.getDefaultInstance()) return this;
    1065         if (other.hasSum()) {
    1066           setSum(other.getSum());
    1067         }
    1068         this.mergeUnknownFields(other.getUnknownFields());
    1069         return this;
    1070       }
    1071 
    1072       public final boolean isInitialized() {
    1073         if (!hasSum()) {
    1074           
    1075           return false;
    1076         }
    1077         return true;
    1078       }
    1079 
    1080       public Builder mergeFrom(
    1081           com.google.protobuf.CodedInputStream input,
    1082           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
    1083           throws java.io.IOException {
    1084         com.endpoint.test.Sum.SumResponse parsedMessage = null;
    1085         try {
    1086           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
    1087         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
    1088           parsedMessage = (com.endpoint.test.Sum.SumResponse) e.getUnfinishedMessage();
    1089           throw e;
    1090         } finally {
    1091           if (parsedMessage != null) {
    1092             mergeFrom(parsedMessage);
    1093           }
    1094         }
    1095         return this;
    1096       }
    1097       private int bitField0_;
    1098 
    1099       // required int64 sum = 1 [default = 0];
    1100       private long sum_ ;
    1101       /**
    1102        * <code>required int64 sum = 1 [default = 0];</code>
    1103        */
    1104       public boolean hasSum() {
    1105         return ((bitField0_ & 0x00000001) == 0x00000001);
    1106       }
    1107       /**
    1108        * <code>required int64 sum = 1 [default = 0];</code>
    1109        */
    1110       public long getSum() {
    1111         return sum_;
    1112       }
    1113       /**
    1114        * <code>required int64 sum = 1 [default = 0];</code>
    1115        */
    1116       public Builder setSum(long value) {
    1117         bitField0_ |= 0x00000001;
    1118         sum_ = value;
    1119         onChanged();
    1120         return this;
    1121       }
    1122       /**
    1123        * <code>required int64 sum = 1 [default = 0];</code>
    1124        */
    1125       public Builder clearSum() {
    1126         bitField0_ = (bitField0_ & ~0x00000001);
    1127         sum_ = 0L;
    1128         onChanged();
    1129         return this;
    1130       }
    1131 
    1132       // @@protoc_insertion_point(builder_scope:SumResponse)
    1133     }
    1134 
    1135     static {
    1136       defaultInstance = new SumResponse(true);
    1137       defaultInstance.initFields();
    1138     }
    1139 
    1140     // @@protoc_insertion_point(class_scope:SumResponse)
    1141   }
    1142 
    1143   /**
    1144    * Protobuf service {@code SumService}
    1145    */
    1146   public static abstract class SumService
    1147       implements com.google.protobuf.Service {
    1148     protected SumService() {}
    1149 
    1150     public interface Interface {
    1151       /**
    1152        * <code>rpc getSum(.SumRequest) returns (.SumResponse);</code>
    1153        */
    1154       public abstract void getSum(
    1155           com.google.protobuf.RpcController controller,
    1156           com.endpoint.test.Sum.SumRequest request,
    1157           com.google.protobuf.RpcCallback<com.endpoint.test.Sum.SumResponse> done);
    1158 
    1159     }
    1160 
    1161     public static com.google.protobuf.Service newReflectiveService(
    1162         final Interface impl) {
    1163       return new SumService() {
    1164         @java.lang.Override
    1165         public  void getSum(
    1166             com.google.protobuf.RpcController controller,
    1167             com.endpoint.test.Sum.SumRequest request,
    1168             com.google.protobuf.RpcCallback<com.endpoint.test.Sum.SumResponse> done) {
    1169           impl.getSum(controller, request, done);
    1170         }
    1171 
    1172       };
    1173     }
    1174 
    1175     public static com.google.protobuf.BlockingService
    1176         newReflectiveBlockingService(final BlockingInterface impl) {
    1177       return new com.google.protobuf.BlockingService() {
    1178         public final com.google.protobuf.Descriptors.ServiceDescriptor
    1179             getDescriptorForType() {
    1180           return getDescriptor();
    1181         }
    1182 
    1183         public final com.google.protobuf.Message callBlockingMethod(
    1184             com.google.protobuf.Descriptors.MethodDescriptor method,
    1185             com.google.protobuf.RpcController controller,
    1186             com.google.protobuf.Message request)
    1187             throws com.google.protobuf.ServiceException {
    1188           if (method.getService() != getDescriptor()) {
    1189             throw new java.lang.IllegalArgumentException(
    1190               "Service.callBlockingMethod() given method descriptor for " +
    1191               "wrong service type.");
    1192           }
    1193           switch(method.getIndex()) {
    1194             case 0:
    1195               return impl.getSum(controller, (com.endpoint.test.Sum.SumRequest)request);
    1196             default:
    1197               throw new java.lang.AssertionError("Can't get here.");
    1198           }
    1199         }
    1200 
    1201         public final com.google.protobuf.Message
    1202             getRequestPrototype(
    1203             com.google.protobuf.Descriptors.MethodDescriptor method) {
    1204           if (method.getService() != getDescriptor()) {
    1205             throw new java.lang.IllegalArgumentException(
    1206               "Service.getRequestPrototype() given method " +
    1207               "descriptor for wrong service type.");
    1208           }
    1209           switch(method.getIndex()) {
    1210             case 0:
    1211               return com.endpoint.test.Sum.SumRequest.getDefaultInstance();
    1212             default:
    1213               throw new java.lang.AssertionError("Can't get here.");
    1214           }
    1215         }
    1216 
    1217         public final com.google.protobuf.Message
    1218             getResponsePrototype(
    1219             com.google.protobuf.Descriptors.MethodDescriptor method) {
    1220           if (method.getService() != getDescriptor()) {
    1221             throw new java.lang.IllegalArgumentException(
    1222               "Service.getResponsePrototype() given method " +
    1223               "descriptor for wrong service type.");
    1224           }
    1225           switch(method.getIndex()) {
    1226             case 0:
    1227               return com.endpoint.test.Sum.SumResponse.getDefaultInstance();
    1228             default:
    1229               throw new java.lang.AssertionError("Can't get here.");
    1230           }
    1231         }
    1232 
    1233       };
    1234     }
    1235 
    1236     /**
    1237      * <code>rpc getSum(.SumRequest) returns (.SumResponse);</code>
    1238      */
    1239     public abstract void getSum(
    1240         com.google.protobuf.RpcController controller,
    1241         com.endpoint.test.Sum.SumRequest request,
    1242         com.google.protobuf.RpcCallback<com.endpoint.test.Sum.SumResponse> done);
    1243 
    1244     public static final
    1245         com.google.protobuf.Descriptors.ServiceDescriptor
    1246         getDescriptor() {
    1247       return com.endpoint.test.Sum.getDescriptor().getServices().get(0);
    1248     }
    1249     public final com.google.protobuf.Descriptors.ServiceDescriptor
    1250         getDescriptorForType() {
    1251       return getDescriptor();
    1252     }
    1253 
    1254     public final void callMethod(
    1255         com.google.protobuf.Descriptors.MethodDescriptor method,
    1256         com.google.protobuf.RpcController controller,
    1257         com.google.protobuf.Message request,
    1258         com.google.protobuf.RpcCallback<
    1259           com.google.protobuf.Message> done) {
    1260       if (method.getService() != getDescriptor()) {
    1261         throw new java.lang.IllegalArgumentException(
    1262           "Service.callMethod() given method descriptor for wrong " +
    1263           "service type.");
    1264       }
    1265       switch(method.getIndex()) {
    1266         case 0:
    1267           this.getSum(controller, (com.endpoint.test.Sum.SumRequest)request,
    1268             com.google.protobuf.RpcUtil.<com.endpoint.test.Sum.SumResponse>specializeCallback(
    1269               done));
    1270           return;
    1271         default:
    1272           throw new java.lang.AssertionError("Can't get here.");
    1273       }
    1274     }
    1275 
    1276     public final com.google.protobuf.Message
    1277         getRequestPrototype(
    1278         com.google.protobuf.Descriptors.MethodDescriptor method) {
    1279       if (method.getService() != getDescriptor()) {
    1280         throw new java.lang.IllegalArgumentException(
    1281           "Service.getRequestPrototype() given method " +
    1282           "descriptor for wrong service type.");
    1283       }
    1284       switch(method.getIndex()) {
    1285         case 0:
    1286           return com.endpoint.test.Sum.SumRequest.getDefaultInstance();
    1287         default:
    1288           throw new java.lang.AssertionError("Can't get here.");
    1289       }
    1290     }
    1291 
    1292     public final com.google.protobuf.Message
    1293         getResponsePrototype(
    1294         com.google.protobuf.Descriptors.MethodDescriptor method) {
    1295       if (method.getService() != getDescriptor()) {
    1296         throw new java.lang.IllegalArgumentException(
    1297           "Service.getResponsePrototype() given method " +
    1298           "descriptor for wrong service type.");
    1299       }
    1300       switch(method.getIndex()) {
    1301         case 0:
    1302           return com.endpoint.test.Sum.SumResponse.getDefaultInstance();
    1303         default:
    1304           throw new java.lang.AssertionError("Can't get here.");
    1305       }
    1306     }
    1307 
    1308     public static Stub newStub(
    1309         com.google.protobuf.RpcChannel channel) {
    1310       return new Stub(channel);
    1311     }
    1312 
    1313     public static final class Stub extends com.endpoint.test.Sum.SumService implements Interface {
    1314       private Stub(com.google.protobuf.RpcChannel channel) {
    1315         this.channel = channel;
    1316       }
    1317 
    1318       private final com.google.protobuf.RpcChannel channel;
    1319 
    1320       public com.google.protobuf.RpcChannel getChannel() {
    1321         return channel;
    1322       }
    1323 
    1324       public  void getSum(
    1325           com.google.protobuf.RpcController controller,
    1326           com.endpoint.test.Sum.SumRequest request,
    1327           com.google.protobuf.RpcCallback<com.endpoint.test.Sum.SumResponse> done) {
    1328         channel.callMethod(
    1329           getDescriptor().getMethods().get(0),
    1330           controller,
    1331           request,
    1332           com.endpoint.test.Sum.SumResponse.getDefaultInstance(),
    1333           com.google.protobuf.RpcUtil.generalizeCallback(
    1334             done,
    1335             com.endpoint.test.Sum.SumResponse.class,
    1336             com.endpoint.test.Sum.SumResponse.getDefaultInstance()));
    1337       }
    1338     }
    1339 
    1340     public static BlockingInterface newBlockingStub(
    1341         com.google.protobuf.BlockingRpcChannel channel) {
    1342       return new BlockingStub(channel);
    1343     }
    1344 
    1345     public interface BlockingInterface {
    1346       public com.endpoint.test.Sum.SumResponse getSum(
    1347           com.google.protobuf.RpcController controller,
    1348           com.endpoint.test.Sum.SumRequest request)
    1349           throws com.google.protobuf.ServiceException;
    1350     }
    1351 
    1352     private static final class BlockingStub implements BlockingInterface {
    1353       private BlockingStub(com.google.protobuf.BlockingRpcChannel channel) {
    1354         this.channel = channel;
    1355       }
    1356 
    1357       private final com.google.protobuf.BlockingRpcChannel channel;
    1358 
    1359       public com.endpoint.test.Sum.SumResponse getSum(
    1360           com.google.protobuf.RpcController controller,
    1361           com.endpoint.test.Sum.SumRequest request)
    1362           throws com.google.protobuf.ServiceException {
    1363         return (com.endpoint.test.Sum.SumResponse) channel.callBlockingMethod(
    1364           getDescriptor().getMethods().get(0),
    1365           controller,
    1366           request,
    1367           com.endpoint.test.Sum.SumResponse.getDefaultInstance());
    1368       }
    1369 
    1370     }
    1371 
    1372     // @@protoc_insertion_point(class_scope:SumService)
    1373   }
    1374 
    1375   private static com.google.protobuf.Descriptors.Descriptor
    1376     internal_static_SumRequest_descriptor;
    1377   private static
    1378     com.google.protobuf.GeneratedMessage.FieldAccessorTable
    1379       internal_static_SumRequest_fieldAccessorTable;
    1380   private static com.google.protobuf.Descriptors.Descriptor
    1381     internal_static_SumResponse_descriptor;
    1382   private static
    1383     com.google.protobuf.GeneratedMessage.FieldAccessorTable
    1384       internal_static_SumResponse_fieldAccessorTable;
    1385 
    1386   public static com.google.protobuf.Descriptors.FileDescriptor
    1387       getDescriptor() {
    1388     return descriptor;
    1389   }
    1390   private static com.google.protobuf.Descriptors.FileDescriptor
    1391       descriptor;
    1392   static {
    1393     java.lang.String[] descriptorData = {
    1394       "
    
    sumcode.proto",
    
    SumRequest2216
    06family30" +
    1395       "01 02(	2216
    06column3002 02(	"35
    13SumResponse2216
    03" +
    1396       "sum3001 02(03:01021
    
    SumService22#
    06getSum2213.S" +
    1397       "umRequest3214.SumResponseB 
    21com.endpoint." +
    1398       "testB03SumH0121001012400101"
    1399     };
    1400     com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
    1401       new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
    1402         public com.google.protobuf.ExtensionRegistry assignDescriptors(
    1403             com.google.protobuf.Descriptors.FileDescriptor root) {
    1404           descriptor = root;
    1405           internal_static_SumRequest_descriptor =
    1406             getDescriptor().getMessageTypes().get(0);
    1407           internal_static_SumRequest_fieldAccessorTable = new
    1408             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
    1409               internal_static_SumRequest_descriptor,
    1410               new java.lang.String[] { "Family", "Column", });
    1411           internal_static_SumResponse_descriptor =
    1412             getDescriptor().getMessageTypes().get(1);
    1413           internal_static_SumResponse_fieldAccessorTable = new
    1414             com.google.protobuf.GeneratedMessage.FieldAccessorTable(
    1415               internal_static_SumResponse_descriptor,
    1416               new java.lang.String[] { "Sum", });
    1417           return null;
    1418         }
    1419       };
    1420     com.google.protobuf.Descriptors.FileDescriptor
    1421       .internalBuildGeneratedFileFrom(descriptorData,
    1422         new com.google.protobuf.Descriptors.FileDescriptor[] {
    1423         }, assigner);
    1424   }
    1425 
    1426   // @@protoc_insertion_point(outer_class_scope)
    1427 }
    View Code

     2> 编写服务器端的代码

     1 package com.endpoint.test;
     2 
     3 import java.io.IOException;
     4 import java.util.ArrayList;
     5 import java.util.List;
     6 import org.apache.hadoop.hbase.Cell;
     7 import org.apache.hadoop.hbase.CellUtil;
     8 import org.apache.hadoop.hbase.Coprocessor;
     9 import org.apache.hadoop.hbase.CoprocessorEnvironment;
    10 import org.apache.hadoop.hbase.client.Scan;
    11 import org.apache.hadoop.hbase.coprocessor.CoprocessorException;
    12 import org.apache.hadoop.hbase.coprocessor.CoprocessorService;
    13 import org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment;
    14 import org.apache.hadoop.hbase.protobuf.ResponseConverter;
    15 import org.apache.hadoop.hbase.regionserver.InternalScanner;
    16 import org.apache.hadoop.hbase.util.Bytes;
    17 import com.endpoint.test.Sum.SumRequest;
    18 import com.endpoint.test.Sum.SumResponse;
    19 import com.endpoint.test.Sum.SumService;
    20 import com.google.protobuf.RpcCallback;
    21 import com.google.protobuf.RpcController;
    22 import com.google.protobuf.Service;
    23 
    24 public class SumEndPoint extends SumService implements Coprocessor,CoprocessorService{
    25 
    26     private RegionCoprocessorEnvironment env;   // 定义环境  
    27     @Override
    28     public Service getService() {
    29         
    30         return this;
    31     }
    32 
    33     @Override
    34     public void start(CoprocessorEnvironment env) throws IOException {
    35          if (env instanceof RegionCoprocessorEnvironment) {  
    36                 this.env = (RegionCoprocessorEnvironment)env;  
    37             } else {  
    38                 throw new CoprocessorException("no load region");  
    39             }  
    40         
    41     }
    42 
    43     @Override
    44     public void stop(CoprocessorEnvironment env) throws IOException {
    45                 
    46     }
    47 
    48     @Override
    49     public void getSum(RpcController controller, SumRequest request, RpcCallback<SumResponse> done) {
    50         
    51         // 设置扫描对象  
    52         Scan scan = new Scan();  
    53         scan.addFamily(Bytes.toBytes(request.getFamily()));  
    54         scan.addColumn(Bytes.toBytes(request.getFamily()), Bytes.toBytes(request.getColumn()));  
    55         
    56         // 定义变量  
    57         SumResponse response = null;  
    58         InternalScanner scanner = null;  
    59         
    60         // 扫描每个region,取值后求和  
    61         try {  
    62             scanner = env.getRegion().getScanner(scan);  
    63             List<Cell> results = new ArrayList<Cell>();  
    64             boolean hasMore = false;  
    65             Long sum = 0L;  
    66             do {  
    67                 hasMore = scanner.next(results);  
    68                 for (Cell cell : results) {  
    69                     sum += Long.parseLong(new String(CellUtil.cloneValue(cell)));  
    70                 }  
    71                 results.clear();  
    72             } while (hasMore);  
    73             // 设置返回结果  
    74             response = SumResponse.newBuilder().setSum(sum).build();  
    75         } catch (IOException e) {  
    76             ResponseConverter.setControllerException(controller, e);  
    77         } finally {  
    78             if (scanner != null) {  
    79                 try {  
    80                     scanner.close();  
    81                 } catch (IOException e) {  
    82                     //e.printStackTrace();  
    83                 }  
    84             }  
    85         }  
    86         // 将rpc结果返回给客户端  
    87         done.run(response);  
    88         
    89     }
    90 
    91 }

     3> 客户端测试代码

     1 package com.endpoint.test;
     2 
     3 import java.io.IOException;
     4 import java.util.Map;
     5 import org.apache.hadoop.conf.Configuration;
     6 import org.apache.hadoop.hbase.HBaseConfiguration;
     7 import org.apache.hadoop.hbase.TableName;
     8 import org.apache.hadoop.hbase.client.Connection;
     9 import org.apache.hadoop.hbase.client.ConnectionFactory;
    10 import org.apache.hadoop.hbase.client.HTable;
    11 import org.apache.hadoop.hbase.client.coprocessor.Batch;
    12 import org.apache.hadoop.hbase.ipc.BlockingRpcCallback;
    13 import com.endpoint.test.Sum.SumRequest;
    14 import com.endpoint.test.Sum.SumResponse;
    15 import com.endpoint.test.Sum.SumService;
    16 import com.google.protobuf.ServiceException;
    17 
    18 public class TestClient {
    19 
    20     public static void main(String[] args) throws Exception {
    21           
    22             // 配置HBse  
    23             Configuration conf = HBaseConfiguration.create();  
    24             conf.set("hbase.zookeeper.quorum", "master,data1,data2");  
    25             conf.set("hbase.zookeeper.property.clientPort", "2181");  
    26             conf.setLong("hbase.rpc.timeout", 600000);
    27             System.setProperty("hadoop.home.dir", "C:/hadoopfiles/hadoop-common-2.2.0-bin-master");
    28 
    29             // 建立一个数据库的连接  
    30             Connection conn = ConnectionFactory.createConnection(conf);  
    31             // 获取表  
    32             HTable table = (HTable) conn.getTable(TableName.valueOf("etable"));  
    33             
    34             long sum = 0L;                
    35             
    36             // 设置请求对象  
    37             final SumRequest request = SumRequest.newBuilder().setFamily("cf").setColumn("value").build();  
    38             
    39             try {
    40                 // 获得返回值  
    41                 Map<byte[], Long> result = table.coprocessorService(SumService.class, null, null,   
    42                         new Batch.Call<SumService, Long>() {  
    43           
    44                             @Override  
    45                             public Long call(SumService service) throws IOException {  
    46                                 BlockingRpcCallback<SumResponse> rpcCallback = new BlockingRpcCallback<SumResponse>();  
    47                                 service.getSum(null, request, rpcCallback);  
    48                                 SumResponse response = (SumResponse) rpcCallback.get();  
    49                                 return response.hasSum() ? response.getSum() : 0L;
    50                             }  
    51                 });  
    52                 // 将返回值进行迭代相加  
    53                 for (Long v : result.values()) {  
    54                     sum += v;  
    55                 }  
    56                 // 结果输出  
    57                 System.out.println("sum: " + sum);                        
    58                 
    59             } catch (ServiceException e) {
    60                 e.printStackTrace(); 
    61             }catch (Throwable e) {
    62                 e.printStackTrace(); 
    63             }
    64             table.close();  
    65             conn.close();  
    66 
    67     }
    68 
    69 }

    System.setProperty("hadoop.home.dir", "C:/hadoopfiles/hadoop-common-2.2.0-bin-master"); 这句代码是防错误用的,不具有实际意义,在hadoop-common-2.2.0-bin-master下建立bin目录放一个winutils.exe文件即可,否则会出现提示“Could not locate executable nullinwinutils.exe in the Hadoop binaries”

    此外,需要在windows下设置一下hosts文件,因为conf.set("hbase.zookeeper.quorum", "master,data1,data2");

    4> 使用Endpoint协处理器

    将上面的Sum类文件与用于服务端的SumEndPoint 类文件打包上传到服务器

    chown hadoop:hadoop datacode.jar 
    chmod g+w  datacode.jar 

    先改一下权限,之后

    hadoop fs -copyFromLocal sumtest.jar /input/

     下面是要使用协处理器的hbase表

     要将协处理器加载到这个表上

    disable 'etable'
    # 包名.类名|权重 com.endpoint.test.SumEndPoint|100
    alter'etable',METHOD =>'table_att','coprocessor' =>'/input/sumcode.jar|com.endpoint.test.SumEndPoint|100' enable 'etable'
    包名.类名|权重 com.endpoint.test.SumEndPoint|100
    # 这样也是可以的,但是在集群变换主节点的情况下,不是很好
    # alter'etable',METHOD =>'table_att','coprocessor' =>'hdfs://192.168.1.215:9000/input/sumcode.jar|com.endpoint.test.SumEndPoint|100'

    此外,值得注意的一点,在集群中,最好在hbase-site.xml中设置以下属性

    <property>  
            <name>hbase.coprocessor.abortonerror</name>  
            <value>false</value>  
    </property> 

    设置为false目的在于提高容错性,如果这个属性没有设置为false,则在上传的jar包存在错误的情况下,会导致表不能enable或disable,从而导致集群中的这张表无法使用,甚至会影响到其他表。

     

     在windows中的客户端运行客户端的代码,结果如下:

     2、Observer实例
    这个是一个二级索引实例,即假定在initialtable表中的数据格式是这样的

    row1    E   151
    row2    Y   158

    在向initialtable表中写入数据时,自动将以下数据写入indextable表作为二级索引,indextable第二列成为indextable的键

    Y    158

     1> 编写服务端代码

     1 package com.observer.test;
     2 
     3 import java.io.IOException;
     4 import java.util.List;
     5 import org.apache.hadoop.hbase.Cell;
     6 import org.apache.hadoop.hbase.CellUtil;
     7 import org.apache.hadoop.hbase.TableName;
     8 import org.apache.hadoop.hbase.client.Durability;
     9 import org.apache.hadoop.hbase.client.HTableInterface;
    10 import org.apache.hadoop.hbase.client.Put;
    11 import org.apache.hadoop.hbase.coprocessor.BaseRegionObserver;
    12 import org.apache.hadoop.hbase.coprocessor.ObserverContext;
    13 import org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment;
    14 import org.apache.hadoop.hbase.regionserver.wal.WALEdit;
    15 import org.apache.hadoop.hbase.util.Bytes;
    16 
    17 public class TestObserver extends BaseRegionObserver {
    18     @Override
    19     public void postPut(ObserverContext<RegionCoprocessorEnvironment> e, Put put, WALEdit edit, Durability durability)
    20             throws IOException {
    21         // indextable作为二级索引表  
    22         HTableInterface table = e.getEnvironment().getTable(TableName.valueOf("indextable"));  
    23         // 获取值  
    24         List<Cell> cellList1 = put.get(Bytes.toBytes("cf"), Bytes.toBytes("name"));  
    25         List<Cell> cellList2 = put.get(Bytes.toBytes("cf"), Bytes.toBytes("value"));  
    26         // 写入数据
    27         for (Cell cell1 : cellList1) {  
    28             // 原表的列cf:name的值作为indextable的rowkey,添加行  
    29             Put indexPut = new Put(CellUtil.cloneValue(cell1));  
    30             for (Cell cell2 : cellList2) {  
    31                 // 原表的列cf:value的值作为indextable表中列cf:value的值 。
    32                 indexPut.add(Bytes.toBytes("cf"), Bytes.toBytes("value"), CellUtil.cloneValue(cell2));  
    33             }  
    34           
    35             table.put(indexPut);  
    36         }  
    37         
    38         table.close();  
    39     }
    40 
    41 }

     2> 编写客户段代码

     1 package com.observer.test;
     2 
     3 import java.io.IOException;
     4 
     5 import org.apache.hadoop.conf.Configuration;
     6 import org.apache.hadoop.hbase.HBaseConfiguration;
     7 import org.apache.hadoop.hbase.TableName;
     8 import org.apache.hadoop.hbase.client.Connection;
     9 import org.apache.hadoop.hbase.client.ConnectionFactory;
    10 import org.apache.hadoop.hbase.client.HTable;
    11 import org.apache.hadoop.hbase.client.Put;
    12 import org.apache.hadoop.hbase.util.Bytes;
    13 
    14 public class DataClient {
    15 
    16     public static void main(String[] args) throws IOException {
    17         //配置 
    18         Configuration conf = HBaseConfiguration.create();  
    19         conf.set("hbase.zookeeper.quorum", "master,data1,data2");  
    20         conf.set("hbase.zookeeper.property.clientPort", "2181");  
    21         //连接  
    22         Connection conn = ConnectionFactory.createConnection(conf);        
    23         HTable table = (HTable) conn.getTable(TableName.valueOf("initialtable"));  
    24         // 写入数据  
    25         Put put = new Put(Bytes.toBytes("row01"));  
    26         put.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("name"), Bytes.toBytes("E"));  
    27         put.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("value"), Bytes.toBytes("151"));  
    28         table.put(put);  
    29         // 关闭资源  
    30         table.close();  
    31         conn.close();  
    32 
    33     }
    34 
    35 }

     3> 创建需要的表

     

     4> 加载协处理器
    将服务端代码打包上传集群服务器的hdfs上

    chown hadoop:hadoop datacode.jar 
    chmod g+w  datacode.jar 
    hadoop dfs -put datacode.jar /input/

    之后,将协处理器加载到初始表中

    disable 'initialtable'
    alter'initialtable',METHOD =>'table_att','coprocessor' =>'/input/datacode.jar|com.observer.test.TestObserver|100'
    enable 'initialtable'

    5> 执行客户端代码,显示结果

     

  • 相关阅读:
    [计算机网络] HTTPDNS 协议
    [计算机网络] DNS 协议
    [计算机网络] P2P 协议
    [年中总结]一个骄傲而又自卑的人的内心独白
    [计算机网络] FTP 协议
    [计算机网络]简单聊聊套接字 Socket
    扒一扒自从买了kindle后看的书
    安全学习笔记——缓冲区溢出攻击
    思想感悟
    C#利用服务器实现客户端之间通信
  • 原文地址:https://www.cnblogs.com/learn21cn/p/6213450.html
Copyright © 2011-2022 走看看