简体   繁体   English

通过HBase中的Java API创建表时出错

[英]Error while creating table through java api in HBase

I am trying to create a table in HBase through JAVA api. 我正在尝试通过JAVA api在HBase中创建一个表。 My code is as follows: 我的代码如下:

Configuration config = HBaseConfiguration.create();
config.set("hbase.zookeeper.quorum", "127.0.0.1");
config.set("hbase.client.retries.number", "1");
config.set("zookeeper.session.timeout", "40000");
config.set("zookeeper.recovery.retry", "1");

System.out.println("HBASE is running");
Connection conn = ConnectionFactory.createConnection(config);
Table table = conn.getTable(TableName.valueOf("recommendations"));
HTableDescriptor tableDescriptor = table.getTableDescriptor();
tableDescriptor.addFamily(new HColumnDescriptor("personal"));
tableDescriptor.addFamily(new HColumnDescriptor("professional"));
Admin admin = conn.getAdmin();
// Execute the table through admin
admin.createTable(tableDescriptor);

The error is as below: 错误如下:

Caused by: 造成原因:

org.apache.hadoop.hbase.MasterNotRunningException:
  com.google.protobuf.ServiceException:
  org.apache.hadoop.hbase.DoNotRetryIOException:
  java.lang.NoSuchMethodError: org.apache.hadoop.net.NetUtils.getInputStream(Ljava/net/Socket;)Lorg/apache/hadoop/net/SocketInputWrapper;
at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation$StubMaker.makeStub(ConnectionManager.java:1485)
at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation$MasterServiceStubMaker.makeStub(ConnectionManager.java:1505)
at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.getKeepAliveMasterService(ConnectionManager.java:1711)
at org.apache.hadoop.hbase.client.MasterCallable.prepare(MasterCallable.java:38)
at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithRetries(RpcRetryingCaller.java:124)

I am able to create a table through the hbase shell. 我可以通过hbase shell创建一个表。 Any input will be appreciated. 任何输入将不胜感激。

It seems HBase in ConnectionManager is trying to use the method SocketInputWrapper NetUtils#getInputStream(Socket) from Hadoop, but such method is not found. 似乎ConnectionManager中的HBase试图使用Hadoop中的SocketInputWrapper NetUtils#getInputStream(Socket)方法,但未找到这种方法。

So: the class exists, but does not have that method. 因此:该类存在,但没有该方法。

Much probably you are using some classes of HBase for Hadoop 1 and using it with Hadoop 2, or viceversa, or some uncompatible versions. 很可能您正在将某些HBase类用于Hadoop 1,并将其与Hadoop 2一起使用,反之亦然,或某些不兼容的版本。

What versions of Hadoop and HBase are you using? 您正在使用什么版本的Hadoop和HBase? What versions of Hadoop and HBase are using HBase shell? 哪些版本的Hadoop和HBase使用HBase Shell?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM