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)
>
>
>