无法使用JAVA创建表和列表到远程HBase

时间:2015-10-06 05:59:34

标签: java hadoop hbase

尝试仅远程连接HBase,相同的代码在本地工作:

这是程序:

public static void main(String[] args) throws IOException {
    HBaseConfiguration hconfig = new HBaseConfiguration(new Configuration());
    hconfig.set("hbase.zookeeper.quorum", "192.168.*.***");
    hconfig.set("hbase.master", "192.168.*.***:60000");
    hconfig.set("hbase.zookeeper.property.clientPort","2181");
    HTableDescriptor htable = new HTableDescriptor("User"); 
    htable.addFamily( new HColumnDescriptor("Id"));
    htable.addFamily( new HColumnDescriptor("Name"));
    System.out.println( "Connecting..." );
    HBaseAdmin hbase_admin = new HBaseAdmin( hconfig );
    System.out.println( "Creating Table..." );
    hbase_admin.createTable( htable );
    System.out.println("Done!");
}

此行抛出错误后:

HBaseAdmin hbase_admin = new HBaseAdmin( hconfig );

错误:

15/10/06 11:22:05 INFO zookeeper.ClientCnxn: Session establishment complete on server quickstart.cloudera/192.168.*.***:2181, sessionid = 0x1503670c5dc00b5, negotiated timeout = 60000
Creating Table...

15/10/06 11:23:02 INFO client.RpcRetryingCaller: Call exception, tries=10, retries=35, started=57048 ms ago, cancelled=false, msg=

15/10/06 11:23:23 INFO client.RpcRetryingCaller: Call exception, tries=11, retries=35, started=78252 ms ago, cancelled=false, msg=

这些是我的Jar文件:

commons-configuration-1.6.jar
commons-lang-2.5.jar
commons-logging-1.1.1.jar
hadoop-core-1.0.0.jar
hadoop-common-1.0.0.jar
hbase-server-1.0.0-cdh5.4.2.jar
hbase-client-1.0.0-cdh5.4.2.jar
hbase-0.92.0.jar log4j-1.2.16.jar
slf4j-api-1.5.8.jar
slf4j-log4j12-1.5.8.jar
zookeeper-3.4.2.jar 

并包含位于hadoop路径/usr/lib/hbase/lib/

中的所有jar文件

我已将hbase-site.xml文件复制到我的项目中,并将远程ip地址也添加到etc / host文件中。

我遇到问题,同时在远程hbase中创建一个新表并尝试使用java客户端从hbase获取表列表!

但是使用相同的jar文件,除了创建表和列表之外,我还可以执行其他更多操作,比如Get,Put和其他几个操作!

请帮助我。

3 个答案:

答案 0 :(得分:1)

在pom.xml文件中添加以下依赖项

<dependency>
     <groupId>org.apache.hbase</groupId>
     <artifactId>hbase-client<artifactId>
     <version>1.1.0.1</version>
<dependency>

不是单独设置hbase配置详细信息,而是添加 hbase-site.xml &amp; core-site.xml 作为Configuration对象的资源并使用它

Configuration config = HBaseConfiguration.create();
config.addResource(new Path("/etc/hbase/conf/hbase-site.xml"));
config.addResource(new Path("/etc/hadoop/conf/core-site.xml"));

配置对象后,创建Connection并获取Admin对象

Connection connection = ConnectionFactory.createConnection(config);
Admin admin = connection.getAdmin();

然后,您可以使用以下代码段创建HBase表以及列族。

if (!admin.isTableAvailable(TableName.valueOf("user"))) {
    HTableDescriptor hbaseTable = new HTableDescriptor(TableName.valueOf("user"));
    hbaseTable.addFamily(new HColumnDescriptor("id"));
    hbaseTable.addFamily(new HColumnDescriptor("name"));
    admin.createTable(hbaseTable);
}

有关详细信息refer this

对于工作代码示例,您可以refer this

答案 1 :(得分:0)

由于你能够执行put和get,所以它不应该是一个jar问题。您可以尝试使用值&#34; / hbase-unsecure&#34;添加此属性zookeeper.znode.parent吗?在hbase配置中。它的根znode将包含HBase创建/使用的所有znode。在zookeeper客户端jar中,此值为&#34; / hbase&#34;。将它与config xml文件进行比较。您可以查看here

答案 2 :(得分:0)

我有类似的问题。我通过打开HBase节点中的以下端口来修复它:

  1. 60000
  2. 60010
  3. 60020
  4. 9090
  5. 在Centos 7中:

    sudo firewall-cmd --zone=public --add-port=60000/tcp --permanent
    sudo firewall-cmd --zone=public --add-port=60010/tcp --permanent
    sudo firewall-cmd --zone=public --add-port=60020/tcp --permanent
    sudo firewall-cmd --zone=public --add-port=9090/tcp --permanent
    sudo firewall-cmd --reload
    

    更多信息here