关于spring-hbase中scan + filter的操作;通过HbaseTemplate + HTableInterface完成如下操作
一、测试源码
@Component
public class HbaseUtil implements InitializingBean {
private String tableName = "users";
// table bytes
private byte[] tableNameAsBytes = Bytes.toBytes("users");
// family bytes
private static byte[] CF_INFO = Bytes.toBytes("cfInfo");
// column bytes
private byte[] qUser = Bytes.toBytes("user");
private byte[] qEmail = Bytes.toBytes("email");
private byte[] qPassword = Bytes.toBytes("password");
@Resource(name = "hbaseConfiguration")
private Configuration config;
@Autowired
private HbaseTemplate hbaseTemplate;
// hbase administrator
private HBaseAdmin admin;
// initialize
public void initialize() throws IOException {
if (admin.tableExists(tableNameAsBytes)) {
if (!admin.isTableDisabled(tableNameAsBytes)) {
System.out.printf("Disabling %s\n", tableName);
admin.disableTable(tableNameAsBytes);
}
System.out.printf("Deleting %s\n", tableName);
admin.deleteTable(tableNameAsBytes);
}
HTableDescriptor tableDescriptor = new HTableDescriptor(tableName);
HColumnDescriptor columnDescriptor = new HColumnDescriptor(CF_INFO);
tableDescriptor.addFamily(columnDescriptor);
admin.createTable(tableDescriptor);
}
// add data
public User save(final String userName, final String email,
final String password) {
return hbaseTemplate.execute(tableName, new TableCallback<User>() {
public User doInTable(HTableInterface table) throws Throwable {
User user = new User(userName, email, password);
Put p = new Put(Bytes.toBytes(user.getName()));
p.add(CF_INFO, qUser, Bytes.toBytes(user.getName()));
p.add(CF_INFO, qEmail, Bytes.toBytes(user.getEmail()));
p.add(CF_INFO, qPassword, Bytes.toBytes(user.getPassword()));
table.put(p);
return user;
}
});
}
// query data
public List<User> findAll() {
return hbaseTemplate.find(tableName, "cfInfo", new RowMapper<User>() {
@Override
public User mapRow(Result result, int rowNum) throws Exception {
return new User(Bytes.toString(result.getValue(CF_INFO, qUser)),
Bytes.toString(result.getValue(CF_INFO, qEmail)),
Bytes.toString(result.getValue(CF_INFO, qPassword)));
}
});
}
// scanner
public void scannerData() throws IOException{
Scan scan = new Scan();
scan.addColumn(CF_INFO, qUser);
// comparate
Filter filter = new RowFilter(CompareFilter.CompareOp.LESS_OR_EQUAL,new BinaryComparator(Bytes.toBytes("userName_15")));
// regex
// filter = new RowFilter(CompareFilter.CompareOp.EQUAL,
// new RegexStringComparator(".*."));
// substring
filter = new RowFilter(CompareFilter.CompareOp.EQUAL,new SubstringComparator("_5"));
scan.setFilter(filter);
HTableInterface htable = HbaseUtils.getHTable(tableName, config);
ResultScanner resultScanner = null;
resultScanner = htable.getScanner(scan);
for(Result result : resultScanner){
System.out.println(result);
}
resultScanner.close();
/*try{
resultScanner = htable.getScanner(scan);
for(Result result : resultScanner){
System.out.println(result);
}
}catch(IOException io){
System.out.println(io.getMessage());
}catch(Exception exp){
System.out.println(exp.toString());
}finally{
resultScanner.close();
}*/
}
// scanner column family
public void scanColumnData() throws IOException{
// Family Column
Filter filter = new FamilyFilter(CompareFilter.CompareOp.LESS_OR_EQUAL,
new BinaryComparator(Bytes.toBytes("cfInfo")));
// Scanner
Scan scan = new Scan();
scan.setFilter(filter);
//
HTableInterface htable = HbaseUtils.getHTable(tableName, config);
ResultScanner scanner = htable.getScanner(scan);
//
for(Result result : scanner){
System.out.println(result);
}
//
Get get1 = new Get(Bytes.toBytes("userName_3"));
get1.setFilter(filter);
Result result1 = htable.get(get1);
System.out.println(" result of get() : " + result1);
//
scanner.close();
htable.close();
}
public void scannerSpecifiedColumnData() throws IOException{
//filter
Filter filter = new ValueFilter(CompareFilter.CompareOp.GREATER_OR_EQUAL,
new SubstringComparator("_4"));
//
Scan scan = new Scan();
scan.setFilter(filter);
//
HTableInterface htable = HbaseUtils.getHTable(tableName, config);
ResultScanner scanner = htable.getScanner(scan);
//
for(Result result : scanner){
for(KeyValue kv : result.raw()){
System.out.println(" KV: " + kv + " ,Vlaue = " + Bytes.toString(kv.getValue()));
}
}
}
public void filter(boolean drop,
CompareFilter.CompareOp operator,
ByteArrayComparable comparator) throws IOException{
Filter filter = null;
if(comparator != null){
filter = new DependentColumnFilter(Bytes.toBytes("cfInfo"),
Bytes.toBytes("email"),drop,operator,comparator);
}
else{
filter = new DependentColumnFilter(Bytes.toBytes("cfInfo"),
Bytes.toBytes("email"),drop);
}
//
Scan scan = new Scan();
scan.setFilter(filter);
HTableInterface htable = HbaseUtils.getHTable(tableName, config);
ResultScanner scanner = htable.getScanner(scan);
for(Result result : scanner){
for(KeyValue kv : result.raw()){
System.out.println(" KV: " + kv + " ,Vlaue = " + Bytes.toString(kv.getValue()));
}
}
scanner.close();
//
Get get = new Get(Bytes.toBytes("userName_1"));
get.setFilter(filter);
Result result = htable.get(get);
for(KeyValue kv : result.raw()){
System.out.println(" KV: " + kv + " ,Vlaue = " + Bytes.toString(kv.getValue()));
}
htable.close();
}
public void singleColumnValueFilter() throws IOException{
SingleColumnValueFilter singleFilter = new SingleColumnValueFilter(
Bytes.toBytes("cfInfo"),
Bytes.toBytes("password"),
CompareFilter.CompareOp.NOT_EQUAL,
new SubstringComparator("password_0")
);
singleFilter.setFilterIfMissing(true);
//
Scan scan = new Scan();
scan.setFilter(singleFilter);
HTableInterface htable = HbaseUtils.getHTable(tableName, config);
ResultScanner scanner = htable.getScanner(scan);
for(Result result : scanner){
for(KeyValue kv : result.raw()){
System.out.println(" KV: " + kv + " ,Vlaue = " + Bytes.toString(kv.getValue()));
}
}
scanner.close();
System.out.println(" get + filter === ");
Get get = new Get(Bytes.toBytes("userName_8"));
get.setFilter(singleFilter);
Result result = htable.get(get);
for(KeyValue kv : result.raw()){
System.out.println(" KV: " + kv + " ,Vlaue = " + Bytes.toString(kv.getValue()));
}
htable.close();
}
@Override
public void afterPropertiesSet() throws Exception {
admin = new HBaseAdmin(config);
}
}
二、调用源码
public class App {
private static final Log log = LogFactory.getLog(App.class);
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
AbstractApplicationContext context = new ClassPathXmlApplicationContext(
"/META-INF/spring/application-context.xml", App.class);
log.info("HBase Application Running");
context.registerShutdownHook();
// create hbase util
HbaseUtil hbase = context.getBean(HbaseUtil.class);
// execute initialize (administrator)
// hbase.initialize();
// add data
/*for(int i=0; i<= 10 ; i++){
hbase.save("userName_" + i, "email_" + (i+1), "password_" + i);
}*/
// queay
/*List<User> users = hbase.findAll();
for(User user : users){
System.out.println(user);
}*/
// scan
try{
//hbase.scannerData();
//hbase.scanColumnData();
//
//hbase.scannerSpecifiedColumnData();
// DependentColumnFilter
/*System.out.println(" no compare ...");
hbase.filter(true, CompareFilter.CompareOp.NO_OP, null);
System.out.println(" no compare ... filter...");
hbase.filter(false, CompareFilter.CompareOp.NO_OP, null);
System.out.println(" CompareFilter EQUAL ...");
hbase.filter(true, CompareFilter.CompareOp.EQUAL,
new BinaryPrefixComparator(Bytes.toBytes("email_4")));
System.out.println(" CompareFilter EQUAL ... filter...");
hbase.filter(false, CompareFilter.CompareOp.EQUAL,
new BinaryPrefixComparator(Bytes.toBytes("email_4")));
System.out.println(" RegexStringComparator EQUAL ...");
hbase.filter(true, CompareFilter.CompareOp.EQUAL,
new RegexStringComparator(".*_*"));
System.out.println(" RegexStringComparator EQUAL ... filter...");
hbase.filter(false, CompareFilter.CompareOp.EQUAL,
new RegexStringComparator(".*_*"));*/
hbase.singleColumnValueFilter();
}
catch(IOException io){
System.out.println(io.getMessage());
}
System.out.println(" hbase operation is over .......");
}
}
关于scan和filter的详细解释则可以参考《hbase权威指南》
分享到:
相关推荐
### Hadoop与HBase系列配置知识点 #### 一、Hadoop概述 Hadoop是一个由Apache基金会维护的开源软件框架,其主要目标是为了实现可靠、可扩展的分布式计算环境。通过简单编程模型支持大规模数据集在计算机集群上的...
- **第7章:构建实际应用**:通过一系列具体的案例研究,展示如何使用HBase构建复杂的应用程序,涵盖了从需求分析到系统设计、实现再到测试和部署的全过程。 #### 三、HBase核心技术详解 **1. 数据存储模型**:...
### Java大数据作业_3HBase知识点解析 #### 1. 使用Java集合的代码描述HBase的表结构 在HBase中,表结构由一系列的行组成,每行都有唯一的row key,并且每个单元格都存储在列族下。为了描述这样一个表结构,我们...
3. **配置HBase**:编辑`conf/hbase-site.xml`,设置HBase的主配置,如`hbase.rootdir`(HDFS中的HBase目录)和`hbase.zookeeper.quorum`(Zookeeper集群地址)。 4. **启动与停止**:使用`start-hbase.sh`启动HBase...
此版本可能包含了对HBase 1.2系列稳定性的改进和一些新特性。开发者应当根据自己的项目需求选择合适的版本。 **核心组件和功能:** 1. **HBase客户端API**:这是Java-HBase开发包的核心,提供了一组Java接口和类,...
系统架构方面,HBase有三个主要组件:Client、Zookeeper和服务器端组件。Client提供了多种访问接口,包括Java API、Shell命令、RESTful API等,方便用户与HBase交互。Zookeeper是集群的协调者,负责元数据管理、选举...
在Java客户端上连接HBase集群时,需要配置一系列的环境和依赖,其中包括了`winutils`工具。`winutils-2.2.0.zip`这个压缩包就是针对Windows用户提供的,用于配置Hadoop环境,以便于与HBase交互。 首先,`winutils....
2. **熟练使用HBase操作常用的Shell命令**:通过HBase Shell,用户可以执行诸如创建表、插入数据、查询数据、删除表等一系列管理操作。 3. **熟悉HBase操作常用的Java API**:Java API允许开发者在应用程序中直接与...
7. **兼容性**:HBase 1.2.6版本与Hadoop 2.x系列兼容,可以无缝地集成到Hadoop生态系统中,如MapReduce、HDFS和YARN。 **资源获取与安装**: 原始资源位于Apache的官方归档服务器上,地址是:`...
7. **Scans**:HBase支持扫描操作,允许用户按需获取一系列行或满足特定条件的行,这在数据分析和查询场景中非常有用。 8. **Coprocessors**:HBase引入了Coprocessors机制,允许用户在RegionServer端自定义计算...
大数据云计算技术系列 Hbase 简介 一、简介 Hbase源于Chad Walters和Jim在2006年11月提出的BigTable概念,它是一个开源的分布式数据库,最初作为Hadoop贡献项目的一部分在2007年2月创建。2007年10月,Hbase成为首...
##### 3. 区域大小与分割 - **最大尺寸**:每个区域都有一个可配置的最大尺寸。 - **分割操作**:当一个区域达到其最大尺寸或者基于用户的请求时,它会被分割成两个较小的区域。这两个新区域可以被分配到不同的...
滴滴HBase平台进行了一系列的技术改进,包括Web UI的改进以显示群组、MoveTables的Bug修复以及CreateTableHandler的修复。 9. 服务和工作流 滴滴HBase服务还负责创建项目和表,并且有相关的工作流程。 根据文件...
3. 升级部分: - 指导用户如何在不同版本之间进行HBase的升级操作。 - 分别介绍了从0.94.x升级到0.96.x、0.92.x升级到0.94.x、0.90.x升级到0.92.x、以及从0.20x或0.89x升级到0.90.x的详细步骤。 4. HBaseShell...
它支持对HBase表进行增删改查等一系列操作,对于开发人员和系统管理员来说是非常实用的工具之一。本文将基于提供的描述和部分代码示例,深入讲解HBase Shell的操作方法。 ### 创建表 在HBase中,表由行键(Row Key...
为了更好地管理和监控HBase集群,推荐使用HBase自带的Web UI或者第三方工具如Ambari、Cloudera Manager等。同时,定期进行健康检查,监控日志,以及对集群性能进行调优都是运维过程中的重要环节。 总之,HBase的...
**大数据系列-Hbase** HBase,全称是Apache HBase,是构建在Hadoop分布式文件系统(HDFS)之上的开源非关系型数据库(NoSQL),设计用于处理大规模数据集,提供实时读写访问。HBase是Google Bigtable的一个开源实现...
3. **HBase 0.98.3-hadoop2**: 这个版本的HBase是针对Hadoop 2.x系列优化的。HBase提供了一个分布式的、版本化的、列族式的数据库,非常适合存储半结构化或非结构化数据。0.98.3是HBase的一个稳定版本,提供了增强...