使用Java远程访问HBase表列表

3
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.MasterNotRunningException;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.HBaseAdmin;

public class ListTables {

    public static void main(String args[])throws MasterNotRunningException, IOException {
        ConnectionFactory.createConnection();
        System.out.println("stage 1. . . . ");
        Configuration conf =  HBaseConfiguration.create();
        conf.set("hbase.zookeeper.quorum", "192.168.*.***");
        conf.set("hbase.master", "192.168.*.***:60000");
        conf.set("hbase.zookeeper.property.clientPort","2181");
        conf.set("zookeeper.znode.parent","/hbase-unsecure");
        Connection connection = ConnectionFactory.createConnection(conf);

        try {
            HBaseAdmin admin1 = (HBaseAdmin)connection.getAdmin();
            System.out.println("stage 3. . . . ");
            HTableDescriptor tableDescriptor[] = admin1.listTables();
            for (int i=0; i<tableDescriptor.length; i++) {
                System.out.println(tableDescriptor[i].getNameAsString());
            }
        } catch (Exception e) {
            System.out.println(e);
        }
    }
}

输出

log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFactory).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
stage 1. . . . 
stage 3. . . . 

这是错误信息

在这行代码之后,我等待了很长时间,但没有响应。


你尝试过使用HBase shell获取表列表吗?它有效吗? - maxteneff
是的,在 HBase shell 中它可以工作 > list。 - Vivek Harry
你确定需要配置选项 conf.set("zookeeper.znode.parent","/hbase-unsecure") 吗?如果不需要,尝试将其删除。我自己尝试了这段代码,在我的情况下,它可以完美地工作而且没有该选项时也不会得到响应。 - maxteneff
是的 @max,我尝试了两种方式,一种是使用属性"/hbase-unsecure",另一种是使用"/hbase",但对我来说都不起作用。 - Vivek Harry
实际上这行代码没有执行,我认为需要一些超级用户权限才能执行这行代码 "admin1.listTables();" 从这行代码开始,没有任何响应! - Vivek Harry
首先检查您的连接。我怀疑它是否正在与HBase建立连接。使用以下代码检查连接。HBaseAdmin.checkHBaseAvailable(config); - user2435082
1个回答

0

我曾经遇到过同样的错误,不得不创建log4j.properties文件。这是因为Hadoop使用log4j来写入其日志:

Java项目:resources / log4j.properties

# Root logger option
log4j.rootLogger=DEBUG, stdout, file

# Redirect log messages to console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

# Redirect log messages to a log file, support file rolling.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=C:\\path of your `enter code here`file\\pruebas\\log\\log.log
log4j.appender.file.MaxFileSize=5MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

希望这能对你有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接