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;
}
}
分享到:
相关推荐
总之,Spring Data Hadoop的HbaseTemplate为Java开发者提供了一种简洁且强大的方式来操作HBase,通过其丰富的API可以轻松实现各种HBase操作。在实际项目中,结合Spring的依赖注入和配置管理,能够有效地提升代码的可...
13. **API**:HBase提供了Java API,同时支持REST、Thrift和Avro接口,方便各种语言的应用程序与其交互。 14. **优化和调优**:HBase的性能受到多种因素影响,如Region大小、MemStore设置、Compaction策略等,需要...
本示例代码主要展示了如何使用Java API连接HBase数据库,并执行基本的CRUD(创建、读取、更新、删除)操作,同时也包括了批量操作的支持。下面我们将详细探讨这些知识点。 首先,连接HBase需要引入HBase的客户端库...
本主题将深入探讨如何使用Java客户端API与HBase进行交互,包括集成Spring、MapReduce实例以及协处理器的使用。 首先,让我们从HBase的基础开始。HBase是构建在Hadoop文件系统(HDFS)之上的开源NoSQL数据库,它为非...
在Java环境中,HBase提供了丰富的客户端API,使得开发者能够方便地进行数据的增删查改操作。本示例代码主要涵盖了以下几个核心知识点: 1. **HBase连接与配置** 在Java中操作HBase,首先需要创建一个`...
使用HBase进行Java开发时,通常需要依赖特定的JAR包来支持HBase的操作。"hbase java api 所需最精简 jar"这个标题意味着我们将探讨的是为了在Java环境中最小化依赖,但仍能实现基本HBase操作所需的JAR文件。 首先,...
首先,要进行HBase的CRUD操作,我们需要对HBase进行基本的配置。在`hbase-site.xml`文件中,你需要指定`hbase.rootdir`参数,这是HBase的数据存储目录。这个路径根据个人环境会有所不同,通常是在HDFS中的一个路径,...
Java链接HBase进行增删改查操作是大数据领域常见的任务,尤其在处理大规模分布式存储时。HBase,作为Apache Hadoop生态系统的一部分,是一个基于列族的NoSQL数据库,提供了高性能、高可扩展性的数据存储解决方案。这...
在Java中,我们可以使用HBase的Java客户端API来建立与HBase集群的连接,执行CRUD(创建、读取、更新、删除)操作。描述还指出,HBase的参数配置已经写在了YAML文件中,这通常是指应用的配置文件,如`application.yml...
1. `hbase-client-*.jar`:提供HBase客户端API,用于连接HBase服务,执行CRUD操作。 2. `hbase-common-*.jar`:HBase通用库,包含了HBase的数据模型和基础工具。 3. `hbase-server-*.jar`:如果你的Java程序需要直接...
5. 测试运行:通过HBase Shell或者应用程序进行简单的CRUD操作,验证HBase是否正常运行。 需要注意的是,Hadoop 3.x系列相较于2.x有重大改进,比如增强了安全性、网络通信效率和资源调度策略。因此,使用Hadoop ...
4. 实体类映射:为HBase的表和列族创建Java实体类,使用注解进行映射。 四、搭建HBase可视化界面 1. 页面设计:使用Thymeleaf、Freemarker或其他模板引擎,创建页面布局,设计表单和数据显示区域。 2. 控制器编写...
REST Gateway是基于JAX-RS(Java API for RESTful Web Services)实现的,提供了标准的CRUD(Create, Read, Update, Delete)操作。 3. **Thrift Gateway**:Thrift是一个跨语言的服务框架,允许使用多种编程语言来...
这个项目旨在演示如何在Java环境中,通过这些技术高效地进行Hbase的数据操作,包括增、删、改、查等基本功能。以下是关于这个项目及其涉及技术的详细说明: **Hbase**: Hbase是一个分布式的、面向列的NoSQL数据库...
Java调用Kafka时,可以使用Kafka的Java API创建生产者和消费者,进行消息发布与订阅。 Zookeeper是一个分布式协调服务,用于管理集群中的配置信息、命名服务和分布式同步。在Zookeeper集群中,每个节点都需配置相应...
Thrift接口将HBase的操作转换为易于理解和使用的API,用户可以通过这些API执行基本的CRUD(创建、读取、更新、删除)操作。 3. **Python与HBase通信**:Python客户端通过导入Thrift生成的库,可以建立到HBase ...
在这个特定的场景下,我们讨论的是一个Java库,它对HBase的底层API进行了封装,并引入了对象关系映射(ORM)的支持,允许开发者通过注解的方式定义实体类对象,从而简化HBase的操作。 首先,让我们深入了解HBase。...
客户端通过连接到 ZooKeeper 获取 Master Server 的位置,然后与 RegionServer 进行通信,执行 CRUD(创建、读取、更新和删除)操作。客户端还需要处理 Region 分区和重定向,以确保数据被正确地读写到相应的 Region...
- **Java Client API**:通过Java SDK提供的API来操作HBase。 - **Jython/Groovy/Scala**:基于JVM的语言可以通过相应的库来访问HBase。 - **REST**:提供HTTP RESTful接口。 - **Thrift**:支持多种语言,如Ruby、...
HBase针对海量数据的读写操作进行了优化,具有非常高的数据读写速度,尤其适合于需要快速随机读写大量数据的场景。 HBase的主要特点包括: 1. 基于列式存储的数据模型:HBase通过列族来存储数据,每个列族下的列...