欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java链接hbase数据库实例代码,包括增删改查及批量操作、范围查询等(转载的)

程序员文章站 2022-06-04 11:02:08
...

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

}