HBase操作工具类(java),具有获取表名(getTable)、存入数据(put)等功能。
如果有需要,大家可以自行增加。
1)在pom.xml中导入HBase依赖
<!-- HBase 依赖-->
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>1.2.6</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-server</artifactId>
<version>1.2.6</version>
</dependency>
2)编写HBase操作工具类
package com.fyy.spark.project.utils;
import org.apache.commons.io.IOUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;
import java.io.IOException;
/**
* HBase操作工具类:Java工具类建议采用单例模式封装
*/
public class HBaseUtils {
Admin admin = null;
Configuration config = null;
Connection connection = null;
/**
* 私有改造方法
*/
private HBaseUtils() {
config = new Configuration();
config.set("hbase.zookeeper.quorum", "01.server.bd:2181,02.server.bd:2181,03.server.bd:2181");
config.set("hbase.rootdir", "hdfs://01.server.bd:8020/hbase");
try {
connection = ConnectionFactory.createConnection(config);
admin = connection.getAdmin();
} catch (IOException e) {
e.printStackTrace();
}
}
private static HBaseUtils instance = null;
public static synchronized HBaseUtils getInstance() {
if (null == instance) {
instance = new HBaseUtils();
}
return instance;
}
/**
* 根据表名获取到Table实例
*/
public Table getTable(String tableName) {
Table table = null;
try {
table = connection.getTable(TableName.valueOf(tableName));
} catch (IOException e) {
e.printStackTrace();
}
return table;
}
/**
* 添加一条记录到HBase表
*
* @param tableName HBase表名
* @param rowkey HBase表的rowkey
* @param cf HBase表的columnfamily
* @param column HBase表的列
* @param value 写入HBase表的值
*/
public void put(String tableName, String rowkey, String cf, String column, String value) {
Table table = null;
try {
table = getTable(tableName);
Put put = new Put(Bytes.toBytes(rowkey));
put.addColumn(Bytes.toBytes(cf), Bytes.toBytes(column), Bytes.toBytes(value));
table.put(put);
} catch (IOException e) {
e.printStackTrace();
} finally {
IOUtils.closeQuietly(table);
}
}
/**
* 根据表名和输入条件获取HBase的记录数
*/
public Map<String, Long> query(String tableName, String condition) throws Exception {
Map<String, Long> map = new HashMap<>();
Table table = getTable(tableName);
String cf = "info";
String qualifier = "count";
Scan scan = new Scan();
Filter filter = new PrefixFilter(Bytes.toBytes(condition));
scan.setFilter(filter);
ResultScanner rs = table.getScanner(scan);
for(Result result : rs) {
String row = Bytes.toString(result.getRow());
long clickCount = Bytes.toLong(result.getValue(cf.getBytes(), qualifier.getBytes()));
map.put(row, clickCount);
}
return map;
}
public static void main(String[] args) throws Exception {
//Table table = HBaseUtils.getInstance().getTable("fyy_clickcount");
//System.out.println(table.getName().getNameAsString());
// String tableName = "fyy_clickcount";
// String rowkey = "20190201_Android";
// String cf = "info";
// String column = "count";
// String value = "12";
//
// HBaseUtils.getInstance().put(tableName, rowkey, cf, column, value);
Map<String, Long> map = HBaseUtils.getInstance().query("fyy_clickcount" , "20190201");
for(Map.Entry<String, Long> entry: map.entrySet()) {
System.out.println(entry.getKey() + " : " + entry.getValue());
}
}
}