`
企鹅也渴望飞翔
  • 浏览: 3813 次
  • 性别: Icon_minigender_1
  • 来自: 济南
文章分类
社区版块
存档分类
最新评论

使用Java API对HBase1.x进行CRUD操作

阅读更多
public class HBaseUtil {

	private static final Logger log = LoggerFactory.getLogger(HBaseUtil.class);

	private static Configuration conf = HBaseConfiguration.create();
	private volatile static Connection conn;

	static {
		conf.set("hbase.zookeeper.quorum", "192.168.8.11");
		conf.set("hbase.zookeeper.property.clientPort", "2181");
	}

	/**
	 * 获取HBase连接
	 * 
	 * @return
	 * @throws IOException
	 * @throws Exception
	 */
	private static Table getTable(String tableName) throws IOException {
		if (null == conn) {
			synchronized (conn) {
				if (null == conn) {
					// 创建连接
					conn = ConnectionFactory.createConnection(conf);
					doShutDownWork();
				}
			}
		}
		Table table = conn.getTable(TableName.valueOf(tableName));
		return table;
	}

	/**
	 * 当JVM退出之间,回调该方法
	 */
	private static void doShutDownWork() {
		Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
			@Override
			public void run() {
				try {
					closeConnection();
					log.info("HBase Connection close successed");
				} catch (Exception e) {
					log.info("HBase Connection close failed");
					e.printStackTrace();
				}
			}
		}));
	}

	/**
	 * 关闭HBase连接
	 */
	public static void closeConnection() {
		try {
			if (null != conn) {
				conn.close();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 指定的table是否存在指定rowkey的记录
	 * 
	 * @param tableName
	 * @param rowkey
	 * @return
	 * @throws IOException
	 */
	public static boolean exist(String tableName, String rowkey)
			throws IOException {
		Table table = getTable(tableName);
		Get get = new Get(Bytes.toBytes(rowkey));
		boolean bool = table.exists(get);
		table.close();
		return bool;
	}

	/**
	 * 单条插入
	 * 
	 * @param tableName
	 * @param put
	 * @throws IOException
	 */
	public static void put(String tableName, Put put) throws IOException {
		Table table = getTable(tableName);
		table.put(put);
		table.close();
	}

	/**
	 * 插入数据
	 * 
	 * @param tableName
	 * @param rowkey
	 * @param columnFamily
	 * @param column
	 * @param value
	 * @throws Exception
	 */
	public static void putBatch(String tableName, List<Put> putList)
			throws IOException {
		Table table = getTable(tableName);
		table.put(putList);
		table.close();
	}

	/**
	 * 单条删除
	 * 
	 * @param tableName
	 * @param rowkey
	 * @param columnFamily
	 * @param column
	 * @throws IOException
	 */
	public static void delete(String tableName, Delete delete)
			throws IOException {
		Table table = getTable(tableName);
		table.delete(delete);
		table.close();
	}

	/**
	 * 批量删除
	 * 
	 * @param tableName
	 * @param rowkey
	 * @param colFamily
	 * @param col
	 * @throws Exception
	 * @throws IOException
	 */
	public static void deleteBatch(String tableName, List<Delete> deleteList)
			throws IOException {
		Table table = getTable(tableName);
		table.delete(deleteList);
		table.close();
	}

	/**
	 * 根据表名、rowkey查找数据
	 * 
	 * @param tableName
	 * @param rowkey
	 * @throws Exception
	 */
	public static Result get(String tableName, Get get) throws IOException {
		Table table = getTable(tableName);
		Result result = table.get(get);
		table.close();
		return result;
	}

	/**
	 * 
	 * @param tableName
	 * @param gets
	 * @return
	 * @throws IOException
	 */
	public static List<Result> getBatch(String tableName, List<Get> getList)
			throws IOException {
		Table table = getTable(tableName);
		Result[] results = table.get(getList);

		List<Result> listResult = new ArrayList<Result>();
		for (Result res : results) {
			listResult.add(res);
		}
		table.close();

		return listResult;
	}

	/**
	 * 批量扫描数据
	 * 
	 * @param tableName
	 * @param startRow
	 * @param stopRow
	 * @return
	 * @throws IOException
	 */
	public static List<Result> scan(String tableName, Scan scan)
			throws IOException {
		Table table = getTable(tableName);
		ResultScanner resultScanner = table.getScanner(scan);

		List<Result> listResult = new ArrayList<Result>();
		for (Result res : resultScanner) {
			listResult.add(res);
		}
		table.close();

		return listResult;
	}

}




public class Book {

	private String rowkey;
	private String name;
	private String author;
	private String publisher;
	private String type;
	private int sum;
	
	public String getRowkey() {
		return rowkey;
	}
	public void setRowkey(String rowkey) {
		this.rowkey = rowkey;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAuthor() {
		return author;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
	public String getPublisher() {
		return publisher;
	}
	public void setPublisher(String publisher) {
		this.publisher = publisher;
	}
	public String getType() {
		return type;
	}
	public void setType(String type) {
		this.type = type;
	}
	public int getSum() {
		return sum;
	}
	public void setSum(int sum) {
		this.sum = sum;
	}
	
}



public class BookDao {
	
	private static final Logger log = LoggerFactory.getLogger(BookDao.class);

	public void doInsert(String tableName, List<Book> ListBook){
		List<Put> putList = new ArrayList<Put>();
		for(Book book : ListBook){
			Put put = toPut(book);
			putList.add(put);
		}
		try {
			HBaseUtil.putBatch(tableName,putList);
			log.info("BookDao insert ListBook success");
		} catch (IOException e) {
			log.error("BookDao insert ListBook occur IOException");
			e.printStackTrace();
		}
	}
	
	private Put toPut(Book book){
		Put put = new Put(Bytes.toBytes(book.getRowkey()));
		put.addColumn(Bytes.toBytes(HBaseTableMsg.columnFamily_BOOKS), Bytes.toBytes("name"), Bytes.toBytes(book.getName()));
		put.addColumn(Bytes.toBytes(HBaseTableMsg.columnFamily_BOOKS), Bytes.toBytes("author"), Bytes.toBytes(book.getAuthor()));
		put.addColumn(Bytes.toBytes(HBaseTableMsg.columnFamily_BOOKS), Bytes.toBytes("publisher"), Bytes.toBytes(book.getPublisher()));
		put.addColumn(Bytes.toBytes(HBaseTableMsg.columnFamily_BOOKS), Bytes.toBytes("type"), Bytes.toBytes(book.getType()));
		put.addColumn(Bytes.toBytes(HBaseTableMsg.columnFamily_BOOKS), Bytes.toBytes("sum"), Bytes.toBytes(book.getSum()));
		return put;
	}
	
	public void doDelete(String tableName, List<Book> listBook){
		
		List<Delete> deleteList = new ArrayList<Delete>();
		for(Book book : listBook){
			Delete delete  = new Delete(Bytes.toBytes(book.getRowkey()));
//			//删除指定列族  
//		    if(columnFamily != null && !"".equals(columnFamily)){
//		    	delete.addFamily(Bytes.toBytes(columnFamily));
//		    }
//		    //删除指定列  
//		    if(columnFamily != null && !"".equals(columnFamily) && column != null && !"".equals(column)){
//		    	delete.addColumn(Bytes.toBytes(columnFamily),Bytes.toBytes(column));  
//		    }
			deleteList.add(delete);
		}
		try {
			HBaseUtil.deleteBatch(tableName,deleteList);
			log.info("BookDao delete ListBook success");
		} catch (IOException e) {
			log.error("BookDao delete ListBook occur IOException");
			e.printStackTrace();
		}
	}
	
	public List<Book> get(String tableName, List<Book> listBook) throws IOException{
		
		List<Get> getList = new ArrayList<Get>();
		for(Book book : listBook){
			Get get = new Get(Bytes.toBytes(book.getRowkey()));
//			//获取指定列族  
//		    if(columnFamily != null && !"".equals(columnFamily)){
//		    	get.addFamily(Bytes.toBytes(columnFamily));
//		    }
//		    //获取指定列  
//		    if(columnFamily != null && !"".equals(columnFamily) && column != null && !"".equals(column)){
//		    	get.addColumn(Bytes.toBytes(columnFamily),Bytes.toBytes(column));  
//		    }
			getList.add(get);
		}
		List<Result> listResult = HBaseUtil.getBatch(tableName, getList);
		List<Book> books = new ArrayList<Book>();
		for(Result result : listResult){
			Book book = new Book();
			book = toBook(result);
			books.add(book);
		}
		return books;
	}
	
	public List<Book> scan(String tableName, String startRow,String endRow) throws IOException{
		Scan scan = new Scan();
        if(startRow != null && !"".equals(startRow)){
        	scan.setStartRow(Bytes.toBytes(startRow));
        }
        if(endRow != null && !"".equals(endRow)){
        	scan.setStopRow(Bytes.toBytes(endRow));  
        }
        List<Result> listResult = HBaseUtil.scan(tableName, scan);
        List<Book> books = new ArrayList<Book>();
		for(Result result : listResult){
			Book book = new Book();
			book = toBook(result);
			books.add(book);
		}
		return books;
	}
	
	private Book toBook(Result result){
		Book book = new Book();
		if (result.containsColumn(Bytes.toBytes(HBaseTableMsg.columnFamily_BOOKS), Bytes.toBytes("rowkey"))) {
			book.setRowkey(Bytes.toString(result.getRow()));
		}
		if (result.containsColumn(Bytes.toBytes(HBaseTableMsg.columnFamily_BOOKS), Bytes.toBytes("name"))) {
			Cell nameCell = result.getColumnLatestCell(Bytes.toBytes(HBaseTableMsg.columnFamily_BOOKS), Bytes.toBytes("name"));
			book.setName(Bytes.toString(CellUtil.cloneValue(nameCell)));
//			String name = new String(result.getValue(Bytes.toBytes("bookinfo"), Bytes.toBytes("name")), "UTF-8");
		}
		if (result.containsColumn(Bytes.toBytes(HBaseTableMsg.columnFamily_BOOKS), Bytes.toBytes("author"))) {
			Cell authorCell = result.getColumnLatestCell(Bytes.toBytes(HBaseTableMsg.columnFamily_BOOKS), Bytes.toBytes("author"));
			book.setAuthor(Bytes.toString(CellUtil.cloneValue(authorCell)));
		}
		if (result.containsColumn(Bytes.toBytes(HBaseTableMsg.columnFamily_BOOKS), Bytes.toBytes("publisher"))) {
			Cell publisherCell = result.getColumnLatestCell(Bytes.toBytes(HBaseTableMsg.columnFamily_BOOKS), Bytes.toBytes("publisher"));
			book.setPublisher(Bytes.toString(CellUtil.cloneValue(publisherCell)));
		}
		if (result.containsColumn(Bytes.toBytes(HBaseTableMsg.columnFamily_BOOKS), Bytes.toBytes("type"))) {
			Cell typeCell = result.getColumnLatestCell(Bytes.toBytes(HBaseTableMsg.columnFamily_BOOKS), Bytes.toBytes("type"));
			book.setType(Bytes.toString(CellUtil.cloneValue(typeCell)));
		}
		if (result.containsColumn(Bytes.toBytes(HBaseTableMsg.columnFamily_BOOKS), Bytes.toBytes("sum"))) {
			Cell sumCell = result.getColumnLatestCell(Bytes.toBytes(HBaseTableMsg.columnFamily_BOOKS), Bytes.toBytes("sum"));
			book.setSum(Bytes.toInt(CellUtil.cloneValue(sumCell)));
		}
		
		return book;
	}
	
}
分享到:
评论

相关推荐

    HbaseTemplate 操作hbase

    总之,Spring Data Hadoop的HbaseTemplate为Java开发者提供了一种简洁且强大的方式来操作HBase,通过其丰富的API可以轻松实现各种HBase操作。在实际项目中,结合Spring的依赖注入和配置管理,能够有效地提升代码的可...

    hbase-0.94.27.tar.gz

    13. **API**:HBase提供了Java API,同时支持REST、Thrift和Avro接口,方便各种语言的应用程序与其交互。 14. **优化和调优**:HBase的性能受到多种因素影响,如Region大小、MemStore设置、Compaction策略等,需要...

    java链接hbase数据示例代码

    本示例代码主要展示了如何使用Java API连接HBase数据库,并执行基本的CRUD(创建、读取、更新、删除)操作,同时也包括了批量操作的支持。下面我们将详细探讨这些知识点。 首先,连接HBase需要引入HBase的客户端库...

    hbase的java client实例

    本主题将深入探讨如何使用Java客户端API与HBase进行交互,包括集成Spring、MapReduce实例以及协处理器的使用。 首先,让我们从HBase的基础开始。HBase是构建在Hadoop文件系统(HDFS)之上的开源NoSQL数据库,它为非...

    hbase的java客户端api操作示例代码.zip

    在Java环境中,HBase提供了丰富的客户端API,使得开发者能够方便地进行数据的增删查改操作。本示例代码主要涵盖了以下几个核心知识点: 1. **HBase连接与配置** 在Java中操作HBase,首先需要创建一个`...

    hbase java api 所需最精简 jar

    使用HBase进行Java开发时,通常需要依赖特定的JAR包来支持HBase的操作。"hbase java api 所需最精简 jar"这个标题意味着我们将探讨的是为了在Java环境中最小化依赖,但仍能实现基本HBase操作所需的JAR文件。 首先,...

    hbase的基本crud封装

    首先,要进行HBase的CRUD操作,我们需要对HBase进行基本的配置。在`hbase-site.xml`文件中,你需要指定`hbase.rootdir`参数,这是HBase的数据存储目录。这个路径根据个人环境会有所不同,通常是在HDFS中的一个路径,...

    java链接并对hbase进行增删改查操作的实例代码(含批量插入,范围查询等,并包含所需jar包)

    Java链接HBase进行增删改查操作是大数据领域常见的任务,尤其在处理大规模分布式存储时。HBase,作为Apache Hadoop生态系统的一部分,是一个基于列族的NoSQL数据库,提供了高性能、高可扩展性的数据存储解决方案。这...

    hbase-echarts.zip

    在Java中,我们可以使用HBase的Java客户端API来建立与HBase集群的连接,执行CRUD(创建、读取、更新、删除)操作。描述还指出,HBase的参数配置已经写在了YAML文件中,这通常是指应用的配置文件,如`application.yml...

    java集成hadoop-hbase用到的jar包

    1. `hbase-client-*.jar`:提供HBase客户端API,用于连接HBase服务,执行CRUD操作。 2. `hbase-common-*.jar`:HBase通用库,包含了HBase的数据模型和基础工具。 3. `hbase-server-*.jar`:如果你的Java程序需要直接...

    hbase-2.2.4-bin-for-hadoop3.tar.gz

    5. 测试运行:通过HBase Shell或者应用程序进行简单的CRUD操作,验证HBase是否正常运行。 需要注意的是,Hadoop 3.x系列相较于2.x有重大改进,比如增强了安全性、网络通信效率和资源调度策略。因此,使用Hadoop ...

    hbase数据可视化系统

    4. 实体类映射:为HBase的表和列族创建Java实体类,使用注解进行映射。 四、搭建HBase可视化界面 1. 页面设计:使用Thymeleaf、Freemarker或其他模板引擎,创建页面布局,设计表单和数据显示区域。 2. 控制器编写...

    hbase用于查询客户端工具

    REST Gateway是基于JAX-RS(Java API for RESTful Web Services)实现的,提供了标准的CRUD(Create, Read, Update, Delete)操作。 3. **Thrift Gateway**:Thrift是一个跨语言的服务框架,允许使用多种编程语言来...

    hbase-mybatis-demo.rar

    这个项目旨在演示如何在Java环境中,通过这些技术高效地进行Hbase的数据操作,包括增、删、改、查等基本功能。以下是关于这个项目及其涉及技术的详细说明: **Hbase**: Hbase是一个分布式的、面向列的NoSQL数据库...

    kafka、zookeeper、hadoop、hbase、phoenix集群搭建和java调用.zip

    Java调用Kafka时,可以使用Kafka的Java API创建生产者和消费者,进行消息发布与订阅。 Zookeeper是一个分布式协调服务,用于管理集群中的配置信息、命名服务和分布式同步。在Zookeeper集群中,每个节点都需配置相应...

    thrift1 查询hbase

    Thrift接口将HBase的操作转换为易于理解和使用的API,用户可以通过这些API执行基本的CRUD(创建、读取、更新、删除)操作。 3. **Python与HBase通信**:Python客户端通过导入Thrift生成的库,可以建立到HBase ...

    基于Java,封装了hbase的底层api,提供了基于注解的ORM支持,只需定义实体类对象.zip

    在这个特定的场景下,我们讨论的是一个Java库,它对HBase的底层API进行了封装,并引入了对象关系映射(ORM)的支持,允许开发者通过注解的方式定义实体类对象,从而简化HBase的操作。 首先,让我们深入了解HBase。...

    Hbase

    客户端通过连接到 ZooKeeper 获取 Master Server 的位置,然后与 RegionServer 进行通信,执行 CRUD(创建、读取、更新和删除)操作。客户端还需要处理 Region 分区和重定向,以确保数据被正确地读写到相应的 Region...

    python操作hbase

    - **Java Client API**:通过Java SDK提供的API来操作HBase。 - **Jython/Groovy/Scala**:基于JVM的语言可以通过相应的库来访问HBase。 - **REST**:提供HTTP RESTful接口。 - **Thrift**:支持多种语言,如Ruby、...

    hbase数据库

    HBase针对海量数据的读写操作进行了优化,具有非常高的数据读写速度,尤其适合于需要快速随机读写大量数据的场景。 HBase的主要特点包括: 1. 基于列式存储的数据模型:HBase通过列族来存储数据,每个列族下的列...

Global site tag (gtag.js) - Google Analytics