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();
}
}
}