一:创建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 );
}
}