java链接hbase数据库实例代码,包括增删改查及批量操作、范围查询等(转载的)
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.NamespaceDescriptor;
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.Delete;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.util.Bytes;
/**
*
-
类描述:hbase 增删改查操作
-
创建人:wanghonggang
-
创建时间:2018年11月27日 下午3:18:10
*/
public class HbaseCRUD {
//hbase 链接
static Connection conn;
// 数据库元数据操作对象
static Admin admin;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
System.out.println("--------------- 开始! -----------------");
setup();//初始化
createTable();//创建表
insert();//插入数据
update();//更新数据
delete();//删除数据
select();//查询数据
deleteTable();//删除表
closeConnection();//关闭连接
System.out.println("--------------- 结束! -----------------");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 初始化
* @throws Exception
*/
public static void setup() throws Exception{
System.out.println("--------------- 开始初始化 -----------------");
//取得一个数据库连接的配置参数对象
Configuration conf = HBaseConfiguration.create();
//设置连接参数:HBase数据库所在的主机IP
conf.set("hbase.zookeeper.quorum", "datanode1,datanode2,datanode3");
//设置连接参数:HBase数据库使用的端口
conf.set("hbase.zookeeper.property.clientPort", "2181");
// conf.set(“hbase.master”, “manager:16000”);
conf.set(“hbase.master.port”, “16000”);
conf.set(“hbase.zookeeper.useMulti”, “true”);
conf.set(“hbase.regionserver.info.port”, “16030”);
conf.set(“hbase.regionserver.port”, “16020”);
conf.set(“zookeeper.znode.parent”, “/hbase-unsecure”);
//取得一个数据库连接对象
conn=ConnectionFactory.createConnection(conf);
//取得一个数据库元数据操作对象
admin=conn.getAdmin();
System.out.println("--------------- 初始化完成 -----------------");
}
/**
* 创建表
* @throws Exception
*/
public static void createTable()throws Exception{
System.out.println("---------------创建表 START-----------------");
//创建namespace
admin.createNamespace(NamespaceDescriptor.create("WHG").build());
// 数据表表名
String tableName="WHG:TB1";
// 新建一个数据表表名对象
TableName tn = TableName.valueOf(tableName);
//判断表是否存在
if(admin.tableExists(tn)){
System.out.println(tableName+"表已经存在!");
}else{
System.out.println(tableName+"表不存在,开始创建!");
// 数据表描述对象
HTableDescriptor tbDescriptor=new HTableDescriptor(tn);
// 列族描述对象
HColumnDescriptor f1=new HColumnDescriptor("f1");
// 在数据表中新建一个列族
tbDescriptor.addFamily(f1);
// 新建数据表
admin.createTable(tbDescriptor);
System.out.println(tableName+"表创建成功!");
}
System.out.println("---------------创建表 END-----------------");
}
/**
* 删除表
* @throws Exception
*/
public static void deleteTable()throws Exception{
System.out.println("---------------删除表 START-----------------");
// 数据表表名
String tableName="WHG:TB1";
// 新建一个数据表表名对象
TableName tn = TableName.valueOf(tableName);
//判断表是否存在
if(admin.tableExists(tn)){
admin.disableTable(tn);
admin.deleteTable(tn);
System.out.println(tableName+"表已经删除!");
}else{
System.out.println(tableName+"表不存在!");
}
System.out.println("---------------删除表 END-----------------");
}
/**
* 删除数据
* @throws Exception
*/
public static void delete()throws Exception{
System.out.println("---------------删除表 START-----------------");
// 数据表表名
String tableName="WHG:TB1";
// 新建一个数据表表名对象
Table table = conn.getTable(TableName.valueOf(tableName));
//指定rowkey
Delete del = new Delete(Bytes.toBytes("1004"));
//指定列
del.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("name"));
//执行删除操作
table.delete(del);
System.out.println("---------------删除表 END-----------------");
}
/**
* 插入数据
* @throws Exception
*/
public static void insert()throws Exception{
System.out.println("---------------插入表 START-----------------");
String tableName = "WHG:TB1";
Table table = conn.getTable(TableName.valueOf(tableName));
//单条插入
Put put = new Put(Bytes.toBytes("1004"));
put.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("name"), Bytes.toBytes("测试4"));
table.put(put);
//批量插入
/*List<Put> list = new ArrayList<Put>();
Put put = new Put(Bytes.toBytes("1001"));
put.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("name"), Bytes.toBytes("测试1"));
list.add(put);
put = new Put(Bytes.toBytes("1002"));
put.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("name"), Bytes.toBytes("测试2"));
list.add(put);
table.put(list);*/
System.out.println(tableName + " 插入成功!");
System.out.println("---------------插入表 END-----------------");
}
/**
* 更新数据
* @throws Exception
*/
public static void update()throws Exception{
System.out.println("---------------更新表 START-----------------");
String tableName = "WHG:TB1";
Table table = conn.getTable(TableName.valueOf(tableName));
//更新 - 同插入操作,覆盖的意思
Put put = new Put(Bytes.toBytes("1004"));
put.addColumn(Bytes.toBytes("f1"), Bytes.toBytes("name"), Bytes.toBytes("测试4-更新"));
table.put(put);
System.out.println("---------------更新表 END-----------------");
}
/**
* 查询数据
* @throws Exception
*/
public static void select()throws Exception{
System.out.println("---------------查询 START-----------------");
//根据rowkey查询
Table table = conn.getTable(TableName.valueOf("WHG:TB1"));
Get get = new Get(Bytes.toBytes("1004"));
//通过列族查询
// get.addFamily(Bytes.toBytes(“f1”));
//通过列查询
// get.addColumn(Bytes.toBytes(“f1”), Bytes.toBytes(“name”));
Result result = table.get(get);
if(null != result){
for (Cell cell:result.rawCells()) {
System.out.println(“列族:” + new String(CellUtil.cloneFamily(cell)) + " ");
System.out.println(“列:” + new String(CellUtil.cloneQualifier(cell)) + " “);
System.out.println(“值:” + new String(CellUtil.cloneValue(cell)) + " “);
System.out.println(“时间戳:” + cell.getTimestamp());
System.out.println(”---------------我是光荣的分隔符--------------”);
}
}else{
System.out.println(“数据为空!!!”);
}
/*//根据rowkey进行范围查询
String talbeName="WHG:TB1";
String startRowKey="1001";//包含
String endRowKey= "1005";//不包含
Table table = conn.getTable(TableName.valueOf(talbeName));
Scan scan = new Scan();
//设置取值范围
scan.setStartRow(startRowKey.getBytes());//开始的key
scan.setStopRow(endRowKey.getBytes());//结束的key
ResultScanner scanner = table.getScanner(scan) ;
List<Result> list = null;
list = new ArrayList<Result>() ;
for (Result rs : scanner) {
list.add(rs) ;
for (Cell cell : rs.listCells()) {
System.out.println("列族:" + new String(CellUtil.cloneFamily(cell)) + " ");
System.out.println("列:" + new String(CellUtil.cloneQualifier(cell)) + " ");
System.out.println("值:" + new String(CellUtil.cloneValue(cell)) + " ");
System.out.println("时间戳:" + cell.getTimestamp());
System.out.println("---------------我是光荣的分隔符--------------");
}
}
System.out.println("----------------记录数:"+list.size());*/
System.out.println("---------------查询 END-----------------");
}
/**
* 关闭连接
* @throws Exception
*/
public static void closeConnection() throws Exception{
if(null != conn && !conn.isClosed()){
conn.close();
}
}
}