Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hbase Java API-createTable方法可以工作,但无法完成_Java_Api_Hbase_Apache Zookeeper - Fatal编程技术网

Hbase Java API-createTable方法可以工作,但无法完成

Hbase Java API-createTable方法可以工作,但无法完成,java,api,hbase,apache-zookeeper,Java,Api,Hbase,Apache Zookeeper,我目前正在尝试使用JavaAPI连接到hbase并创建一个新表。它看起来确实有效,但是admin.createTable()方法没有完成。所以“完成!”永远不会打印,程序也永远不会结束。请参阅下面的代码 Configuration config = HBaseConfiguration.create(); config.set("hbase.zookeeper.quorum", "xxx.xxx.xxx.xxx"); config.set("hba

我目前正在尝试使用JavaAPI连接到hbase并创建一个新表。它看起来确实有效,但是admin.createTable()方法没有完成。所以“完成!”永远不会打印,程序也永远不会结束。请参阅下面的代码

        Configuration config = HBaseConfiguration.create();
        config.set("hbase.zookeeper.quorum", "xxx.xxx.xxx.xxx");
        config.set("hbase.zookeeper.property.clientport", "2181");

        String tableName = "actors";
        Connection connection;
        try {
            connection = ConnectionFactory.createConnection(config);
            Admin admin = connection.getAdmin();
            Table table = connection.getTable(TableName.valueOf(tableName));
            HTableDescriptor htable = new HTableDescriptor(TableName.valueOf(tableName)); 
            htable.addFamily( new HColumnDescriptor("movies"));
            System.out.println( "Creating Table..." );
            admin.createTable( htable );
            System.out.println("Done!");
            table.close();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

没有抛出异常。如果我打开一个hbase shell,就会创建带有列family movies的表actors。关于我可能做错了什么,我已经没有什么想法了。

要确定确切的原因,请执行以下操作

  • 在运行此程序的log4j.properties中启用调试日志

  • 在try块中包含这一行

org.apache.hadoop.hbase.client.HBaseAdmin.checkHBaseAvailable(conf)


这将确定连接到hbase是否有任何初步问题,如果有,则抛出错误。

一种可能性是您可能可以访问某些区域服务器,但不是所有区域服务器。如果您的日志不够详细(默认情况下可能没有),您可能看不到这些错误。所以,也许你的客户可以访问主服务器,但不是所有的RS?只是需要进行三次检查…如果是这样的话,我该如何解决这个问题?这可能是任何人的猜测。我最好的猜测是主机名解析?尝试从您的客户端计算机通过telnet在正确的端口访问您的所有RS。如果这是可行的,那么问题就出在其他地方了。如果没有,那就是你必须首先解决的问题。始终尝试通过主机名而不是IP地址与HBase通信。