伙计们,我想在hbase中添加一个区域观察者,代码如下:
public class TestAddColumnBaseRegionObserver extends BaseRegionObserver{
@Override
public void prePut(ObserverContext<RegionCoprocessorEnvironment> e, Put put, WALEdit edit, Durability durability) throws IOException {
putUUIDColumnIfMissing(e, put, edit, durability);
}
private void putUUIDColumnIfMissing(ObserverContext<RegionCoprocessorEnvironment> e, Put put, WALEdit edit, Durability durability) {
try {
if(!put.has(Bytes.toBytes("cf1"), Bytes.toBytes("uuid"))) {
String uuid = put.toString(); // md5
put.add(Bytes.toBytes("cf1"), Bytes.toBytes("uuid"), Bytes.toBytes(uuid));
}
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
因此,如果表中没有“cf1:uuid”列,那么此代码将向表中添加一个新列“uuid”。
当我在hbase shell中手动添加.jar时,它可以工作,但是当我用另一种方法:修改hbase-site.xml时,通过将hbase.coprocessor.region.classes修改为testaddcolumnbaseregionobserver类
<property>
<name>hbase.coprocessor.region.classes</name>
<value>com.hbase.hook.TestAddColumnBaseRegionObserver</value>
</property>
然后重新启动hbase,我在登录hbase shell和tred执行hbase命令时报告了一个错误
ERROR: org.apache.hadoop.hbase.PleaseHoldException: Master is initializing at org.apache.hadoop.hbase.master.HMaster.checkInitialized(HMaster.java:2177) at org.apache.hadoop.hbase.master.HMaster.checkNamespaceManagerReady(HMaster.java:2182) at org.apache.hadoop.hbase.master.HMaster.ensureNamespaceExists(HMaster.java:2375) at org.apache.hadoop.hbase.master.HMaster.createTable(HMaster.java:1444) at org.apache.hadoop.hbase.master.MasterRpcServices.createTable(MasterRpcServices.java:422) at org.apache.hadoop.hbase.protobuf.generated.MasterProtos$MasterService$2.callBlockingMethod(MasterProtos.java:48502) at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:2114) at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:101) at org.apache.hadoop.hbase.ipc.RpcExecutor.consumerLoop(RpcExecutor.java:130) at org.apache.hadoop.hbase.ipc.RpcExecutor$1.run(RpcExecutor.java:107) at java.lang.Thread.run(Thread.java:745)
以前有人遇到过类似的问题吗?或者你知道是什么导致这个问题吗?
暂无答案!
目前还没有任何答案,快来回答吧!