大數據hadoop學習【11】-----根據要求,編寫JAVA程序,實現對Hbase表中數據進行操作


在很多時候,在使用hbase數據庫對錶中數據進行操作的時候,一般我們不會使用shell命令,而是通過java編程實現對hbase數據庫的訪問,前幾次我們學習了怎麼通過java程序實現對hbase數據庫建表的基本操作以及對數據的相關基本操作,本次博客,林君學長將帶大家編寫java程序,實現按要求操作相關表中的數據,編寫成相關函數方法

  • 操作系統:ubuntuKylin-16.04
  • hadoop版本:hadoop-2.7.7
  • hbase版本:hbase-1.4.13

一、JAVA編程實現對Hbase數據庫的操作

1、進行Hbase的訪問及關閉訪問

1)、java訪問hbase數據庫的操作如下:

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

2)、java關閉訪問hbase數據庫的操作如下:

//關閉連接
    public static void close(){
        try{
            if(admin != null){
                admin.close();
            }
            if(null != connection){
                connection.close();
            }
        }catch (IOException e){
            e.printStackTrace();
        }
    }

2、列出HBase所有的表的相關信息,例如表名

1)、java程序如下所示:

public void listTables() throws IOException {
        init();
        HTableDescriptor hTableDescriptors[] = admin.listTables();
        for(HTableDescriptor hTableDescriptor :hTableDescriptors){
            System.out.println(hTableDescriptor.getNameAsString());
        }
        close();
    }

2)、代碼說明
以上代碼通過訪問hbase數據庫,直接列出hbase數據庫中的我們創建過的所有的表的名字,並在終端打印出來!

3、在終端打印出指定的表的所有記錄數據

1)、java程序如下所示:

public void getAllData(String tableName) throws IOException{
    		init();
    		Table table = connection.getTable(TableName.valueOf(tableName));
    		Scan scan = new Scan();
    		ResultScanner resutScanner = table.getScanner(scan);
    		for(Result result: resutScanner){
    			showCell(result);
    			}
    		table.close();
    		close();
	 }

2)、代碼說明
以上函數通過傳遞一個參數,也就是表名,通過傳遞的表名,我們列出該表中所有的數據信息,其中showCell()函數是一個終端打印函數,將讀取到的信息輸出在終端,後面會給出該函數

4、向已經創建好的表添加指定的列族或列

1)、java程序如下所示:

public void insertRow(String tableName,String rowKey,String colFamily,String col) throws IOException {
        init();
        Table table = connection.getTable(TableName.valueOf(tableName));
        Put put = new Put(rowKey.getBytes());
        put.addColumn(colFamily.getBytes(), col.getBytes(), val.getBytes());
        System.out.println("數據插入成功");
        table.put(put);
        table.close();
        close();
}

2)、代碼說明
上面函數需要傳遞的參數分別爲,表名、行鍵、(確定是哪一行的數據),然後是列族、子列;如果該列族下沒有子列,則傳遞參數的時候子列(col)寫爲空就好,如下所示:
列族有子列:
insertRow(“student1”, “chenyiyue”, “score”, “Math”)
列族沒有子列:
insertRow(“student1”, “chenyiyue”, “name”, " ")

5、向已經創建好的表刪除指定的列族或列

1)、java程序如下所示:

public void deleteRow(String tableName,String rowKey,String colFamily,String col) throws IOException {
        init();
        Table table = connection.getTable(TableName.valueOf(tableName));
        Delete delete = new Delete(rowKey.getBytes());
        delete.addColumn(colFamily.getBytes(), col.getBytes());
        table.delete(delete);
        System.out.println("信息已經刪除");
        table.close();
        close();
    }

2)、代碼說明
以上函數通過傳遞參數表名和行鍵確定刪除那一行的數據,然後通過列族和子列來進行對應的刪;如果列族下沒有子列,那子列(col)寫爲空;如果有,指定下的子列,確定刪除哪一個子列如:
列族下無子列:
deleteRow(“student1”, “chenyiyue”, “name”," ")
刪除score列族下的子列Math:
deleteRow(“student1”, “chenyiyue”, “score”,“Math”)

6、刪除指定的表中的某一行的所有數據

1)、java程序如下所示:

public void deleteLine(String tableName,String rowKey) throws IOException {
        init();
        Table table = connection.getTable(TableName.valueOf(tableName));
        Delete delete = new Delete(rowKey.getBytes());
        table.delete(delete);
        System.out.println("信息已經刪除");
        table.close();
        close();
}

2)、代碼說明
既然是刪除表中所有的數據,那我們就需要傳遞表名和行鍵就行,然後就刪除這一行的所有數據!

7、統計表的行數

1)、java程序如下所示:

public void getLong(String tableName) throws IOException{
    		init();
    		int a=0;
    		Table table=connection.getTable(TableName.valueOf(tableName));
    		Scan scan = new Scan();
    		ResultScanner resutScanner = table.getScanner(scan);
    		for(Result result: resutScanner){
    			a=a+result.size();
    			}
    		System.out.println("該表共有:"+a+"行");
    		table.close();
    		close();
    }

2)、代碼說明
通過傳遞表名,對該表的行數進行統計,只需要依次列出表的數據,設置變量a進行統計行數據的個數,然後輸出就ok!

8、清空指定的表的所有記錄數據

1)、java程序如下所示:

public void deleteAll(String tableName) throws IOException {
	init();
	System.out.println("開始清空數據");
	//取得目標數據表的表明對象
	TableName tableName = TableName.valueOf(tableName);
	//設置表狀態爲無效
	admin.disableTable(tableName);
	//清空指定表的數據
	admin.truncateTable(tableName, true);
	System.out.println("該表數據已清空");
	close();
}

2)、代碼說明
通過傳遞表名,對該表中的所有數據進行清空,但沒有刪除該表哦!

以上就是本次博客的全部內容啦,上面的操作只給出了函數哦,具體使用是需要調用這些函數使用的,小夥伴們對於函數的調用應該會吧,自己調用去吧!希望對本次博客的閱讀,可以幫助大家瞭解到java是如何對hbase數據庫進行操作的!
遇到問題的小夥伴評論區留言,林君學長看到爲會大家解答的,這個學長不太冷!

陳一月的又一天編程歲月^ _ ^

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章