我有一个类扩展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");
有没有人对此有所了解?
答案 0 :(得分:4)
您应该在服务器端部署包含您自己的ColumnInterpreter的jar文件。服务器上内置的HBase EndPoint无法找到ColumnInterpreter。