2016-11-14 136 views
0

我正嘗試從Java連接到Hbase。 Hbase -Version 1.0.0 但我無法連接它。請告訴我我缺少什麼,因爲我是Hbase的新手。 這裏是我的代碼無法通過Java連接到Hbase

public class HbaseAddRetrieveData{ 
    public static void main(String[] args) throws IOException { 
     TableName tableName = TableName.valueOf("stock-prices"); 


    Configuration conf = HBaseConfiguration.create(); 
    conf.set("hbase.master","LocalHost:60000"); 
    conf.set("hbase.zookeeper.property.clientPort", "2181"); 
    conf.set("hbase.zookeeper.quorum", "LocalHost"); 
    conf.set("zookeeper.znode.parent", "/hbase-unsecure"); 
    System.out.println("Config set"); 
    Connection conn = ConnectionFactory.createConnection(conf); 
    System.out.println("Connection"); 
    Admin admin = conn.getAdmin(); 
    if (!admin.tableExists(tableName)) { 
     System.out.println("In admin"); 
     admin.createTable(new HTableDescriptor(tableName).addFamily(new HColumnDescriptor("cf"))); 
    } 

    Table table = conn.getTable(tableName); 
    Put p = new Put(Bytes.toBytes("AAPL10232015")); 
    p.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("close"), Bytes.toBytes(119)); 
    table.put(p); 

    Result r = table.get(new Get(Bytes.toBytes("AAPL10232015"))); 
    System.out.println(r); 
} 

下面是我面對錯誤:

Exception in thread "main" org.apache.hadoop.hbase.client.RetriesExhaustedException: Can't get the locations 
at org.apache.hadoop.hbase.client.RpcRetryingCallerWithReadReplicas.getRegionLocations(RpcRetryingCallerWithReadReplicas.java:305) 
at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas.call(ScannerCallableWithReplicas.java:131) 
at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas.call(ScannerCallableWithReplicas.java:56) 
at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithoutRetries(RpcRetryingCaller.java:200) 
at org.apache.hadoop.hbase.client.ClientScanner.call(ClientScanner.java:287) 
at org.apache.hadoop.hbase.client.ClientScanner.nextScanner(ClientScanner.java:267) 
at org.apache.hadoop.hbase.client.ClientScanner.initializeScannerInConstruction(ClientScanner.java:139) 
at org.apache.hadoop.hbase.client.ClientScanner.<init>(ClientScanner.java:134) 
at org.apache.hadoop.hbase.client.HTable.getScanner(HTable.java:823) 
at org.apache.hadoop.hbase.MetaTableAccessor.fullScan(MetaTableAccessor.java:601) 
at org.apache.hadoop.hbase.MetaTableAccessor.tableExists(MetaTableAccessor.java:365) 
at org.apache.hadoop.hbase.client.HBaseAdmin.tableExists(HBaseAdmin.java:281) 
at com.tcs.healthcare.HbaseRetrieveData.main(HbaseRetrieveData.java:32) 

請指導我在本地主機這個

+1

你能分享你的hbase-site.xml和/ etc/hosts嗎 –

+0

你的Zookeeper好像不好,主機名也不正確 –

回答

1

變化Ll和 'H' 到 'H'

Configuration conf = HBaseConfiguration.create(); 
    conf.set("hbase.master","localhost:60000"); 
    conf.set("hbase.zookeeper.property.clientPort", "2181"); 
    conf.set("hbase.zookeeper.quorum", "localhost"); 
    conf.set("zookeeper.znode.parent", "/hbase-unsecure"); 

如果您使用遠程然後conf.set(「hbase.master」,「remotehost:60000」);即使它不工作,然後你檢查類路徑中的所有罐子(這是遠程的)

如果您使用的是maven,您可以指向集羣中存在的罐子。

你可以去集羣並查看下面的命令來了解遠程機器中存在的罐子的版本。

`hbase classpath` 

相同版本的jar應該在你的客戶端機器上。對於ex遠程機器上的hbasex.jar,你使用的是hbasey.jar,那麼它將不會連接。

此外,請從客戶機檢查您是否可以ping服務器/羣集。通常會有防火牆限制。

+1

和H呢? –

+0

我正在連接到遠程服務器。我的本地主機在這裏是:XX.XX.XX.XX –

+0

雅在這種情況下,它應該是可能的。但檢查網絡和其他東西。一般情況下,如果你能夠從客戶端機器ping遠程主機,那麼它應該沒有任何麻煩。 –