Done. Thanks, Royston
> Do you mind putting what you wrote below on hbase-5123 ? > > Thanks > > > > On Jan 6, 2012, at 6:22 AM, Royston Sellman <[email protected]> > wrote: > >> Hi Ted, >> >> Yes, that is the use case I am thinking of. >> >> Re: 5123 I have also had some time to think about other aggregation >> functions (Please be aware that I am new to HBase, Coprocessors, and the >> Aggregation Protocol and I have little knowledge of distributed numerical >> algorithms!). It seems to me the pattern in AP is to return a SINGLE value >> from a SINGLE column (CF:CQ) of a table. In future one might wish to extend >> AP to return MULTIPLE values from MULTIPLE columns, so it is good to keep >> this in mind for the SINGLE value/SINGLE column (SVSC) case. >> >> So, common SVSC aggregation functions (AP supported first): >> min >> max >> sum >> count >> avg (arithmetic mean) >> std >> median >> mode >> quantile/ntile >> mult/product >> >> for column values of all numeric types, returning values of that type. >> >> Some thoughts on the future possibilities: >> An example of a future SINGLE value MULTIPLE column use case could be >> weighted versions of the above functions i.e. a column of weights applied to >> the column of values then the new aggregation derived. >> (note: there is a very good description of Weighted Median in the R language >> documentation: >> http://www.stat.ucl.ac.be/ISdidactique/Rhelp/library/R.basic/html/weighted.median.html) >> >> An example of future MULTIPLE value SINGLE column could be range: return all >> rows with a column value between two values. Maybe this is a bad example >> because there could be better HBase ways to do it with filters/scans at a >> higher level. Perhaps binning is a better example? i.e. return an array >> containing values derived from applying one of the SVSC functions to a >> binned column e.g: >> int bins = 100; >> aClient.sum(table, ci, scan, bins); => {12.3, 14.5...} >> Another example (common in several programming languages) is to map an >> arbitrary function over a column and return the new vector. Of course, again >> this may be a bad example in the case of long HBase columns but it seems >> like an appropriate thing to do with coprocessors. >> >> MULTIPLE value MULTIPLE column examples are common in spatial data >> processing but I see there has been a lot of spatial/GIS discussion around >> HBase which I have not read yet. So I'll keep quiet for now. >> >> I hope these thoughts strike a balance between my (special interest) use >> case of statistical/spatial functions on tables and general purpose (but >> coprocessor enabled/regionserver distributed) HBase. >> >> Best regards, >> Royston >> >> >> On 6 Jan 2012, at 03:31, Ted Yu wrote: >> >>> Royston: >>> For the median aggregate, is the following what you're looking for ? >>> Find the median among the values of all the keyvalue for cf:qualifier >>> column. >>> >>> There is a well known distributed method of computing median that involves >>> multiple roundtrips (to the region servers). >>> >>> Just want to confirm the use case. >>> >>> Thanks >>> >>> On Wed, Jan 4, 2012 at 10:57 AM, Royston Sellman < >>> [email protected]> wrote: >>> >>>> Great ideas. Thanks. >>>> >>>> w.r.t. 5123: I'll think about it for a day or two then make some comments. >>>> >>>> 5122 is very desirable. >>>> >>>> Best Regards, >>>> Royston >>>> >>>> On 4 Jan 2012, at 15:01, Ted Yu wrote: >>>> >>>>> I can see room for improvement w.r.t. ColumnInterpreters >>>>> I logged two JIRAs: >>>>> https://issues.apache.org/jira/browse/HBASE-5122 is for loading >>>>> ColumnInterpreters dynamically >>>>> >>>>> https://issues.apache.org/jira/browse/HBASE-5123 is for adding more >>>>> aggregation functions. >>>>> >>>>> Royston: >>>>> Feel free to elaborate on 5213 and explain what Mult aggregate should do. >>>>> >>>>> Cheers >>>>> >>>>> On Wed, Jan 4, 2012 at 3:43 AM, Royston Sellman < >>>>> [email protected]> wrote: >>>>> >>>>>> Ted, Himanshu and Gary, >>>>>> >>>>>> It works now! I re-created my HBase table to contain Bytes.toBytes(Long) >>>>>> values and that fixed it. >>>>>> >>>>>> For the time being we can convert everything to Longs and work with >>>> that, >>>>>> but we will probably write our own ColumnInterpreters soon for our data >>>>>> types, so thanks for the pointer to HBASE-4946. There are also >>>> Functions we >>>>>> need (e.g. Median, Weighted Median, Mult) which might best be placed in >>>> the >>>>>> Aggregations Protocol. We'll be sure to discuss this with you when we >>>> start. >>>>>> >>>>>> Meanwhile, thanks again for all your help! >>>>>> >>>>>> Royston >>>>>> >>>>>> >>>>>> On 3 Jan 2012, at 18:58, Ted Yu wrote: >>>>>> >>>>>>> I like long messages :-) because they provide more clues. >>>>>>> >>>>>>> For part 1, you don't have to call Bytes.toxxx as long as the >>>> interpreter >>>>>>> uses method consistent with the way you write values into HBase tables. >>>>>>> >>>>>>> For part 2, HBASE-4946 is related. >>>>>>> Basically you need to place the jar containing your coprocessor and >>>>>>> interpreter code on hdfs so that you can load it into your HBase table. >>>>>>> Look at this for details: >>>>>>> https://issues.apache.org/jira/browse/HBASE-4554 >>>>>>> >>>>>>> Cheers >>>>>>> >>>>>>> On Tue, Jan 3, 2012 at 10:42 AM, Royston Sellman < >>>>>>> [email protected]> wrote: >>>>>>> >>>>>>>> Hi Ted, >>>>>>>> >>>>>>>> PART 1 >>>>>>>> ===== >>>>>>>> Thanks for the hint. I think maybe you have given me some inspiration! >>>>>>>> >>>>>>>> It looks like getValue will return null if the table value is not the >>>>>>>> length >>>>>>>> of a long. When we created our table (batch loading CSVs using the >>>>>>>> SampleUploader example) we simply have this as our put(): >>>>>>>> put.add(family, Bytes.toBytes("advanceKWh"), advanceKWh); >>>>>>>> [note we do no Bytes.toxxx casts to the advanceKWh value. The values >>>>>> look >>>>>>>> OK >>>>>>>> from HBase shell though :-)] >>>>>>>> >>>>>>>> but I looked at TestAggregateProtocol.java again and I see there puts >>>>>> like: >>>>>>>> p2.add(TEST_FAMILY, Bytes.add(TEST_MULTI_CQ, Bytes.toBytes(l)), >>>>>>>> Bytes.toBytes(l * 10)); >>>>>>>> >>>>>>>> So my hypothesis is that we need to do something like: >>>>>>>> Long l = new Long(1); >>>>>>>> put.add(family, Bytes.toBytes("advanceKWh"), Bytes.toBytes(l * >>>>>>>> advanceKWh)); >>>>>>>> when we create the table. >>>>>>>> >>>>>>>> Do you think my hypothesis is correct? Did we build our table >>>>>> incorrectly >>>>>>>> for reading longs from it? >>>>>>>> >>>>>>>> PART 2 >>>>>>>> ===== >>>>>>>> Anyway we will obviously need to make our own interpreters. but we >>>>>> failed >>>>>>>> at >>>>>>>> this task so far: >>>>>>>> In order to implement our own ColumnInterpretter, we first attempted >>>>>> simply >>>>>>>> extending the LongColumnInterpreter and passing that as a parameter to >>>>>>>> aClient.sum(). >>>>>>>> import >>>> org.apache.hadoop.hbase.client.coprocessor.LongColumnInterpreter; >>>>>>>> >>>>>>>> public class LCI extends LongColumnInterpreter { >>>>>>>> public Long add(Long a, Long b) { >>>>>>>> System.out.print("LCI.add("+a+","+b+")"); >>>>>>>> Long c = super.add(a,b); >>>>>>>> System.out.println(" -> "+c); >>>>>>>> return c; >>>>>>>> } >>>>>>>> }; >>>>>>>> .... >>>>>>>> final ColumnInterpreter<Long, Long> ci = new LCI(); >>>>>>>> long sum=-1; >>>>>>>> try { >>>>>>>> sum = aClient.sum(EDRP_TABLE, ci, scan); >>>>>>>> ... >>>>>>>> However, we received class not found errors in our regionserver log >>>>>> when we >>>>>>>> ran this code >>>>>>>> Clearly we are missing something >>>>>>>> We've started looking at modifying the HBase source and rebuilding >>>> that >>>>>>>> But I think this is not the way we should be working >>>>>>>> It seems that we should be implementing the ColumnInterpreter >>>> interface >>>>>> and >>>>>>>> passing an instance of that implementation class too as a parameter. >>>> Is >>>>>>>> this correct? Could you provide us with an example? Any ideas why we >>>>>>>> might >>>>>>>> be getting class not found exception from the regionserver? >>>>>>>> >>>>>>>> Sorry for the long message! >>>>>>>> >>>>>>>> Royston (and Tom) >>>>>>>> >>>>>>>> >>>>>>>> -----Original Message----- >>>>>>>> From: Ted Yu [mailto:[email protected]] >>>>>>>> Sent: 03 January 2012 18:00 >>>>>>>> To: [email protected] >>>>>>>> Subject: Re: AggregateProtocol Help >>>>>>>> >>>>>>>> My previous email might not be hitting the root cause. >>>>>>>> I think the following method in LCI may be giving you the null: >>>>>>>> >>>>>>>> public Long getValue(byte[] colFamily, byte[] colQualifier, KeyValue >>>> kv) >>>>>>>> throws IOException { >>>>>>>> if (kv == null || kv.getValueLength() != Bytes.SIZEOF_LONG) >>>>>>>> return null; >>>>>>>> return Bytes.toLong(kv.getBuffer(), kv.getValueOffset()); >>>>>>>> >>>>>>>> Look at the if statement above carefully. >>>>>>>> If it doesn't match how you store values in HBase, feel free to >>>> subclass >>>>>>>> LongColumnInterpreter and provide the correct interpretation. >>>>>>>> >>>>>>>> BTW you don't need to restart cluster just because you need to use >>>> your >>>>>> own >>>>>>>> interpreter :-) >>>>>>>> >>>>>>>> On Tue, Jan 3, 2012 at 9:48 AM, Royston Sellman < >>>>>>>> [email protected]> wrote: >>>>>>>> >>>>>>>>> Hi Ted, >>>>>>>>> >>>>>>>>> Here is the output. As you can see aClient is not nul: >>>>>>>>> >>>>>>>>> AggregationClient aClient = new AggregationClient(conf); >>>>>>>>> System.err.println("aClient: "+aClient); >>>>>>>>> >>>>>>>>> <<< aClient: >>>>>>>>> org.apache.hadoop.hbase.client.coprocessor.AggregationClient@28787c16 >>>>>>>>> >>>>>>>>> It will take us a little while to add log code to LCI... we have to >>>>>>>>> edit the source, rebuild 0.92, redistribute round our cluster, >>>> restart >>>>>>>>> ;) We'll get back to you when this is done. >>>>>>>>> >>>>>>>>> Royston >>>>>>>>> >>>>>>>>> -----Original Message----- >>>>>>>>> From: Ted Yu [mailto:[email protected]] >>>>>>>>> Sent: 03 January 2012 17:10 >>>>>>>>> To: [email protected] >>>>>>>>> Subject: Re: AggregateProtocol Help >>>>>>>>> >>>>>>>>> Royston: >>>>>>>>> Thanks for your effort trying to hunt down the problem. >>>>>>>>> >>>>>>>>> Can you add a log after this line to see if aClient is null ? >>>>>>>>> AggregationClient aClient = new AggregationClient(conf); >>>>>>>>> >>>>>>>>> I was looking at LongColumnInterpreter.add() which is called by >>>>>>>>> aClient.sum() >>>>>>>>> Can you add a few log statements in LongColumnInterpreter.add() to >>>> see >>>>>>>>> what parameters are passed to it ? >>>>>>>>> >>>>>>>>> Cheers >>>>>>>>> >>>>>>>>> On Tue, Jan 3, 2012 at 8:32 AM, Royston Sellman < >>>>>>>>> [email protected]> wrote: >>>>>>>>> >>>>>>>>>> Hi Ted, Himanshu, Gary, >>>>>>>>>> >>>>>>>>>> Thanks again for your attention. I experimented with a shorter table >>>>>>>>>> and it looks like the timeout error was spurious... >>>>>>>>>> >>>>>>>>>> With the shorter table I now get an NPE when I call >>>>>>>>>> AggregationClient.sum(). >>>>>>>>>> Here's the code snippet: >>>>>>>>>> >>>>>>>>>> // Test the table >>>>>>>>>> HTable table = new HTable(EDRP_TABLE); >>>>>>>>>> Get get = new Get(Bytes.toBytes("row-aa")); >>>>>>>>>> get.addColumn(Bytes.toBytes("EDRP"), >>>>>>>>>> Bytes.toBytes("advanceKWh")); >>>>>>>>>> Result result = table.get(get); >>>>>>>>>> byte [] val = result.getValue(Bytes.toBytes("EDRP"), >>>>>>>>>> Bytes.toBytes("advanceKWh")); >>>>>>>>>> System.out.println("Row aa = " + >>>>>>>>>> Bytes.toString(val)); >>>>>>>>>> >>>>>>>>>> AggregationClient aClient = new >>>> AggregationClient(conf); >>>>>>>>>> Scan scan = new Scan(); >>>>>>>>>> scan.addColumn(EDRP_FAMILY, EDRP_QUALIFIER); >>>>>>>>>> scan.setStartRow(Bytes.toBytes("row-ab")); >>>>>>>>>> scan.setStopRow(Bytes.toBytes("row-az")); >>>>>>>>>> System.out.println(Bytes.toString(EDRP_FAMILY) + ":" >>>>>>>>>> + Bytes.toString(EDRP_QUALIFIER)); >>>>>>>>>> final ColumnInterpreter<Long, Long> ci = new >>>>>>>>>> LongColumnInterpreter(); >>>>>>>>>> long sum=-1; >>>>>>>>>> try { >>>>>>>>>> sum = aClient.sum(EDRP_TABLE, ci, scan); >>>>>>>>>> } catch (Throwable e) { >>>>>>>>>> // TODO Auto-generated catch block >>>>>>>>>> e.printStackTrace(); >>>>>>>>>> } >>>>>>>>>> System.out.println(sum); >>>>>>>>>> >>>>>>>>>> The first part is just to check that my table is OK. It prints the >>>>>>>>>> correct value for row aa. Then I check CF:CQ is correct. Then I get >>>>>>>>>> the -1 that sum was defined as. Then the NPE. Here is the run >>>> output: >>>>>>>>>> >>>>>>>>>> Row aa = 3.0 >>>>>>>>>> EDRP:advanceKWh >>>>>>>>>> -1 >>>>>>>>>> java.lang.NullPointerException >>>>>>>>>> at EDRPAggregator.testSumWithValidRange(EDRPAggregator.java:66) >>>>>>>>>> at EDRPAggregator.main(EDRPAggregator.java:96) >>>>>>>>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at >>>>>>>>>> >>>>>>>>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl >>>>>>>>>> .j >>>>>>>>>> ava:39 >>>>>>>>>> ) >>>>>>>>>> at >>>>>>>>>> >>>>>>>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcce >>>>>>>>>> ss >>>>>>>>>> orImpl >>>>>>>>>> .java:25) >>>>>>>>>> at java.lang.reflect.Method.invoke(Method.java:597) >>>>>>>>>> at org.apache.hadoop.util.RunJar.main(RunJar.java:156) >>>>>>>>>> >>>>>>>>>> Line 66 is the line: >>>>>>>>>> sum = aClient.sum(EDRP_TABLE, ci, scan); >>>>>>>>>> >>>>>>>>>> But I'm not sure that is really the line generating the NPE because >>>>>>>>>> I get the -1 output (same result when line 66 is not wrapped in >>>>>>>>>> try-catch >>>>>>>>> BTW). >>>>>>>>>> Anyway, -1 is clearly not the correct value for the sum. >>>>>>>>>> >>>>>>>>>> [Note: I'm setting a start and end row on the scan because I saw a >>>>>>>>>> comment in AggregationClient.java saying they must be set. However, >>>>>>>>>> I think this comment is obsolete as the test code in >>>>>>>>>> TestAggregateProtocol.java sometimes does not include start & end >>>>>>>>>> rows. The run is exactly the same without the start & stop rows ] >>>>>>>>>> >>>>>>>>>> We are struggling with Aggregations not least because >>>>>>>>>> TestAggregateProtocol.java is the only source of example code we >>>>>>>>>> could find and it is not ideal because it is designed to work with >>>>>>>>>> MiniCluster rather than a real cluster like ours. Is there any other >>>>>>>>>> example code in existence? >>>>>>>>>> I think that would really help us. >>>>>>>>>> >>>>>>>>>> Meanwhile, thanks for your patience with our questions. We are >>>>>>>>>> really impressed with the AggregationProtocol >>>>>>>>>> architecture/functionality and very keen to use it. >>>>>>>>>> >>>>>>>>>> Royston (and Tom) >>>>>>>>>> >>>>>>>>>> -----Original Message----- >>>>>>>>>> From: Gary Helmling [mailto:[email protected]] >>>>>>>>>> Sent: 02 January 2012 06:23 >>>>>>>>>> To: [email protected] >>>>>>>>>> Subject: Re: AggregateProtocol Help >>>>>>>>>> >>>>>>>>>> Hi Royston, >>>>>>>>>> >>>>>>>>>> Try increasing the value set for hbase.rpc.timeout (by default 60 >>>>>>>>> seconds). >>>>>>>>>> Add something like this to hbase-site.xml: >>>>>>>>>> >>>>>>>>>> <property> >>>>>>>>>> <name>hbase.rpc.timeout</name> >>>>>>>>>> <value>180000</value> >>>>>>>>>> </property> >>>>>>>>>> >>>>>>>>>> This would increase the timeout value to 3 minutes, for example. >>>>>>>>>> >>>>>>>>>> But as Ted and Himanshu mention, 557k rows is not a large table and >>>>>>>>>> should not be taking very long to process, unless these happen to be >>>>>>>>>> very, very wide rows. It sounds like there could be something else >>>>>>>>>> going on. Does debug level logging show anything else in the region >>>>>>>>> server log? >>>>>>>>>> >>>>>>>>>> --gh >>>>>>>>>> >>>>>>>>>> On Sun, Jan 1, 2012 at 5:53 PM, Ted Yu <[email protected]> wrote: >>>>>>>>>>> Thanks for the reminder Himanshu. >>>>>>>>>>> >>>>>>>>>>> Royston: >>>>>>>>>>> From this blog you can get some history on this subject: >>>>>>>>>>> http://zhihongyu.blogspot.com/2011/03/genericizing-endpointcoproce >>>>>>>>>>> ss >>>>>>>>>>> or >>>>>>>>>>> .html >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> On Sun, Jan 1, 2012 at 5:18 PM, Himanshu Vashishtha >>>>>>>>>>> <[email protected] >>>>>>>>>>>> wrote: >>>>>>>>>>> >>>>>>>>>>>> Hello Royston, >>>>>>>>>>>> >>>>>>>>>>>> Sorry to hear that you are getting trouble while using >>>>>>>>>>>> Aggregation functionalities. >>>>>>>>>>>> >>>>>>>>>>>> 557k rows seems to be a small table and a SocketTimeout does not >>>>>>>>>>>> seem to be an ok response. >>>>>>>>>>>> It will be good to know the region distribution as such. (how >>>>>>>>>>>> many >>>>>>>>>> regions? >>>>>>>>>>>> Is it a full table scan?) >>>>>>>>>>>> >>>>>>>>>>>> You are using the sum function; how are you using the >>>>>>>>> ColumnInterpreter. >>>>>>>>>>>> Can you enable the log level to debug to see why the RS is taking >>>>>>>>>>>> that long to respond (more than 113 sec). >>>>>>>>>>>> The 0 return value is the default result. >>>>>>>>>>>> >>>>>>>>>>>> Thanks for trying this out. >>>>>>>>>>>> >>>>>>>>>>>> Thanks, >>>>>>>>>>>> Himanshu >>>>>>>>>>>> >>>>>>>>>>>> On Sun, Jan 1, 2012 at 12:26 PM, Royston Sellman < >>>>>>>>>>>> [email protected]> wrote: >>>>>>>>>>>> >>>>>>>>>>>>> Hi Ted, >>>>>>>>>>>>> >>>>>>>>>>>>> I think 0 is the only value we ever see (I'll check tomorrow: >>>>>>>>>>>>> the server is down right now). Our table has 557,000 rows. I'll >>>>>>>>>>>>> try a much shorter table tomorrow. >>>>>>>>>>>>> >>>>>>>>>>>>> Yes, we have RS running on the NN, but it's a test cluster and >>>>>>>>>>>>> we are >>>>>>>>>>>> used >>>>>>>>>>>>> to it :) >>>>>>>>>>>>> >>>>>>>>>>>>> Do you think using AggregationProtocol is the best strategy for >>>>>>>>>>>>> the case where we want to use basic SQL-style functions like >>>>>>>>>>>>> SUM, AVG, STD, MIN, MAX? Do you think there is a better strategy? >>>>>>>>>>>>> >>>>>>>>>>>>> Many thanks, >>>>>>>>>>>>> Royston >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> On 1 Jan 2012, at 17:58, Ted Yu wrote: >>>>>>>>>>>>> >>>>>>>>>>>>>> Royston: >>>>>>>>>>>>>> Happy New Year to you too. >>>>>>>>>>>>>> >>>>>>>>>>>>>>>> java.net.SocketTimeoutException: Call to >>>>>>>>>>>>>>>> namenode/10.0.0.235:60020 >>>>>>>>>>>> failed >>>>>>>>>>>>> on >>>>>>>>>>>>>> >>>>>>>>>>>>>> It seems the namenode above actually refers to a region server. >>>>>>>>>>>>>> This >>>>>>>>>>>> is a >>>>>>>>>>>>>> little bit confusing :-) >>>>>>>>>>>>>> >>>>>>>>>>>>>> The sum value below is 0. >>>>>>>>>>>>>> Have you ever seen a value greater than 0 ? >>>>>>>>>>>>>> >>>>>>>>>>>>>> How many rows are there in this CF:CQ ? >>>>>>>>>>>>>> The timeout was reported earlier by other people where >>>>>>>>>>>>>> there're many >>>>>>>>>>>> rows >>>>>>>>>>>>>> in the table. >>>>>>>>>>>>>> >>>>>>>>>>>>>> There is a JIRA to provide streaming support for coprocessor >>>>>>>>>>>>>> but the development there has stalled. >>>>>>>>>>>>>> >>>>>>>>>>>>>> Cheers >>>>>>>>>>>>>> >>>>>>>>>>>>>> On Sun, Jan 1, 2012 at 9:35 AM, Royston Sellman < >>>>>>>>>>>>>> [email protected]> wrote: >>>>>>>>>>>>>> >>>>>>>>>>>>>>> Hi Gary and Ted, >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Royston (Tom's colleague) here. Back onto this after the >>>>>>>>>>>>>>> Christmas/New >>>>>>>>>>>>> Year >>>>>>>>>>>>>>> break. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Many thanks for your help so far. We enabled our database >>>>>>>>>>>>>>> via your hbase-site.xml mod and were able to move on. to >>>>>>>>>>>>>>> other errors. But I >>>>>>>>>>>>> think >>>>>>>>>>>>>>> we >>>>>>>>>>>>>>> are now actually getting an aggregation partially calculated >>>>>>>>>>>>>>> on our >>>>>>>>>>>>> table >>>>>>>>>>>>>>> (this feels like progress). The details: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> On running our client we now get this exception: >>>>>>>>>>>>>>> 11/12/31 17:51:09 WARN >>>>>>>>>>>>>>> client.HConnectionManager$HConnectionImplementation: Error >>>>>>>>>>>>>>> executing >>>>>>>>>>>> for >>>>>>>>>>>>>>> row >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> java.util.concurrent.ExecutionException: >>>>>>>>>>>>>>> org.apache.hadoop.hbase.client.RetriesExhaustedException: >>>>>>>>>>>>>>> Failed after attempts=10, exceptions: >>>>>>>>>>>>>>> Sat Dec 31 17:41:30 GMT 2011, >>>>>>>>>>>>>>> org.apache.hadoop.hbase.ipc.ExecRPCInvoker$1@1fc4f0f8, >>>>>>>>>>>>>>> java.net.SocketTimeoutException: Call to >>>>>>>>>>>>>>> namenode/10.0.0.235:60020 >>>>>>>>>>>> failed >>>>>>>>>>>>>>> on >>>>>>>>>>>>>>> socket timeout exception: java.net.SocketTimeoutException: >>>>>>>>>>>>>>> 60000 >>>>>>>>>>>> millis >>>>>>>>>>>>>>> timeout while waiting for channel to be ready for read. ch : >>>>>>>>>>>>>>> java.nio.channels.SocketChannel[connected >>>>>>>>>>>>>>> local=/10.0.0.235:59999 remote=namenode/10.0.0.235:60020] >>>>>>>>>>>>>>> (8 more of these, making for 10 tries) Sat Dec 31 17:51:09 >>>>>>>>>>>>>>> GMT 2011, >>>>>>>>>>>>>>> org.apache.hadoop.hbase.ipc.ExecRPCInvoker$1@1fc4f0f8, >>>>>>>>>>>>>>> java.net.SocketTimeoutException: Call to >>>>>>>>>>>>>>> namenode/10.0.0.235:60020 >>>>>>>>>>>> failed >>>>>>>>>>>>>>> on >>>>>>>>>>>>>>> socket timeout exception: java.net.SocketTimeoutException: >>>>>>>>>>>>>>> 60000 >>>>>>>>>>>> millis >>>>>>>>>>>>>>> timeout while waiting for channel to be ready for read. ch : >>>>>>>>>>>>>>> java.nio.channels.SocketChannel[connected >>>>>>>>>>>>>>> local=/10.0.0.235:59364 remote=namenode/10.0.0.235:60020] >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> at >>>>>>>>>>>>>>> java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java: >>>>>>>>>>>>>>> 22 >>>>>>>>>>>>>>> 2) >>>>>>>>>>>>>>> at >>>>>>>> java.util.concurrent.FutureTask.get(FutureTask.java:83) >>>>>>>>>>>>>>> at >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>> >>>> org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation. >>>>>>>>>>>>>>> processExecs(HConnectionManager.java:1465) >>>>>>>>>>>>>>> at >>>>>>>>>>>>>>> >>>>>>>>>>>> org.apache.hadoop.hbase.client.HTable.coprocessorExec(HTable.java >>>>>>>>>>>> :1 >>>>>>>>>>>> 55 >>>>>>>>>>>> 5) >>>>>>>>>>>>>>> at >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> org.apache.hadoop.hbase.client.coprocessor.AggregationClient.sum( >>>>>>>>>>>> Ag >>>>>>>>>>>> gr >>>>>>>>>>>> egation >>>>>>>>>>>>>>> Client.java:229) >>>>>>>>>>>>>>> at >>>>>>>>>>>>>>> EDRPAggregator.testSumWithValidRange(EDRPAggregator.java:51) >>>>>>>>>>>>>>> at EDRPAggregator.main(EDRPAggregator.java:77) >>>>>>>>>>>>>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native >>>>>>>>>>>>>>> Method) >>>>>>>>>>>>>>> at >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl. >>>>>>>>>>>> java:39 >>>>>>>>>>>>>>> ) >>>>>>>>>>>>>>> at >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodA >>>>>>>>>>>> cc >>>>>>>>>>>> es >>>>>>>>>>>> sorImpl >>>>>>>>>>>>>>> .java:25) >>>>>>>>>>>>>>> at java.lang.reflect.Method.invoke(Method.java:597) >>>>>>>>>>>>>>> at org.apache.hadoop.util.RunJar.main(RunJar.java:156) >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Looking at the log (.regionserver-namenode.log) I see this >>>>>>>>>>>>>>> debug >>>>>>>>>>>>> message: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> 2011-12-31 17:42:23,472 DEBUG >>>>>>>>>>>>>>> org.apache.hadoop.hbase.coprocessor.AggregateImplementation: >>>>>>>>>>>>>>> Sum from >>>>>>>>>>>>> this >>>>>>>>>>>>>>> region is >>>>>>>>>>>> EDRPTestTbl,,1324485124322.7b9ee0d113db9b24ea9fdde90702d006.: >>>>>>>>>>>>> 0 >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Where the sum value looks reasonable which makes me think >>>>>>>>>>>>>>> the sum of a CF:CQ worked. But I never see this value on >>>>>>>> stdout. >>>>>>>>>>>>>>> Then I see this warning: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> 2011-12-31 17:42:23,476 WARN org.apache.hadoop.ipc.HBaseServer: >>>>>>>>>>>>>>> (responseTooSlow): >>>>>>>>>>>>>>> {"processingtimems":113146,"call":"execCoprocess$ >>>>>>>>>>>>>>> 2011-12-31 17:42:23,511 WARN org.apache.hadoop.ipc.HBaseServer: >>>>>>>>>>>>>>> IPC >>>>>>>>>>>>> Server >>>>>>>>>>>>>>> Responder, call execCoprocessor([B@4b22fad6, getSum(org.$ >>>>>>>>>>>>>>> 2011-12-31 17:42:23,515 WARN org.apache.hadoop.ipc.HBaseServer: >>>>>>>>>>>>>>> IPC >>>>>>>>>>>>> Server >>>>>>>>>>>>>>> handler 1 on 60020 caught: java.nio.channels.ClosedChann$ >>>>>>>>>>>>>>> at >>>>>>>>>>>>>>> >>>>>>>>>>>> sun.nio.ch.SocketChannelImpl.ensureWriteOpen(SocketChannelImpl.ja >>>>>>>>>>>> va >>>>>>>>>>>> :1 >>>>>>>>>>>> 33) >>>>>>>>>>>>>>> at >>>>>>>>>>>> sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:324) >>>>>>>>>>>>>>> at >>>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> org.apache.hadoop.hbase.ipc.HBaseServer.channelWrite(HBaseServer. >>>>>>>>>>>> ja >>>>>>>>>>>> va >>>>>>>>>>>> :1651) >>>>>>>>>>>>>>> at >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> org.apache.hadoop.hbase.ipc.HBaseServer$Responder.processResponse >>>>>>>>>>>> (H >>>>>>>>>>>> Ba >>>>>>>>>>>> seServe >>>>>>>>>>>>>>> r.java:924) >>>>>>>>>>>>>>> at >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> org.apache.hadoop.hbase.ipc.HBaseServer$Responder.doRespond(HBase >>>>>>>>>>>> Se >>>>>>>>>>>> rv >>>>>>>>>>>> er.java >>>>>>>>>>>>>>> :1003) >>>>>>>>>>>>>>> at >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> org.apache.hadoop.hbase.ipc.HBaseServer$Call.sendResponseIfReady( >>>>>>>>>>>> HB >>>>>>>>>>>> as >>>>>>>>>>>> eServer >>>>>>>>>>>>>>> .java:409) >>>>>>>>>>>>>>> at >>>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>> org.apache.hadoop.hbase.ipc.HBaseServer$Handler.run(HBaseServer.java: >>>>>>>>>>>> 1345) >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Have we missed out some step in the HBase/RegionServerconfig? >>>>>>>>>>>>>>> Or is >>>>>>>>>>>> our >>>>>>>>>>>>>>> client code still deficient? >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Can you offer any suggestions? Is there any example code for >>>>>>>>>>>>>>> the new Aggregations stuff. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Thanks and Happy New Year to you guys, >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Royston (and Tom). >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> (HBase 0.92, Hadoop 1.0) >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> -----Original Message----- >>>>>>>>>>>>>>> From: Gary Helmling [mailto:[email protected]] >>>>>>>>>>>>>>> Sent: 23 December 2011 18:06 >>>>>>>>>>>>>>> To: [email protected] >>>>>>>>>>>>>>> Subject: Re: AggregateProtocol Help >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Hi Tom, >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> The test code is not really the best guide for configuration. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> To enable the AggregateProtocol on all of your tables, add >>>>>>>>>>>>>>> this to the hbase-site.xml for the servers in your cluster: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> <property> >>>>>>>>>>>>>>> <name>hbase.coprocessor.user.region.classes</name> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> <value>org.apache.hadoop.hbase.coprocessor.AggregateImplementatio >>>>>>>>>>>> n< >>>>>>>>>>>> /v >>>>>>>>>>>> alue> >>>>>>>>>>>>>>> </property> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> If you only want to use the aggregate functions on a >>>>>>>>>>>>>>> specific table >>>>>>>>>>>> (or >>>>>>>>>>>>>>> tables), then you can enable that individually for the table >>>>>>>>>>>>>>> from the >>>>>>>>>>>>>>> shell: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> 1) disable the table >>>>>>>>>>>>>>> hbase> disable 'EDRP7' >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> 2) add the coprocessor >>>>>>>>>>>>>>> hbase> alter 'EDRP7', METHOD => 'table_att', >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> 'coprocessor'=>'|org.apache.hadoop.hbase.coprocessor.AggregateImp >>>>>>>>>>>> le >>>>>>>>>>>> me >>>>>>>>>>>> ntation >>>>>>>>>>>>>>> ||' >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> (Note that the pipes in the value string are required) >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> 3) re-enable the table >>>>>>>>>>>>>>> hbase> enable 'EDRP7' >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Either way should work. With the second approach you will >>>>>>>>>>>>>>> see the coprocessor listed when you describe the table from >>>>>>>>>>>>>>> the shell, as Ted mentioned. With the first approach you >>>>>>>>>>>>>>> will not, but it should be >>>>>>>>>>>>> loaded >>>>>>>>>>>>>>> all the same. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> --gh >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> On Fri, Dec 23, 2011 at 7:04 AM, Ted Yu >>>>>>>>>>>>>>> <[email protected]> >>>>>>>>>> wrote: >>>>>>>>>>>>>>>> I don't know why you chose HBaseTestingUtility to create >>>>>>>>>>>>>>>> the >>>>>>>>>> table. >>>>>>>>>>>>>>>> I guess you followed test code example. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> At least you should pass the conf to this ctor: >>>>>>>>>>>>>>>> public HBaseTestingUtility(Configuration conf) { >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> If coprocessor was installed correctly, you should see >>>>>>>>>>>>>>>> something like(from >>>>>>>>>>>>>>>> HBASE-5070): >>>>>>>>>>>>>>>> coprocessor$1 => >>>>>>>>>>>>>>>> >>>>>>>>>> >>>> '|org.apache.hadoop.hbase.constraint.ConstraintProcessor|1073741823|' >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Cheers >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> On Fri, Dec 23, 2011 at 3:02 AM, Tom Wilcox >>>>>>>>>>>>>>>> <[email protected]> >>>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Hi, >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> I am not sure how we load the AggregateImplementation into >>>>>>>>>>>>>>>>> the >>>>>>>>>>>> table. >>>>>>>>>>>>>>>>> When we are creating a table, we use the same functions as >>>>>>>>>>>>>>>>> the test >>>>>>>>>>>> as >>>>>>>>>>>>>>> follows... >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> ... >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> conf.set(CoprocessorHost.REGION_COPROCESSOR_CONF_KEY, >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>> "org.apache.hadoop.hbase.coprocessor.AggregateImplementation" >>>>>>>>>>>>>>>>>> ); >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> // Utility.CreateHBaseTable(conf, >>>>>>>>>>>>>>>>>> otherArgs[1], >>>>>>>>>>>>>>>>> otherArgs[2], >>>>>>>>>>>>>>>>>> true); >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> HBaseTestingUtility util = new >>>>>>>>>>>>>>>>>> HBaseTestingUtility(); >>>>>>>>>>>>>>>>>> HTable table = util.createTable(EDRP_TABLE, >>>>>>>>>>>>>>>>>> EDRP_FAMILY); >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> AggregationClient aClient = new >>>>>>>>>>>>>>>>>> AggregationClient(conf); >>>>>>>>>>>>>>>>> ... >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Running DESCRIBE on a table produced shows the following >>>>>>>>> output: >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> hbase(main):002:0> describe 'EDRP7' >>>>>>>>>>>>>>>>> DESCRIPTION >>>>>>>>>>>>>>>>> ENABLED {NAME => >>>>>>>>>>>>>>>>> 'EDRP7', FAMILIES => [{NAME => 'advanceKWh', BLOOMFILTER >>>>>>>>>>>>>>>>> => 'NONE', REPLICATION_SCOPE => '0', VERSIONS => true >>>>>>>>>>>>>>>>> '3', COMPRESSION => 'NONE', MIN_VERSIONS => '0', TTL => >>>>>>>>>>>>>>>>> '2147483647', BLOCKSIZE => '65536', IN_MEMORY => 'false', >>>>>>>>>>>>>>>>> B LOCKCACHE => 'true'}]} >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> We are using the tip of 0.92 (cloned from the Git repo). >>>>>>>>>>>>>>>>> See the version string below: >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> hbase(main):005:0> version 0.92.0, r1208286, Thu Dec 15 >>>>>>>>>>>>>>>>> 13:16:03 GMT 2011 >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> We would really appreciate an example of how to create a >>>>>>>>>>>>>>>>> table that is enabled to handle Aggregation). >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Thanks >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> ________________________________________ >>>>>>>>>>>>>>>>> From: Ted Yu [[email protected]] >>>>>>>>>>>>>>>>> Sent: 22 December 2011 17:03 >>>>>>>>>>>>>>>>> To: [email protected] >>>>>>>>>>>>>>>>> Subject: Re: AggregateProtocol Help >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Have you loaded AggregateImplementation into your table ? >>>>>>>>>>>>>>>>> Can you show us the contents of the following command in >>>>>>>>>>>>>>>>> hbase >>>>>>>>>>>> shell: >>>>>>>>>>>>>>>>> describe 'your-table' >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> BTW are you using the tip of 0.92 ? >>>>>>>>>>>>>>>>> HBASE-4946 would be of help for dynamically loaded >>>>>>>>>>>>>>>>> coprocessors >>>>>>>>>>>> which >>>>>>>>>>>>>>>>> you might use in the future. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Cheers >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> On Thu, Dec 22, 2011 at 8:09 AM, Tom Wilcox >>>>>>>>>>>>>>>>> <[email protected]> >>>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Hi, >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> We are trying to use the aggregation functionality in >>>>>>>>>>>>>>>>>> HBase >>>>>>>>>>>>>>>>>> 0.92 and we have managed to get the test code working >>>>>>>>>>>>>>>>>> using the >>>>>>>>>>>> following >>>>>>>>>>>>>>> command: >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> java -classpath junit-4.10.jar:build/*:$HBASELIBS/* >>>>>>>>>>>>>>>>>> org.junit.runner.JUnitCore >>>>>>>>>>>>>>>>>> org.apache.hadoop.hbase.coprocessor.TestAggregateProtocol >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Closer inspection of this test class has revealed that it >>>>>>>>>>>>>>>>>> uses a mini DFS cluster to populate and run the tests. >>>>>>>>>>>>>>>>>> These tests return >>>>>>>>>>>>>>> successfully. >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> However, when we attempt to run similar code on our >>>>>>>>>>>>>>>>>> development HDFS cluster we experience the following error: >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> 11/12/22 15:46:28 WARN >>>>>>>>>>>>>>>>>> client.HConnectionManager$HConnectionImplementation: >>>>>>>>>>>>>>>>>> Error executing for >>>>>>>>>>>>>>>>> row >>>>>>>>>>>>>>>>>> java.util.concurrent.ExecutionException: >>>>>>>>>>>>>>>>>> >>>>>>>> org.apache.hadoop.hbase.ipc.HBaseRPC$UnknownProtocolException: >>>>>>>>>>>>>>>>>> org.apache.hadoop.hbase.ipc.HBaseRPC$UnknownProtocolExcep >>>>>>>>>>>>>>>>>> ti >>>>>>>>>>>>>>>>>> on >>>>>>>>>>>>>>>>>> : No >>>>>>>>>>>>>>>>> matching >>>>>>>>>>>>>>>>>> handler for protocol >>>>>>>>>>>>>>>>> org.apache.hadoop.hbase.coprocessor.AggregateProtocol >>>>>>>>>>>>>>>>>> in region >>>>>>>>>>>>> EDRPTestTbl,,1324485124322.7b9ee0d113db9b24ea9fdde90702d006. >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> org.apache.hadoop.hbase.regionserver.HRegion.exec(HRegion >>>>>>>>>>>>>>>>>> .j >>>>>>>>>>>>>>>>>> av >>>>>>>>>>>>>>>>>> a:4010 >>>>>>>>>>>>>>>>>> ) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>> org.apache.hadoop.hbase.regionserver.HRegionServer.execCoprocesso >>>>>>>>>>>> r( >>>>>>>>>>>> HR >>>>>>>>>>>>>>>>> egionServer.java:3040) >>>>>>>>>>>>>>>>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native >>>>>>>>>>>>>>>>> Method) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl. >>>>>>>>>>>>>>>>> java:39) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodA >>>>>>>>>>>> cc >>>>>>>>>>>> es >>>>>>>>>>>>>>>>> sorImpl.java:25) >>>>>>>>>>>>>>>>>> at java.lang.reflect.Method.invoke(Method.java:597) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>> org.apache.hadoop.hbase.ipc.WritableRpcEngine$Server.call(Writabl >>>>>>>>>>>> eR >>>>>>>>>>>> pc >>>>>>>>>>>>>>>>> Engine.java:364) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>> org.apache.hadoop.hbase.ipc.HBaseServer$Handler.run(HBaseServer.java: >>>>>>>>>>>>>>>>> 1325) >>>>>>>>>>>>>>>>>> [sshexec] >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> java.util.concurrent.FutureTask$Sync.innerGet(FutureTask. >>>>>>>>>>>>>>>>>> ja >>>>>>>>>>>>>>>>>> va >>>>>>>>>>>>>>>>>> :222) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> java.util.concurrent.FutureTask.get(FutureTask.java:83) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>> org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImpl >>>>>>>>>>>> em >>>>>>>>>>>> en >>>>>>>>>>>>>>>>> tation.processExecs(HConnectionManager.java:1465) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> >>>>>>>> org.apache.hadoop.hbase.client.HTable.coprocessorExec(HTable. >>>>>>>>>>>>>>>>>> java:1 >>>>>>>>>>>>>>>>>> 555) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>> org.apache.hadoop.hbase.client.coprocessor.AggregationClient.sum( >>>>>>>>>>>> Ag >>>>>>>>>>>> gr >>>>>>>>>>>>>>>>> egationClient.java:229) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> EDRPAggregator.testSumWithValidRange(EDRPAggregator.java:51) >>>>>>>>>>>>>>>>>> at EDRPAggregator.main(EDRPAggregator.java:77) >>>>>>>>>>>>>>>>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native >>>>>>>>>>>>>>>>> Method) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl. >>>>>>>>>>>>>>>>> java:39) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodA >>>>>>>>>>>> cc >>>>>>>>>>>> es >>>>>>>>>>>>>>>>> sorImpl.java:25) >>>>>>>>>>>>>>>>>> at java.lang.reflect.Method.invoke(Method.java:597) >>>>>>>>>>>>>>>>>> at org.apache.hadoop.util.RunJar.main(RunJar.java:156) >>>>>>>>>>>>>>>>>> Caused by: >>>>>>>>>>>>>>>>>> >>>>>>>> org.apache.hadoop.hbase.ipc.HBaseRPC$UnknownProtocolException: >>>>>>>>>>>>>>>>>> org.apache.hadoop.hbase.ipc.HBaseRPC$UnknownProtocolExcep >>>>>>>>>>>>>>>>>> ti >>>>>>>>>>>>>>>>>> on >>>>>>>>>>>>>>>>>> : No >>>>>>>>>>>>>>>>> matching >>>>>>>>>>>>>>>>>> handler for protocol >>>>>>>>>>>>>>>>> org.apache.hadoop.hbase.coprocessor.AggregateProtocol >>>>>>>>>>>>>>>>>> in region >>>>>>>>>>>>> EDRPTestTbl,,1324485124322.7b9ee0d113db9b24ea9fdde90702d006. >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> org.apache.hadoop.hbase.regionserver.HRegion.exec(HRegion >>>>>>>>>>>>>>>>>> .j >>>>>>>>>>>>>>>>>> av >>>>>>>>>>>>>>>>>> a:4010 >>>>>>>>>>>>>>>>>> ) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>> org.apache.hadoop.hbase.regionserver.HRegionServer.execCoprocesso >>>>>>>>>>>> r( >>>>>>>>>>>> HR >>>>>>>>>>>>>>>>> egionServer.java:3040) >>>>>>>>>>>>>>>>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native >>>>>>>>>>>>>>>>> Method) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl. >>>>>>>>>>>>>>>>> java:39) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodA >>>>>>>>>>>> cc >>>>>>>>>>>> es >>>>>>>>>>>>>>>>> sorImpl.java:25) >>>>>>>>>>>>>>>>>> at java.lang.reflect.Method.invoke(Method.java:597) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>> org.apache.hadoop.hbase.ipc.WritableRpcEngine$Server.call(Writabl >>>>>>>>>>>> eR >>>>>>>>>>>> pc >>>>>>>>>>>>>>>>> Engine.java:364) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>> org.apache.hadoop.hbase.ipc.HBaseServer$Handler.run(HBaseServer.java: >>>>>>>>>>>>>>>>> 1325) >>>>>>>>>>>>>>>>>> [sshexec] >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> sun.reflect.NativeConstructorAccessorImpl.newInstance0(Na >>>>>>>>>>>>>>>>>> ti >>>>>>>>>>>>>>>>>> ve >>>>>>>>>>>>>>>>>> Method) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>> sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConst >>>>>>>>>>>> ru >>>>>>>>>>>> ct >>>>>>>>>>>>>>>>> orAccessorImpl.java:39) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>> sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Delegat >>>>>>>>>>>> in >>>>>>>>>>>> gC >>>>>>>>>>>>>>>>> onstructorAccessorImpl.java:27) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> java.lang.reflect.Constructor.newInstance(Constructor.java: >>>>>>>>>>>>>>>>>> 51 >>>>>>>>>>>>>>>>>> 3) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>> org.apache.hadoop.hbase.RemoteExceptionHandler.decodeRemoteExcept >>>>>>>>>>>> io >>>>>>>>>>>> n( >>>>>>>>>>>>>>>>> RemoteExceptionHandler.java:96) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>> org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImpl >>>>>>>>>>>> em >>>>>>>>>>>> en >>>>>>>>>>>>>>>>> tation.translateException(HConnectionManager.java:1651) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>> org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImpl >>>>>>>>>>>> em >>>>>>>>>>>> en >>>>>>>>>>>>>>>>> tation.getRegionServerWithRetries(HConnectionManager.java: >>>>>>>>>>>>>>>>> 13 >>>>>>>>>>>>>>>>> 27 >>>>>>>>>>>>>>>>> ) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> org.apache.hadoop.hbase.ipc.ExecRPCInvoker.invoke(ExecRPC >>>>>>>>>>>>>>>>>> In >>>>>>>>>>>>>>>>>> vo >>>>>>>>>>>>>>>>>> ker.ja >>>>>>>>>>>>>>>>>> va:79) >>>>>>>>>>>>>>>>>> at $Proxy3.getSum(Unknown Source) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>> org.apache.hadoop.hbase.client.coprocessor.AggregationClient$4.ca >>>>>>>>>>>> ll >>>>>>>>>>>> (A >>>>>>>>>>>>>>>>> ggregationClient.java:233) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>> org.apache.hadoop.hbase.client.coprocessor.AggregationClient$4.ca >>>>>>>>>>>> ll >>>>>>>>>>>> (A >>>>>>>>>>>>>>>>> ggregationClient.java:230) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>> org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImpl >>>>>>>>>>>> em >>>>>>>>>>>> en >>>>>>>>>>>>>>>>> tation$4.call(HConnectionManager.java:1453) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> java.util.concurrent.FutureTask$Sync.innerRun(FutureTask. >>>>>>>>>>>>>>>>>> ja >>>>>>>>>>>>>>>>>> va >>>>>>>>>>>>>>>>>> :303) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> java.util.concurrent.FutureTask.run(FutureTask.java:138) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPool >>>>>>>>>>>> Ex >>>>>>>>>>>> ec >>>>>>>>>>>>>>>>> utor.java:886) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExec >>>>>>>>>>>> ut >>>>>>>>>>>> or >>>>>>>>>>>>>>>>> .java:908) >>>>>>>>>>>>>>>>>> at java.lang.Thread.run(Thread.java:662) >>>>>>>>>>>>>>>>>> >>>>>>>> org.apache.hadoop.hbase.ipc.HBaseRPC$UnknownProtocolException: >>>>>>>>>>>>>>>>>> org.apache.hadoop.hbase.ipc.HBaseRPC$UnknownProtocolExcep >>>>>>>>>>>>>>>>>> ti >>>>>>>>>>>>>>>>>> on >>>>>>>>>>>>>>>>>> : No >>>>>>>>>>>>>>>>> matching >>>>>>>>>>>>>>>>>> handler for protocol >>>>>>>>>>>>>>>>> org.apache.hadoop.hbase.coprocessor.AggregateProtocol >>>>>>>>>>>>>>>>>> in region >>>>>>>>>>>>> EDRPTestTbl,,1324485124322.7b9ee0d113db9b24ea9fdde90702d006. >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> org.apache.hadoop.hbase.regionserver.HRegion.exec(HRegion >>>>>>>>>>>>>>>>>> .j >>>>>>>>>>>>>>>>>> av >>>>>>>>>>>>>>>>>> a:4010 >>>>>>>>>>>>>>>>>> ) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>> org.apache.hadoop.hbase.regionserver.HRegionServer.execCoprocesso >>>>>>>>>>>> r( >>>>>>>>>>>> HR >>>>>>>>>>>>>>>>> egionServer.java:3040) >>>>>>>>>>>>>>>>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native >>>>>>>>>>>>>>>>> Method) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl. >>>>>>>>>>>>>>>>> java:39) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodA >>>>>>>>>>>> cc >>>>>>>>>>>> es >>>>>>>>>>>>>>>>> sorImpl.java:25) >>>>>>>>>>>>>>>>>> at java.lang.reflect.Method.invoke(Method.java:597) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>> org.apache.hadoop.hbase.ipc.WritableRpcEngine$Server.call(Writabl >>>>>>>>>>>> eR >>>>>>>>>>>> pc >>>>>>>>>>>>>>>>> Engine.java:364) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>> org.apache.hadoop.hbase.ipc.HBaseServer$Handler.run(HBaseServer.java: >>>>>>>>>>>>>>>>> 1325) >>>>>>>>>>>>>>>>>> [sshexec] >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> sun.reflect.NativeConstructorAccessorImpl.newInstance0(Na >>>>>>>>>>>>>>>>>> ti >>>>>>>>>>>>>>>>>> ve >>>>>>>>>>>>>>>>>> Method) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>> sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConst >>>>>>>>>>>> ru >>>>>>>>>>>> ct >>>>>>>>>>>>>>>>> orAccessorImpl.java:39) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>> sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Delegat >>>>>>>>>>>> in >>>>>>>>>>>> gC >>>>>>>>>>>>>>>>> onstructorAccessorImpl.java:27) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> java.lang.reflect.Constructor.newInstance(Constructor.java: >>>>>>>>>>>>>>>>>> 51 >>>>>>>>>>>>>>>>>> 3) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>> org.apache.hadoop.hbase.RemoteExceptionHandler.decodeRemoteExcept >>>>>>>>>>>> io >>>>>>>>>>>> n( >>>>>>>>>>>>>>>>> RemoteExceptionHandler.java:96) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>> org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImpl >>>>>>>>>>>> em >>>>>>>>>>>> en >>>>>>>>>>>>>>>>> tation.translateException(HConnectionManager.java:1651) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>> org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImpl >>>>>>>>>>>> em >>>>>>>>>>>> en >>>>>>>>>>>>>>>>> tation.getRegionServerWithRetries(HConnectionManager.java: >>>>>>>>>>>>>>>>> 13 >>>>>>>>>>>>>>>>> 27 >>>>>>>>>>>>>>>>> ) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> org.apache.hadoop.hbase.ipc.ExecRPCInvoker.invoke(ExecRPC >>>>>>>>>>>>>>>>>> In >>>>>>>>>>>>>>>>>> vo >>>>>>>>>>>>>>>>>> ker.ja >>>>>>>>>>>>>>>>>> va:79) >>>>>>>>>>>>>>>>>> at $Proxy3.getSum(Unknown Source) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>> org.apache.hadoop.hbase.client.coprocessor.AggregationClient$4.ca >>>>>>>>>>>> ll >>>>>>>>>>>> (A >>>>>>>>>>>>>>>>> ggregationClient.java:233) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>> org.apache.hadoop.hbase.client.coprocessor.AggregationClient$4.ca >>>>>>>>>>>> ll >>>>>>>>>>>> (A >>>>>>>>>>>>>>>>> ggregationClient.java:230) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>> org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImpl >>>>>>>>>>>> em >>>>>>>>>>>> en >>>>>>>>>>>>>>>>> tation$4.call(HConnectionManager.java:1453) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> java.util.concurrent.FutureTask$Sync.innerRun(FutureTask. >>>>>>>>>>>>>>>>>> ja >>>>>>>>>>>>>>>>>> va >>>>>>>>>>>>>>>>>> :303) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> java.util.concurrent.FutureTask.run(FutureTask.java:138) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPool >>>>>>>>>>>> Ex >>>>>>>>>>>> ec >>>>>>>>>>>>>>>>> utor.java:886) >>>>>>>>>>>>>>>>>> at >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExec >>>>>>>>>>>> ut >>>>>>>>>>>> or >>>>>>>>>>>>>>>>> .java:908) >>>>>>>>>>>>>>>>>> at java.lang.Thread.run(Thread.java:662) >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> The source for our class is: >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> import static org.junit.Assert.assertEquals; >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> import java.io.IOException; >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> import org.apache.hadoop.conf.Configuration; >>>>>>>>>>>>>>>>>> import org.apache.hadoop.hbase.HBaseConfiguration; >>>>>>>>>>>>>>>>>> import org.apache.hadoop.hbase.HBaseTestingUtility; >>>>>>>>>>>>>>>>>> import org.apache.hadoop.hbase.HConstants; >>>>>>>>>>>>>>>>>> import org.apache.hadoop.hbase.HTableDescriptor; >>>>>>>>>>>>>>>>>> import org.apache.hadoop.hbase.client.HTable; >>>>>>>>>>>>>>>>>> import org.apache.hadoop.hbase.client.Put; >>>>>>>>>>>>>>>>>> import org.apache.hadoop.hbase.client.Scan; >>>>>>>>>>>>>>>>>> import >>>>>>>>>>>>>>>>>> org.apache.hadoop.hbase.client.coprocessor.AggregationCli >>>>>>>>>>>>>>>>>> en >>>>>>>>>>>>>>>>>> t; >>>>>>>>>>>>>>>>>> import >>>>>>>>>>>>>>>>>> org.apache.hadoop.hbase.client.coprocessor.LongColumnInte >>>>>>>>>>>>>>>>>> rp re ter; import org.apache.hadoop.hbase.util.Bytes; >>>>>>>>>>>>>>>>>> import org.apache.hadoop.util.GenericOptionsParser; >>>>>>>>>>>>>>>>>> import >>>>>>>>>>>>>>>>>> org.apache.hadoop.hbase.coprocessor.ColumnInterpreter; >>>>>>>>>>>>>>>>>> import >>>>>>>>>>>>>>>>>> org.apache.hadoop.hbase.coprocessor.CoprocessorHost; >>>>>>>>>>>>>>>>>> import org.junit.Test; >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> public class EDRPAggregator { >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> // private static final byte[] EDRP_FAMILY = >>>>>>>>>>>>>>>>>> Bytes.toBytes("EDRP"); >>>>>>>>>>>>>>>>>> // private static final byte[] EDRP_QUALIFIER = >>>>>>>>>>>>>>>>>> Bytes.toBytes("advanceKWh"); >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> private static byte[] ROW = Bytes.toBytes("testRow"); >>>>>>>>>>>>>>>>>> private static final int ROWSIZE = 20; >>>>>>>>>>>>>>>>>> private static byte[][] ROWS = makeN(ROW, ROWSIZE); >>>>>>>>>>>>>>>>>> private static final byte[] TEST_QUALIFIER = >>>>>>>>>>>>>>>>>> Bytes.toBytes("TestQualifier"); >>>>>>>>>>>>>>>>>> private static final byte[] TEST_MULTI_CQ = >>>>>>>>>>>>>>>>>> Bytes.toBytes("TestMultiCQ"); >>>>>>>>>>>>>>>>>> private static final int rowSeperator1 = 5; >>>>>>>>>>>>>>>>>> private static final int rowSeperator2 = 12; >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> public static void >>>>>>>>>>>>>>>>>> testSumWithValidRange(Configuration >>>>>>>>>>>>>>>>>> conf, >>>>>>>>>>>>>>>>>> String[] otherArgs) throws Throwable { >>>>>>>>>>>>>>>>>> byte[] EDRP_TABLE = Bytes.toBytes(otherArgs[1]); >>>>>>>>>>>>>>>>>> byte[] EDRP_FAMILY = >>>>>>>>>>>>>>>>>> Bytes.toBytes(otherArgs[2]); >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> conf.set(CoprocessorHost.REGION_COPROCESSOR_CONF_KEY, >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>> "org.apache.hadoop.hbase.coprocessor.AggregateImplementation" >>>>>>>>>>>>>>>>>> ); >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> // Utility.CreateHBaseTable(conf, >>>>>>>>>>>>>>>>>> otherArgs[1], >>>>>>>>>>>>>>>>> otherArgs[2], >>>>>>>>>>>>>>>>>> true); >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> HBaseTestingUtility util = new >>>>>>>>>>>>>>>>>> HBaseTestingUtility(); >>>>>>>>>>>>>>>>>> HTable table = util.createTable(EDRP_TABLE, >>>>>>>>>>>>>>>>>> EDRP_FAMILY); >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> AggregationClient aClient = new >>>>>>>>>>>>>>>>>> AggregationClient(conf); >>>>>>>>>>>>>>>>>> Scan scan = new Scan(); >>>>>>>>>>>>>>>>>> scan.addColumn(EDRP_TABLE, EDRP_FAMILY); >>>>>>>>>>>>>>>>>> final ColumnInterpreter<Long, Long> ci = new >>>>>>>>>>>>>>>>>> LongColumnInterpreter(); >>>>>>>>>>>>>>>>>> long sum = >>>>>>>>>>>>>>>>>> aClient.sum(Bytes.toBytes(otherArgs[0]), >>>>>>>>>>>>>>>>>> ci, >>>>>>>>>>>>>>>>> scan); >>>>>>>>>>>>>>>>>> System.out.println(sum); >>>>>>>>>>>>>>>>>> } >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> /** >>>>>>>>>>>>>>>>>> * Main entry point. >>>>>>>>>>>>>>>>>> * >>>>>>>>>>>>>>>>>> * @param argsThe >>>>>>>>>>>>>>>>>> * command line parameters. >>>>>>>>>>>>>>>>>> * @throws Exception >>>>>>>>>>>>>>>>>> * When running the job fails. >>>>>>>>>>>>>>>>>> */ >>>>>>>>>>>>>>>>>> public static void main(String[] args) throws >>>>>>>>>>>>>>>>>> Exception { >>>>>>>>>>>>>>>>>> Configuration conf = >>>>>>>>>>>>>>>>>> HBaseConfiguration.create(); >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> String[] otherArgs = new >>>>>>>>>>>>>>>>>> GenericOptionsParser(conf, >>>>>>>>>>>>>>>>>> args) >>>>>>>>>>>>>>>>>> .getRemainingArgs(); >>>>>>>>>>>>>>>>>> if (otherArgs.length != 3) { >>>>>>>>>>>>>>>>>> System.err >>>>>>>>>>>>>>>>>> .println("Wrong number of >>>>>>>>>>>>>>>>>> arguments: " + otherArgs.length); >>>>>>>>>>>>>>>>>> System.err.println("Usage: " + >>>>>>>>>>>>>>>>>> "<tablename> <colfam> <qualifier>"); >>>>>>>>>>>>>>>>>> System.exit(-1); >>>>>>>>>>>>>>>>>> } >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> try { >>>>>>>>>>>>>>>>>> testSumWithValidRange(conf, otherArgs); >>>>>>>>>>>>>>>>>> } catch (Throwable e) { >>>>>>>>>>>>>>>>>> e.printStackTrace(); >>>>>>>>>>>>>>>>>> } >>>>>>>>>>>>>>>>>> } >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> /** >>>>>>>>>>>>>>>>>> * an infrastructure method to prepare rows for the >>>>>>>>>> testtable. >>>>>>>>>>>>>>>>>> * >>>>>>>>>>>>>>>>>> * @param base >>>>>>>>>>>>>>>>>> * @param n >>>>>>>>>>>>>>>>>> * @return >>>>>>>>>>>>>>>>>> */ >>>>>>>>>>>>>>>>>> private static byte[][] makeN(byte[] base, int n) { >>>>>>>>>>>>>>>>>> byte[][] ret = new byte[n][]; >>>>>>>>>>>>>>>>>> for (int i = 0; i < n; i++) { >>>>>>>>>>>>>>>>>> ret[i] = Bytes.add(base, >>>>>>>>>>>>>>>>>> Bytes.toBytes(i)); >>>>>>>>>>>>>>>>>> } >>>>>>>>>>>>>>>>>> return ret; >>>>>>>>>>>>>>>>>> } >>>>>>>>>>>>>>>>>> } >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Please can you suggest what might be causing and/or how >>>>>>>>>>>>>>>>>> we might fix this UnknownProtocolException? >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Also, does anyone have any working examples using the >>>>>>>>>>>>>>>>>> aggregation >>>>>>>>>>>>>>>>> protocol >>>>>>>>>>>>>>>>>> other than the test code? >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Thanks, >>>>>>>>>>>>>>>>>> Tom >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>> >>>>>> >>>> >>>> >>
