这篇文章将为大家详细讲解有关 HBase 基本 API 操作之 CRUD-Util 怎么用,丸趣 TV 小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
一:创建 HBaseUtil。
public class HBaseUtil {
private static Configuration conf;
private static Connection con;
// 初始化联接
static{
// 获得配置文件对象:conf = HBaseConfiguration.create();
conf.set( hbase.zookeeper.quorum , 192.168.226.129
try {
// 获得连接对象:con = ConnectionFactory.createConnection(conf);
} catch (IOException e) {e.printStackTrace();
// 获得连接:public static Connection getCon(){if( con == null || con.isClosed() ){
try {con = ConnectionFactory.createConnection(conf);
} catch (IOException e) {e.printStackTrace();
return con;
// 关闭连接:public static void closeCon(){if( con != null ){
try {con.close();
} catch (IOException e) {e.printStackTrace();
// 创建表:public static void createTable(String tableName,String...FamilyColumn ){TableName tn = TableName.valueOf(tableName);
try {Admin admin = getCon().getAdmin();
HTableDescriptor htd = new HTableDescriptor(tn);
for(String fc : FamilyColumn){HColumnDescriptor hcd = new HColumnDescriptor(fc);
htd.addFamily(hcd);
admin.createTable(htd);
admin.close();} catch (IOException e) {e.printStackTrace();
// 删除表:public static void dropTable(String tableName){TableName tn = TableName.valueOf(tableName);
try {Admin admin = con.getAdmin();
admin.disableTable(tn);
admin.deleteTable(tn);
admin.close();} catch (IOException e) {e.printStackTrace();
// 插入或更新数据
public static boolean insert(String tableName,String rowKey,String family,String qualifier,String value){
try {Table table = con.getTable(TableName.valueOf(tableName));
Put put = new Put(Bytes.toBytes(rowKey));
put.addColumn(Bytes.toBytes(family), Bytes.toBytes(qualifier), Bytes.toBytes(value));
table.put(put);
return true;
} catch (IOException e) {e.printStackTrace();
}finally{// HBaseUtil.closeCon();
return false;
// 删除数据记录
public static boolean delete(String tableName,String rowKey,String family,String qualifier){
try {Table table = con.getTable(TableName.valueOf(tableName));
Delete del = new Delete( Bytes.toBytes(rowKey));
if( qualifier != null ){del.addColumn(Bytes.toBytes(family), Bytes.toBytes(qualifier));
}else if( family != null ){del.addFamily( Bytes.toBytes(family) );
table.delete(del);
return true;
} catch (IOException e) {e.printStackTrace();
}finally{//HBaseUtil.closeCon();
return false;
// 删除整行的数据记录
public static boolean delete(String tableName,String rowKey){return delete(tableName, rowKey, null, null);
// 删除某行某列的数据记录
public static boolean delete(String tableName, String rowKey, String family){return delete(tableName, rowKey, family, null);
// 数据读取
// 取到一个值
public static String byGet(String tableName,String rowKey,String family,String qualifier){
try {Table table = con.getTable(TableName.valueOf(tableName));
Get get = new Get(Bytes.toBytes(rowKey));
get.addColumn(Bytes.toBytes(family), Bytes.toBytes(qualifier));
Result result = table.get(get);
return Bytes.toString(CellUtil.cloneValue( result.listCells().get(0)));
} catch (IOException e) {e.printStackTrace();
return null;
// 取到一个族列的值
public static Map String,String byGet(String tableName,String rowKey, String family ){
Map String,String map = null;
try {Table table = getCon().getTable( TableName.valueOf(tableName));
Get get = new Get(Bytes.toBytes(rowKey));
get.addFamily( Bytes.toBytes( family ));
Result result = table.get(get);
List Cell list = result.listCells();
map = (Map String, String) (list.size() 0 ? new HashMap String,String () : result);
for( Cell cell : list ){map.put(Bytes.toString(CellUtil.cloneQualifier(cell)), Bytes.toString(CellUtil.cloneValue(cell)));
} catch (IOException e) {e.printStackTrace();
return map;
// 取到多个列族的值
public static Map String,Map String,String byGet(String tableName,String rowKey){
Map String,Map String,String maps = null;
try {Table table = con.getTable(TableName.valueOf(tableName));
Get get = new Get(Bytes.toBytes(rowKey));
Result result = table.get(get);
List Cell list = result.listCells();
maps = (Map String, Map String, String) (list.size() 0 ? new HashMap String,Map String,String () : result);
for( Cell cell : list){String familyName = Bytes.toString(CellUtil.cloneFamily(cell));
if( maps.get(familyName) == null ){maps.put(familyName, new HashMap String,String () );
maps.get(familyName).put(Bytes.toString(CellUtil.cloneQualifier(cell)), Bytes.toString(CellUtil.cloneValue(cell)));
} catch (IOException e) {e.printStackTrace();
return maps;
}
二:单元测试类 TestHBaseJUnit。
public class TestHBaseJUnit {
// 创建表并列出所有的表:@Test
public void testCreateTable() throws IOException {
// 创建两张表: person 与 student
HBaseUtil.createTable( person , famcolumn1 , famcolumn2 , famcolumn3
HBaseUtil.closeCon();
HBaseUtil.createTable( student , famcolumn1 , famcolumn2 , famcolumn3
HBaseUtil.closeCon();
// 列出所有表:Admin admin = HBaseUtil.getCon().getAdmin();
TableName[] tables = admin.listTableNames();
for (TableName tableName : tables) {System.out.println( tableName: + tableName );
//// 判断数据表是否存在。@Test
public void testTableIsExists() throws IOException{
TableName tn = TableName.valueOf( person // 创建表名对象
Admin admin = HBaseUtil.getCon().getAdmin();
boolean isExists = admin.tableExists(tn);
System.out.println( person is Exists: + isExists );
// 删除表
@Test
public void testDropTable() throws IOException{Admin admin = HBaseUtil.getCon().getAdmin();
TableName tn = TableName.valueOf( student
System.out.println( admin.isTableDisabled(tn) );
HBaseUtil.dropTable( student
admin = HBaseUtil.getCon().getAdmin();
// 判断数据表是否还存在。boolean isExists = admin.tableExists(tn);
System.out.println( student is Exists: + isExists );
// 对表插入数据记录
@Test
public void testInsert() throws TableNotFoundException, IOException{
HBaseUtil.insert( person , row1 , famcolumn1 , name , Berg
HBaseUtil.insert( person , row1 , famcolumn1 , age , 22
HBaseUtil.insert( person , row1 , famcolumn1 , sex , male
HBaseUtil.insert( person , row1 , famcolumn2 , name , BergBerg
HBaseUtil.insert( person , row1 , famcolumn2 , age , 21
HBaseUtil.insert( person , row1 , famcolumn2 , sex , male
HBaseUtil.insert( person , row1 , famcolumn3 , name , BergBergBerg
HBaseUtil.insert( person , row1 , famcolumn3 , age , 23
HBaseUtil.insert( person , row1 , famcolumn3 , sex , famale
Admin admin = HBaseUtil.getCon().getAdmin();
TableName tn = TableName.valueOf( person
System.out.println( admin.getTableDescriptor(tn) );
// 取到一个值
@Test
public void testByGet1(){
String result = HBaseUtil.byGet( person , row1 , famcolumn1 , name
System.out.println( result: + result );
// 取到一个族列的值
@Test
public void testByGet2(){
Map String, String result = HBaseUtil.byGet( person , row1 , famcolumn1
System.out.println( result: + result );
// 取到多个列族的值
@Test
public void testByGet3(){
Map String, Map String, String result = HBaseUtil.byGet( person , row1
System.out.println( result: + result );
// 删除数据记录
@Test
public void testDelete1(){
HBaseUtil.delete( person , row1 , famcolumn3 , age
// 删除数据后:
Map String, Map String, String result = HBaseUtil.byGet( person , row1
System.out.println( result: + result );
// 删除某列数据
@Test
public void testTelete2(){
HBaseUtil.delete( person , row1 , famcolumn3
// 删除数据后:
Map String, Map String, String result = HBaseUtil.byGet( person , row1
System.out.println( result: + result );
// 删除整行的数据
@Test
public void testTelete3(){
HBaseUtil.delete( person , row1
// 删除数据后:
Map String, Map String, String result = HBaseUtil.byGet( person , row1
System.out.println( result: + result );
}
关于“HBase 基本 API 操作之 CRUD-Util 怎么用”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。