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|'
|
欢迎大家访问我的个人网站 萌萌的IT人
相关推荐
叶梓老师整理的Hadoop2.2.0+Hbase0.98.4+sqoop-1.4.4+hive-0.98.1安装手册,非常实用
在编写完成后,将Coprocessor打包成jar包,并部署到HBase环境中。 加载Coprocessor: 加载Coprocessor有两种方式:静态加载和动态加载。静态加载是通过修改HBase的配置文件,指定Coprocessor的类路径和加载顺序。...
HBase单机版部署教程 HBase是一种基于Hadoop的分布式、面向列的NoSQL数据库,它提供了高性能、可扩展、灵活的数据存储解决方案。下面是HBase单机版部署的详细教程: 安装JDK 首先,我们需要安装JDK,因为HBase...
讲师:陈杨——快手大数据高级研发工程师 ...内容概要:(1)讲解hbase coprocessor的原理以及使用场景,(2) coprocessor整个流程实战,包括开发,加载,运行以及管理(3)结合1,2分析coprocessor在rsgroup中的具体使用
在HBase中,Coprocessor机制是一个强大的特性,它允许用户在HBase服务器端自定义扩展功能,如数据过滤、统计计算、访问控制等。这个压缩包“hbase_coprocessor_hbase_coprocessorjava_源码”显然包含了用Java API...
hbasesink 自定义序列化类 ,可实现自定义rowkey及去除字段两边索引,具体请看下代码。 hbasesink 自定义序列化类 ,可实现自定义rowkey及去除字段两边索引,具体请看下代码。
WhaleAI的自动化部署方案简化了HBase在Python环境中的配置和管理。通过使用Python库,如HappyBase或pyhbase,开发者可以轻松地在Python中操作HBase,实现数据的增删改查、表的创建和管理等。WhaleAI的解决方案可能...
其中,Coprocessor作为HBase的一项关键特性,允许用户自定义逻辑以增强系统的灵活性和扩展性。 #### HBase Coprocessor 的概念与作用 Coprocessor的概念来源于Google BigTable的研究成果,它允许用户在服务器端...
2. **配置Coprocessor**:在HBase的表或列族配置中,添加Coprocessor的类路径和优先级。这样,每当有数据写入时,Coprocessor就会被触发执行。 3. **连接Elasticsearch**:在Coprocessor中,使用Elasticsearch的...
说明:使用外部zookeeper3.4.13之hbase2.3.5一键部署工具,支持部署、启动、停止、清除、连接,支持自定义服务端口,数据存储目录等功能,已在生产环境使用。 Options: deploy.sh build single 构建并启动一个hbase...
3.集群能正常运行的条件是集群可节点宕机数应保证有超过集群机器总数一半的机器在运行,因此从经济和实用性来说,集群的节点一般是奇数个,本文部署4台机器,其容灾能力与部署3台机器一致,即只能宕机1台
Hbase2.2.0集群部署 Hbase是基于Hadoop的分布式、面向列的NoSQL数据库,具有高可扩展性和高性能的特点。今天,我们将学习如何部署Hbase2.2.0集群。 一、文件解压和环境变量配置 在部署Hbase之前,我们需要解压...
1.灵活的数据处理:HBase Coprocessor 可以对 HBase 表中的数据进行灵活的处理,例如聚合计算、排序、过滤等。 2.高性能:HBase Coprocessor 可以提高 HBase 的性能,例如使用 Endpoint 机制可以实现高效的数据处理...
HBase Coprocessor 是一种灵活且强大的机制,它允许用户在 HBase 上执行自定义逻辑,从而扩展 HBase 的功能。Coprocessor 的灵感源自 BigTable 的协处理器概念,其主要特性在于能够在 HBase 的 RegionServer 上执行...
在Hadoop和HBase中,Zookeeper扮演着关键角色,如集群中的节点发现和领导者选举,确保服务的稳定运行。 **Hadoop的安装部署**: 1. **环境准备**:确保服务器之间网络可达,安装Java开发环境。 2. **安装Hadoop**:...
在上述部署步骤中,注意HBase的配置文件`hbase-env.sh`用于设置Java环境,`hbase-site.xml`用于定义HBase的各种配置参数,如HDFS目录、是否开启分布式模式、Master地址、临时文件目录以及ZooKeeper的配置。...
注意:zookeeper3.4.13和hbase2.2.2都是采用docker-compose方式部署 原文链接:https://blog.csdn.net/m0_37814112/article/details/118794130 说明:使用外部zookeeper之hbase2.2.2一键部署工具,支持部署、启动、...
其中,HBase Coprocessor是其提供的一种强大的功能,允许用户在数据存储和检索过程中实现自定义逻辑,从而提高了系统的灵活性和性能。本资料“HBase Coprocessor的实现与应用.zip”深入探讨了这一特性,主要涵盖了...