1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
/** * coprocessor
* 当用户在使用get命令从表中取特定的row时,就会触发这个自定义的observer coprocessor
* 触发条件是用户使用get指定的rowkey与程序中指定的FIXED_ROW一致为@@@GETTIME@@@时
* 触发后的操作是程序会在服务端生成一个keyvalue实例,并将这个实例返回给客户端。这个kv实例是以
* @@@GETTIME@@@为rowkey,列族和列标识符均为@@@GETTIME@@@,列值为服务器端的时间
*/
package org.apache.hbase.kora.coprocessor; import java.io.IOException; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.hbase.KeyValue; import org.apache.hadoop.hbase.client.Get; import org.apache.hadoop.hbase.coprocessor.BaseRegionObserver; import org.apache.hadoop.hbase.coprocessor.ObserverContext; import org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment; import org.apache.hadoop.hbase.regionserver.HRegion; import org.apache.hadoop.hbase.util.Bytes; public class RegionObserverExample extends BaseRegionObserver {
public static final Log LOG = LogFactory.getLog(HRegion. class );
public static final byte[] FIXED_ROW = Bytes.toBytes( "@@@GETTIME@@@" );
@Override
public void preGet(ObserverContext<RegionCoprocessorEnvironment> c,
Get get, List<KeyValue> result) throws IOException {
LOG.debug( "Got preGet for row: " + Bytes.toStringBinary(get.getRow()));
if (Bytes.equals(get.getRow(), FIXED_ROW)) {
KeyValue kv = new KeyValue(get.getRow(), FIXED_ROW, FIXED_ROW,
Bytes.toBytes(System.currentTimeMillis()));
LOG.debug( "Had a match, adding fake kv: " + kv);
result.add(kv);
}
}
} |
1
2
3
4
5
6
7
8
9
|
## 已经上传到hadoop1上 [grid@hadoop1 ~]$ ls / var /ftp/pub/RegionObserverExample.jar
/ var /ftp/pub/RegionObserverExample.jar
## 由于是完全分布式系统,为了方便管理,我们将jar包存放到hadoop hdfs的根目录下的jars目录下 [grid@hadoop1 ~]$ hdfs dfs -put / var /ftp/pub/RegionObserverExample.jar /jars
## OK,验证已经上传成功 [grid@hadoop1 ~]$ hdfs dfs -ls /jars Found 1 items -rw-r--r-- 4 grid supergroup 3884 2014-11-15 04:46 /jars/RegionObserverExample.jar |
1
2
3
4
5
6
7
8
9
|
## 首先修改hbase-env.sh中的这行,将存放Coprocessor jar文件的目录添加到Hbase的classpath中 export HBASE_CLASSPATH=hdfs: //hadoop1:8020/jars
## 然后修改hbase-site.xml文件,添加一个选项 <!-- 这里要注意value中一定要写完整的类名(即把包名写全),否则报ClassNotFound错 -->
<property>
<name>hbase.coprocessor.region.classes</name>
<value>org.apache.hbase.kora.coprocessor.RegionObserverExample</value>
</property>
|
1
2
3
4
5
6
7
8
9
10
|
## 使用get命令从kora表中取rowkey为@@@GETTIME@@@的行 hbase(main):014:0> get 'kora' , '@@@GETTIME@@@'
COLUMN CELL @@@GETTIME@@@:@@@GETTIM timestamp=9223372036854775807, value=\x00\x00\x01I\xB0@\xA0\xE0
E@@@
1 row(s) in 0.0420 seconds ## 将列值转化为uninx 时间 hbase(main):015:0> Time.at(Bytes.toLong( "\x00\x00\x01I\xB0\x0BZ\x0B" .to_java_bytes)/ 1000)
=> Sat Nov 15 04:42:54 +0800 2014 ## 从上面的测试中看出,我们自定义的Coprocessor已经成功的部署到分布式系统中了。 |
1
2
3
4
5
6
7
8
9
10
11
12
13
|
## 看hbase-env.sh的配置 [grid@hadoop1 ~]$ grep "jars" /opt/hbase-0.98.4-hadoop2/conf/hbase-env.sh
export HBASE_CLASSPATH=hdfs: //hadoop1:8020/jars
## 注释掉hbase-site.xml中的Coprocessor的配置 [grid@hadoop1 ~]$ tail -7 /opt/hbase-0.98.4-hadoop2/conf/hbase-site.xml <!-- <property>
<name>hbase.coprocessor.region.classes</name>
<value>org.apache.hbase.kora.coprocessor.RegionObserverExample</value>
</property>
-->
</configuration> |
1
2
3
4
5
6
7
8
9
10
11
|
## 格式:[coprocessor jar file location] | class name | [priority] | [arguments]
## 列子:hbase> alter 't1' ,
## 'coprocessor' => 'hdfs:///foo.jar|com.foo.FooRegionObserver|1001|arg1=1,arg2=2'
## 由于一定设置了classpath,所以可以忽略jar file location,如下: hbase(main):101:0> alter 'kora' ,
hbase(main):102:0* 'coprocessor' => '|org.apache.hbase.kora.coprocessor.RegionObserverExample|'
Updating all regions with the new schema...
0/1 regions updated. 1/1 regions updated. Done. 0 row(s) in 2.5670 seconds |
1
2
3
4
5
6
7
|
hbase(main):103:0> describe 'kora'
DESCRIPTION ENABLED 'kora' , {TABLE_ATTRIBUTES => {coprocessor $1 => '|org.apache.hbase.kora.coprocessor.RegionObserverExa true
mple| '}, {NAME => ' project ', DATA_BLOCK_ENCODING => ' NONE ', BLOOMFILTER => ' ROW', REPLICATION_SCOPE
=> '0' , VERSIONS => '1' , COMPRESSION => 'NONE' , MIN_VERSIONS => '0' , TTL => 'FOREVER' , KEEP_DELETED_
CELLS => 'false' , BLOCKSIZE => '65536' , IN_MEMORY => 'false' , BLOCKCACHE => 'true' }
1 row(s) in 0.0580 seconds |
1
2
3
4
5
6
7
8
9
|
## kora表,指定了Coprocessor hbase(main):104:0> get 'kora' , '@@@GETTIME@@@'
COLUMN CELL @@@GETTIME@@@:@@@GETTIME@@@ timestamp=9223372036854775807, value=\x00\x00\x01I\xB0\x985W
1 row(s) in 0.0360 seconds ## testtable,没有指定Coprocessor hbase(main):105:0> get 'testtable' , '@@@GETTIME@@@'
COLUMN CELL 0 row(s) in 0.0180 seconds |
1
|
'coprocessor' => '|org.apache.hbase.kora.coprocessor.RegionObserverExample|USER|'
|
相关推荐
标题 "HBaseObserver:通过HBase Observer同步数据到ElasticSearch" 涉及到的是在大数据处理领域中,如何实现在HBase数据库与ElasticSearch之间进行数据同步的技术方案。这里主要介绍HBase Observer机制以及它如何与...
HBase 和 Solr 都是大数据处理中的关键组件。HBase 是一个分布式的、面向列的NoSQL数据库,适合存储大规模结构化数据。而Solr 是一个流行的全文搜索引擎,提供高效的全文检索、命中高亮、拼写检查等特性。将HBase的...
在大数据热潮中,推出了NoSQL数据库,这种天生就为分布式存储而设计的技术,尤其以Apache HBase为代表,占领海量数据存储技术的大半壁江山。本教视从实战角度出来,向学员们手把手掌握HBase使用精髓,让学员达到如下...
在提供的压缩包文件"**Hbase-Observer-ElasticSearch**"中,可能包含了实现这个功能的源代码示例。这些代码可以帮助开发者理解如何集成HBase和Elasticsearch,以及如何编写和配置Coprocessor。通过学习和参考这些...
HBase通过observer和endpoint两种形式的协处理器来扩展其功能。 12. 在HBase调优方面,涵盖了通用优化、Linux系统优化、HDFS优化、MapReduce优化以及HBase本身、内存、JVM和Zookeeper的优化策略。通过适当调优,...
在分布式大数据存储领域,HBase是一个非常重要的列式数据库,尤其在处理海量实时数据时表现卓越。本主题将深入探讨如何使用Java客户端API与HBase进行交互,包括集成Spring、MapReduce实例以及协处理器的使用。 首先...
- **高级功能**:HBase还提供了更多的高级功能,如过滤器(Filter)、批量操作(Batch)、观察者(Observer)等。 ### 面向的目标受众 该教程主要面向以下几类人群: - **希望从事大数据分析领域的专业人士**:包括软件...
### HBase Coprocessor 优化与实验 #### HBase及Coprocessor概述 HBase是一种非关系型、面向列的分布式数据库系统,它基于Hadoop之上构建,旨在为大规模数据提供高可靠、高性能的支持。HBase的核心优势在于其能够...
Observer是监控HBase操作的轻量级钩子,例如在数据写入前或读取后执行特定逻辑;Endpoint则用于执行更复杂的任务,如聚合计算。 在Java API中,开发HBase Coprocessor涉及以下核心类: 1. `CoprocessorService`...
主要通过hbase的coprocessor的Observer实现,通过coprocessor在记录插入hbase时向solr中创建索引。 项目核心为SolrIndexCoprocessorObserver,该类继承BaseRegionObserver,并实现postPut和postDelete方法,以实现...
1. Observer:Observer是运行在Region Server上的,它监听并响应HBase的各种操作,如RegionObserver、RegionServerObserver、MasterObserver、WALObserver和BulkLoadObserver。例如,RegionObserver可以用于在数据...
HBase Coprocessor 为 HBase 提供了极大的灵活性和可扩展性,通过 Endpoint 和 Observer 接口,不仅可以提高数据处理的效率,还能简化复杂的业务逻辑。无论是实现高效的聚合操作还是创建和维护二级索引,Coprocessor...
- 在HBase表的元数据中配置Observer,指定Observer类的位置和加载顺序。 5. **使用示例** 一个简单的示例可能是实现一个预写日志(Pre-Written Log, PLOG)的RegionObserver,它在数据写入HBase之前记录每个Put...
通过引入 Observer 和 Endpoint 机制,HBase 不仅能更好地支持复杂的数据处理需求,还能在安全性方面提供更强大的保障。未来,随着 HBase 的不断发展和完善,Coprocessor 的应用场景将会更加广泛,为用户提供更多...
### ZooKeeper原理及其在Hadoop和HBase中的应用 #### ZooKeeper概述 ZooKeeper是一个由雅虎开发的开源分布式协调服务系统,旨在为分布式应用提供一致性和可靠性支持。它是Google Chubby系统的开源版本,主要功能...
**大数据平台-HBASE详解** HBASE是一个基于Hadoop Distributed File System (HDFS)构建的NoSQL分布式数据库系统,专门设计用于处理大规模数据。它具备高可靠性和高性能,并且支持列式存储、可扩展性以及实时读写...
2. **Coprocessor类型**:HBase中的Coprocessor分为两种类型:Observer和Endpoint。Observer是在特定操作(如Get、Put、Scan等)执行时被调用,用于拦截并修改操作行为;Endpoint则更像是服务,可以在RegionServer上...
在IT领域,尤其是在大数据存储和检索的环境下,HBase作为一种分布式、面向列的NoSQL数据库,因其高效的数据处理能力和大规模数据存储能力而被广泛应用。本文将深入探讨如何利用协处理器(Coprocessor)机制在HBase中...
包括一些有用的协处理器示例,其中一个用于 Observer 协处理器,以及更复杂的 Endpoint 协处理器示例。 端点协处理器/ 包括用于需要使用 Google Protocol Buffers 进行编译并用作序列化介质的较新版本 HBase 的协...