1. 程式人生 > >hbase裡得到列族名

hbase裡得到列族名

初學hbase,很多程式照著書上的敲還是基本都能執行成功,但是我自己寫程式時就出現了一些問題,就比如說我想取得某個表的所有列族,API書上都有,就用就是了,下面是我第一次寫時的程式碼

初一看是不是覺得沒啥邏輯錯誤,而且init();也是和hbase取得連線的,實際上啥也沒出來,執行直接終止了

左思右想的我一直以為是我用來裝列族名的集合不對,直到剛才我測試發現HTableDescriptor hTableDescriptor=new HTableDescriptor(tablename);裡的hTableDescriptor是空的,這不是表示沒有取到表嘛,然後又翻了下書才發現書上有一句很關鍵的程式碼

就是這一句,這一句是表明和hbase裡某一個表連線上,所以我都沒有和表接上頭就在操作了,所以是不行的。

所以,改進後應該是這樣滴

最後關於取得列族名我在網上也沒看到什麼程式碼(有程式碼的下載都要要錢,我窮得很),so,這裡我就貼出我的程式碼,也許以後的新手用得到呢。

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.util.Bytes;

public class GetRowName {
    public static Configuration configuration;
    public static Connection connection;
    public static Admin admin;
    public static void init() {
        configuration=HBaseConfiguration.create();
        configuration.set("hbase.rootdir", "hdfs://localhost:9000/hbase");
        try {
        connection=ConnectionFactory.createConnection(configuration);
        admin=connection.getAdmin();
        }catch(IOException e) {
            e.printStackTrace();
        }
    }
    public static void close() {
        try {
            if(admin !=null) {
                admin.close();
            }
            if(null !=connection) {
                connection.close();
            }
            }catch(IOException e) {
                e.printStackTrace();
            }
    }
    public static void getRowName(String tableName)throws IOException{
        init();
        Table table=connection.getTable(TableName.valueOf(tableName));
         List<String> list=new ArrayList<>();
        HTableDescriptor hTableDescriptor=table.getTableDescriptor();
        for(HColumnDescriptor fdescriptor : hTableDescriptor.getColumnFamilies()){
            list.add(fdescriptor.getNameAsString());
        }
        for(int i=0;i<list.size();i++) {
            System.out.print(list.get(i));
        }
        close();
    }
    public static void main(String[] args) {
        try {
            getRowName("s1");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}