說明:
這是一個maven工程,需要導入相關配置。
代碼
package com.HbasePractice.hbase;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
* @author lv
* @version 1.0, 20:44 2019/4/15
*/
public class HbaseTest {
//配置信息
public static Configuration conf;
//獲取配置信息
static {
//alt + enter
conf = HBaseConfiguration.create();
}
//1.判斷一張表是否存在
public static boolean isExist(String tableName) throws IOException {
//對錶操作需要用HbaseAdmin
Connection connection = ConnectionFactory.createConnection(conf);
//管理表
HBaseAdmin admin = (HBaseAdmin) connection.getAdmin();
return admin.tableExists(TableName.valueOf(tableName));
}
//2.在hbase集羣創建表 create 'user','info','info1'
// String... 表示可變參數
public static void createTable(String tableName,String... columnFamilly) throws IOException {
//對錶操作需要用HbaseAdmin
Connection connection = ConnectionFactory.createConnection(conf);
//管理表
HBaseAdmin admin = (HBaseAdmin) connection.getAdmin();
//1.表如果存在 請輸入其它表名
if(isExist(tableName)){
System.out.println("表存在,請輸入其它表名");
}else{
//2.注意:創建表的話 需要創建一個描述器
HTableDescriptor htd = new HTableDescriptor(TableName.valueOf(tableName));
//3.創建列族
for(String cf:columnFamilly){
htd.addFamily(new HColumnDescriptor(cf));
}
//4.創建表
admin.createTable(htd);
System.out.println("表已創建成功!");
}
}
// 3:刪除hbase中的表
public static void deleteTable(String tableName) throws IOException {
//對錶操作需要用HbaseAdmin
Connection connection = ConnectionFactory.createConnection(conf);
//管理表
HBaseAdmin admin = (HBaseAdmin) connection.getAdmin();
//1.如果表存在 刪除 否則打印不存在
//需要先指定表不可用 再刪除
if(isExist(tableName)){
//2.指定不可用,然後再刪除
admin.disableTable(TableName.valueOf(tableName));
admin.deleteTable(TableName.valueOf(tableName));
}else{
System.out.println("表不存在,請重新輸入表名!");
}
}
//4.添加數據put 'user','rowkey',''
public static void addRow(String tableName,String rowkey,String cf,String column,String value) throws IOException {
//對錶操作需要用HbaseAdmin
Connection connection = ConnectionFactory.createConnection(conf);
//拿到表對象
Table t = connection.getTable(TableName.valueOf(tableName));
//1.用put方式加入數據
Put p = new Put(Bytes.toBytes(rowkey));
//2.加入數據
p.addColumn(Bytes.toBytes(cf),Bytes.toBytes(column),Bytes.toBytes(value));
t.put(p);
}
//5.刪除表中一行數據
public static void deleteRow(String tableName,String rowkey,String cf) throws IOException {
//對錶操作需要用HbaseAdmin
Connection connection = ConnectionFactory.createConnection(conf);
//拿到表對象
Table t = connection.getTable(TableName.valueOf(tableName));
//1.根據rowkey刪除數據
Delete d = new Delete(Bytes.toBytes(rowkey));
//2.刪除
t.delete(d);
}
//6.刪除多行數據
public static void deleteAll(String tableName,String... rowkeys) throws IOException {
//對錶操作需要用HbaseAdmin
Connection connection = ConnectionFactory.createConnection(conf);
//拿到表對象
Table t = connection.getTable(TableName.valueOf(tableName));
//1.把delete封裝到集合
List<Delete> list = new ArrayList<Delete>();
//2.遍歷
for(String row:rowkeys){
Delete d = new Delete(Bytes.toBytes(row));
list.add(d);
}
t.delete(list);
}
//7.掃面表數據 scan全表掃描
public static void scanAll(String tableName) throws IOException {
//對錶操作需要用HbaseAdmin
Connection connection = ConnectionFactory.createConnection(conf);
//拿到表對象
Table t = connection.getTable(TableName.valueOf(tableName));
//1.實例scan
Scan s = new Scan();
//2,拿到Scanner對象
ResultScanner rs = t.getScanner(s);
//3.遍歷
for(Result r:rs){
Cell[] cells = r.rawCells();
//遍歷具體數據
for(Cell c:cells){
System.out.println("行鍵爲:" + Bytes.toString(CellUtil.cloneRow(c)));
System.out.println("列族爲:" + Bytes.toString(CellUtil.cloneFamily(c)));
System.out.println("值爲:" + Bytes.toString(CellUtil.cloneValue(c)));
}
}
}
//8.掃描指定的數據
public static void getRow(String tableName,String rowkey) throws IOException {
//對錶操作需要用HbaseAdmin
Connection connection = ConnectionFactory.createConnection(conf);
//拿到表對象
Table t = connection.getTable(TableName.valueOf(tableName));
//1.掃描指定數據需要實例Get
Get g = new Get(Bytes.toBytes(rowkey));
//2.可加過濾條件
g.addFamily(Bytes.toBytes("info"));
Result rs = t.get(g);
Cell[] cells = rs.rawCells();
//3.遍歷
//遍歷具體數據
for(Cell c:cells){
System.out.println("行鍵爲:" + Bytes.toString(CellUtil.cloneRow(c)));
System.out.println("列族爲:" + Bytes.toString(CellUtil.cloneFamily(c)));
System.out.println("值爲:" + Bytes.toString(CellUtil.cloneValue(c)));
}
}
public static void main(String[] args) throws IOException {
// System.out.println(isExist("emp1"));
// deleteTable("Hunter");
// createTable("LeronQ","henshuai","feichangshuai");
// createTable("LeronQ2","info");
// deleteTable("LeronQ2");
// addRow("LeronQ2","101","info","age","18");
// deleteRow("LeronQ2","101","info");
deleteAll("emp","1001","1002r");
}
}