簡體   English   中英

無法使用 JAVA 創建表和列出表到遠程 HBase

[英]Unable to Create table and List tables to remote HBase using JAVA

嘗試僅遠程連接 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文件,除了Creating table和Listing Table之外,我還可以做更多的操作,比如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);
}

有關更多詳細信息, 請參閱此

對於工作代碼示例,您可以參考這個

由於您能夠執行 put 和 get,因此它不應該是 jar 問題。 您可以嘗試在 hbase 配置中添加值為“/hbase-unsecure”的此屬性zookeeper.znode.parent 它是包含 HBase 創建/使用的所有 znode 的根 znode。 在 zookeeper 客戶端 jar 中,此值為“/hbase”。 將它與您的配置 xml 文件進行比較。 你可以看這里

我有類似的問題。 我通過在 HBase 節點中打開以下端口來修復它:

  1. 60000
  2. 60010
  3. 60020
  4. 9090

在 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

更多信息在這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM