在hbase中处理自定义ColumnInterpreter的正确方法

时间:2012-09-05 12:55:12

标签: hbase aggregation

我有一个类扩展ColumnInterpreter,用于处理BigDecimal而不是Long,hbase提供了开箱即用的功能。

现在我在想,这纯粹是客户端功能,所以我想,我必须做的就是将新的ColumnInterpreter实例化为

final ColumnInterpreter<Long, Long> ci = new BigDecimalColumnInterpreter();

我在想,这只会有效,因为我没有改变聚合协议,因此我不需要创建新的端点。

然而,当我按如下方式调用时会发生什么:

AggregationClient ag = new AggregationClient(config);
avg = ag.avg(Bytes.toBytes(tableName), ci, scan);

将发生以下情况:

  

12/09/05 13:58:52警告   client.HConnectionManager $ HConnectionImplementation:执行错误   for row java.util.concurrent.ExecutionException:   org.apache.hadoop.hbase.client.RetriesExhaustedException:失败   尝试= 10,例外:Wed Sep 05 13:58:12 CEST 2012,   org.apache.hadoop.hbase.ipc.ExecRPCInvoker$1@14004204,   java.io.IOException:IPC服务器无法读取调用参数:错误   在readFields Wed Sep 05 13:58:14 CEST 2012,   org.apache.hadoop.hbase.ipc.ExecRPCInvoker$1@14004204,   java.io.IOException:IPC服务器无法读取调用参数:错误   在readFields Wed Sep 05 13:58:15 CEST 2012,   org.apache.hadoop.hbase.ipc.ExecRPCInvoker$1@14004204,   java.io.IOException:IPC服务器无法读取调用参数:错误   在readFields Wed Sep 05 13:58:16 CEST 2012,   org.apache.hadoop.hbase.ipc.ExecRPCInvoker$1@14004204,   java.io.IOException:IPC服务器无法读取调用参数:错误   在readFields Wed Sep 05 13:58:18 CEST 2012,   org.apache.hadoop.hbase.ipc.ExecRPCInvoker$1@14004204,   java.io.IOException:IPC服务器无法读取调用参数:错误   在readFields Wed Sep 05 13:58:20 CEST 2012,   org.apache.hadoop.hbase.ipc.ExecRPCInvoker$1@14004204,   java.io.IOException:IPC服务器无法读取调用参数:错误   在readFields Wed Sep 05 13:58:24 CEST 2012,   org.apache.hadoop.hbase.ipc.ExecRPCInvoker$1@14004204,   java.io.IOException:IPC服务器无法读取调用参数:错误   在readFields Wed Sep 05 13:58:28 CEST 2012,   org.apache.hadoop.hbase.ipc.ExecRPCInvoker$1@14004204,   java.io.IOException:IPC服务器无法读取调用参数:错误   在readFields Wed Sep 05 13:58:36 CEST 2012,   org.apache.hadoop.hbase.ipc.ExecRPCInvoker$1@14004204,   java.io.IOException:IPC服务器无法读取调用参数:错误   在readFields Wed Sep 05 13:58:52 CEST 2012,   org.apache.hadoop.hbase.ipc.ExecRPCInvoker$1@14004204,   java.io.IOException:IPC服务器无法读取调用参数:错误   在readFields中

     

at java.util.concurrent.FutureTask $ Sync.innerGet(FutureTask.java:252)     在java.util.concurrent.FutureTask.get(FutureTask.java:111)at   org.apache.hadoop.hbase.client.HConnectionManager $ HConnectionImplementation.processExecs(HConnectionManager.java:1434)     在   org.apache.hadoop.hbase.client.HTable.coprocessorExec(HTable.java:1263)     在   org.apache.hadoop.hbase.client.HTable.coprocessorExec(HTable.java:1243)     在   helpers.HbaseReaderBigDecimal.getWeekAvgSCAN(HbaseReaderBigDecimal.java:309)     at helpers.HbaseReaderBigDecimal.main(HbaseReaderBigDecimal.java:75)   引起:org.apache.hadoop.hbase.client.RetriesExhaustedException:   尝试= 10后失败,例外:Wed Sep 05 13:58:12 CEST 2012,   org.apache.hadoop.hbase.ipc.ExecRPCInvoker$1@14004204,   java.io.IOException:IPC服务器无法读取调用参数:错误   在readFields Wed Sep 05 13:58:14 CEST 2012,   org.apache.hadoop.hbase.ipc.ExecRPCInvoker$1@14004204,   java.io.IOException:IPC服务器无法读取调用参数:错误   在readFields Wed Sep 05 13:58:15 CEST 2012,   org.apache.hadoop.hbase.ipc.ExecRPCInvoker$1@14004204,   java.io.IOException:IPC服务器无法读取调用参数:错误   在readFields Wed Sep 05 13:58:16 CEST 2012,   org.apache.hadoop.hbase.ipc.ExecRPCInvoker$1@14004204,   java.io.IOException:IPC服务器无法读取调用参数:错误   在readFields Wed Sep 05 13:58:18 CEST 2012,   org.apache.hadoop.hbase.ipc.ExecRPCInvoker$1@14004204,   java.io.IOException:IPC服务器无法读取调用参数:错误   在readFields Wed Sep 05 13:58:20 CEST 2012,   org.apache.hadoop.hbase.ipc.ExecRPCInvoker$1@14004204,   java.io.IOException:IPC服务器无法读取调用参数:错误   在readFields Wed Sep 05 13:58:24 CEST 2012,   org.apache.hadoop.hbase.ipc.ExecRPCInvoker$1@14004204,   java.io.IOException:IPC服务器无法读取调用参数:错误   在readFields Wed Sep 05 13:58:28 CEST 2012,   org.apache.hadoop.hbase.ipc.ExecRPCInvoker$1@14004204,   java.io.IOException:IPC服务器无法读取调用参数:错误   在readFields Wed Sep 05 13:58:36 CEST 2012,   org.apache.hadoop.hbase.ipc.ExecRPCInvoker$1@14004204,   java.io.IOException:IPC服务器无法读取调用参数:错误   在readFields Wed Sep 05 13:58:52 CEST 2012,   org.apache.hadoop.hbase.ipc.ExecRPCInvoker$1@14004204,   java.io.IOException:IPC服务器无法读取调用参数:错误   在readFields中

     

在   org.apache.hadoop.hbase.client.ServerCallable.withRetries(ServerCallable.java:183)     在   org.apache.hadoop.hbase.ipc.ExecRPCInvoker.invoke(ExecRPCInvoker.java:79)     at $ Proxy7.getAvg(Unknown Source)at   helpers.HbaseReaderBigDecimal $ 1.call(HbaseReaderBigDecimal.java:313)     at helpers.HbaseReaderBigDecimal $ 1.call(HbaseReaderBigDecimal.java:1)     在   org.apache.hadoop.hbase.client.HConnectionManager $ HConnectionImplementation $ 4.call(HConnectionManager.java:1422)     at java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:334)     在java.util.concurrent.FutureTask.run(FutureTask.java:166)at   java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)     在   java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:603)     在java.lang.Thread.run(Thread.java:679)   org.apache.hadoop.hbase.client.RetriesExhaustedException:失败   尝试= 10,例外:Wed Sep 05 13:58:12 CEST 2012,   org.apache.hadoop.hbase.ipc.ExecRPCInvoker$1@14004204,   java.io.IOException:IPC服务器无法读取调用参数:错误   在readFields Wed Sep 05 13:58:14 CEST 2012,   org.apache.hadoop.hbase.ipc.ExecRPCInvoker$1@14004204,   java.io.IOException:IPC服务器无法读取调用参数:错误   在readFields Wed Sep 05 13:58:15 CEST 2012,   org.apache.hadoop.hbase.ipc.ExecRPCInvoker$1@14004204,   java.io.IOException:IPC服务器无法读取调用参数:错误   在readFields Wed Sep 05 13:58:16 CEST 2012,   org.apache.hadoop.hbase.ipc.ExecRPCInvoker$1@14004204,   java.io.IOException:IPC服务器无法读取调用参数:错误   在readFields Wed Sep 05 13:58:18 CEST 2012,   org.apache.hadoop.hbase.ipc.ExecRPCInvoker$1@14004204,   java.io.IOException:IPC服务器无法读取调用参数:错误   在readFields Wed Sep 05 13:58:20 CEST 2012,   org.apache.hadoop.hbase.ipc.ExecRPCInvoker$1@14004204,   java.io.IOException:IPC服务器无法读取调用参数:错误   在readFields Wed Sep 05 13:58:24 CEST 2012,   org.apache.hadoop.hbase.ipc.ExecRPCInvoker$1@14004204,   java.io.IOException:IPC服务器无法读取调用参数:错误   在readFields Wed Sep 05 13:58:28 CEST 2012,   org.apache.hadoop.hbase.ipc.ExecRPCInvoker$1@14004204,   java.io.IOException:IPC服务器无法读取调用参数:错误   在readFields Wed Sep 05 13:58:36 CEST 2012,   org.apache.hadoop.hbase.ipc.ExecRPCInvoker$1@14004204,   java.io.IOException:IPC服务器无法读取调用参数:错误   在readFields Wed Sep 05 13:58:52 CEST 2012,   org.apache.hadoop.hbase.ipc.ExecRPCInvoker$1@14004204,   java.io.IOException:IPC服务器无法读取调用参数:错误   在readFields中

我的配置如下:

config = HBaseConfiguration.create();
config.set(zookeeper, ip);
config.setLong("hbase.client.scanner.caching", 1000);
config.set("hbase.coprocessor.region.classes", "org.apache.hadoop.hbase.coprocessor.AggregateImplementation");

有没有人对此有所了解?

1 个答案:

答案 0 :(得分:4)

您应该在服务器端部署包含您自己的ColumnInterpreter的jar文件。服务器上内置的HBase EndPoint无法找到ColumnInterpreter。