java - 无法使用 JAVA 创建表并将表列表到远程 HBase

标签 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 和其他一些操作,除了创建表和列出表!

请多多关照。

最佳答案

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

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

与其单独设置 hbase 配置细节,不如将 hbase-site.xmlcore-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"));

一旦你有了 Configuration 对象,就创建 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

关于java - 无法使用 JAVA 创建表并将表列表到远程 HBase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32962735/

相关文章:

tomcat - 关于LeaseException查询EMR集群的Tomcat 7错误

java - 做 runnable.run() 是不是错了?

java - 在 Android 和 Java 上复制 Swift 完成处理程序

java - 在项目中的何处包含信任库文件

JavaFX 设置数组中的标签文本

java.lang.Exception : java. io.IOException:设置 hadoop 和 hbase 时值类错误

Hadoop:如何使用上下文对象在减少步骤中找出partition_Id

K-Means 的 Hadoop 分布式版本?

r - 如果 1 个 reducer (RHadoop)的数据变大怎么办?

hadoop - 从 HDFS 读取并写入 HBASE