You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@hbase.apache.org by "Gupta, Kunal IN BLR STS" <ku...@siemens.com> on 2015/05/08 08:27:11 UTC
Not able to Load EndPoint Coprocessor
Hi,
I want to implement EndPoint Coprocessor. From the link (http://www.3pillarglobal.com/insights/hbase-coprocessors) I created my own files as specified in the link. In the link they worked on Sum but I want to have Average along with Filters so I did according to what they have specified in the link and loaded coprocessor in static way. But when I restart the HBase then in web status of master and regionserver my coprocessor class cannot be seen.
When I ran client code then I got an error of null pointer exception
My client code is give below
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
package coprocessor;
import java.io.IOException;
import java.util.Map;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.HConnection;
import org.apache.hadoop.hbase.client.HConnectionManager;
import org.apache.hadoop.hbase.client.HTableInterface;
import org.apache.hadoop.hbase.client.coprocessor.Batch;
import org.apache.hadoop.hbase.ipc.BlockingRpcCallback;
import com.google.protobuf.ServiceException;
import coprocessor.generated.Avg.AvgRequest;
import coprocessor.generated.Avg.AvgResponse;
import coprocessor.generated.Avg.AvgService;
public class TagAggregate {
public static void main(String args[]) throws IOException {
Configuration conf = HBaseConfiguration.create();
HConnection connection = HConnectionManager.createConnection(conf);
HTableInterface table = connection.getTable("TLG_2");
final AvgRequest request = AvgRequest.newBuilder()
.setFamily("TagsOnDate").setColumn("ValueFloat").build();
try {
Map<byte[], Long> results = table.coprocessorService(
AvgService.class, null, null,
new Batch.Call<AvgService, Long>() {
@Override
public Long call(AvgService aggregate)
throws IOException {
BlockingRpcCallback rpcCallback = new BlockingRpcCallback();
aggregate.getAvg(null, request, rpcCallback);
System.out.println("rpcCallback.get() value is " +rpcCallback.get());
AvgResponse response =(AvgResponse) rpcCallback.get();
System.out.println("response.hasAvg():" +response.hasAvg());
return (long) (response.hasAvg() ? response.getAvg() : 0L);
}
});
for (Long avg : results.values()) {
System.out.println("Avg = " + avg);
}
} catch (ServiceException e) {
e.printStackTrace();
} catch (Throwable e) {
e.printStackTrace();
}
}
}
Error I got after running client code
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
rpcCallback.get() value is null
java.lang.NullPointerException
at coprocessor.TagAggregate$1.call(TagAggregate.java:43)
at coprocessor.TagAggregate$1.call(TagAggregate.java:1)
at org.apache.hadoop.hbase.client.HTable$17.call(HTable.java:1629)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Re: Not able to Load EndPoint Coprocessor
Posted by Ted Yu <yu...@gmail.com>.
class AvgService is not shown below.
Which line is #43 in TagAggregate.java ?
Please take a look at the following classes from hbase:
hbase-server//src/main/java/org/apache/hadoop/hbase/coprocessor/AggregateImplementation.java
hbase-server//src/test/java/org/apache/hadoop/hbase/coprocessor/TestAggregateProtocol.java
Cheers
On Thu, May 7, 2015 at 11:27 PM, Gupta, Kunal IN BLR STS <
kunal.gupta@siemens.com> wrote:
> Hi,
>
> I want to implement EndPoint Coprocessor. From the link (
> http://www.3pillarglobal.com/insights/hbase-coprocessors) I created my
> own files as specified in the link. In the link they worked on Sum but I
> want to have Average along with Filters so I did according to what they
> have specified in the link and loaded coprocessor in static way. But when I
> restart the HBase then in web status of master and regionserver my
> coprocessor class cannot be seen.
>
> When I ran client code then I got an error of null pointer exception
>
> My client code is give below
>
> ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> package coprocessor;
>
> import java.io.IOException;
> import java.util.Map;
>
> import org.apache.hadoop.conf.Configuration;
> import org.apache.hadoop.hbase.HBaseConfiguration;
> import org.apache.hadoop.hbase.client.HConnection;
> import org.apache.hadoop.hbase.client.HConnectionManager;
> import org.apache.hadoop.hbase.client.HTableInterface;
> import org.apache.hadoop.hbase.client.coprocessor.Batch;
> import org.apache.hadoop.hbase.ipc.BlockingRpcCallback;
>
> import com.google.protobuf.ServiceException;
>
> import coprocessor.generated.Avg.AvgRequest;
> import coprocessor.generated.Avg.AvgResponse;
> import coprocessor.generated.Avg.AvgService;
>
> public class TagAggregate {
> public static void main(String args[]) throws IOException {
> Configuration conf = HBaseConfiguration.create();
> HConnection connection =
> HConnectionManager.createConnection(conf);
> HTableInterface table = connection.getTable("TLG_2");
> final AvgRequest request = AvgRequest.newBuilder()
>
> .setFamily("TagsOnDate").setColumn("ValueFloat").build();
>
> try {
> Map<byte[], Long> results =
> table.coprocessorService(
> AvgService.class, null, null,
> new Batch.Call<AvgService, Long>()
> {
> @Override
> public Long
> call(AvgService aggregate)
> throws
> IOException {
>
>
> BlockingRpcCallback rpcCallback = new BlockingRpcCallback();
>
>
> aggregate.getAvg(null, request, rpcCallback);
>
>
> System.out.println("rpcCallback.get() value is " +rpcCallback.get());
> AvgResponse
> response =(AvgResponse) rpcCallback.get();
>
> System.out.println("response.hasAvg():" +response.hasAvg());
> return (long)
> (response.hasAvg() ? response.getAvg() : 0L);
> }
> });
>
> for (Long avg : results.values()) {
> System.out.println("Avg = " + avg);
> }
> } catch (ServiceException e) {
> e.printStackTrace();
> } catch (Throwable e) {
> e.printStackTrace();
> }
> }
> }
>
> Error I got after running client code
>
>
> -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> rpcCallback.get() value is null
> java.lang.NullPointerException
> at coprocessor.TagAggregate$1.call(TagAggregate.java:43)
> at coprocessor.TagAggregate$1.call(TagAggregate.java:1)
> at org.apache.hadoop.hbase.client.HTable$17.call(HTable.java:1629)
> at java.util.concurrent.FutureTask.run(FutureTask.java:266)
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
> at java.lang.Thread.run(Thread.java:745)
>
>
>