我已在本地系统上配置了 Apache hbase 0.94.14。我必须通过 java API 与 hbase 进行通信。我编写了简单的代码来在现有 hbase 表中添加新的列族。
Java 类代码
// Instantiating configuration class.
Configuration conf = HBaseConfiguration.create();
// Instantiating HBaseAdmin class.
HBaseAdmin admin = new HBaseAdmin(conf);
// Instantiating columnDescriptor class
HColumnDescriptor columnDescriptor =new
HColumnDescriptor("contactDetails");
// Adding column family
admin.addColumn("local_webpage", columnDescriptor);
System.out.println("column added");
当我运行此代码时,发生以下异常。
16/08/11 14:07:37 INFO zookeeper.ClientCnxn: EventThread shut down
Exception in thread "main" org.apache.hadoop.hbase.TableNotDisabledException: org.apache.hadoop.hbase.TableNotDisabledException: local_webpage
at org.apache.hadoop.hbase.master.HMaster.checkTableModifiable(HMaster.java:1525)
at org.apache.hadoop.hbase.master.handler.TableEventHandler.<init>(TableEventHandler.java:72)
at org.apache.hadoop.hbase.master.handler.TableAddFamilyHandler.<init>(TableAddFamilyHandler.java:41)
at org.apache.hadoop.hbase.master.HMaster.addColumn(HMaster.java:1402)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.apache.hadoop.hbase.ipc.WritableRpcEngine$Server.call(WritableRpcEngine.java:323)
at org.apache.hadoop.hbase.ipc.HBaseServer$Handler.run(HBaseServer.java:1426)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
at org.apache.hadoop.hbase.RemoteExceptionHandler.decodeRemoteException(RemoteExceptionHandler.java:96)
at org.apache.hadoop.hbase.client.HBaseAdmin.addColumn(HBaseAdmin.java:1071)
at org.apache.hadoop.hbase.client.HBaseAdmin.addColumn(HBaseAdmin.java:1054)
at hbaseclient.HbaseClient.main(HbaseClient.java:44)
/home/user/.cache/netbeans/8.1/executor-snippets/run.xml:53: Java returned: 1
如果我通过 hbase shell 添加列族,则不会出现问题。哪里有问题。正在通过 Apache Nutch 2.3.1 创建表
最佳答案
您必须先禁用该表,然后才能向其中添加族。
HBaseAdmin#disableTable()...
我认为这是您解决异常的唯一问题。
关于java - Hbase Java API TableNotDisabledException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38892091/