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|'
|
相关推荐
测试环境CDH 5.1.0HBase 0.98ElasticSearch 1.5.0使用Maven打包mvn clean compile assembly:single部署请参照:
java 利用 sping-data-hadoop HbaseTemplate 操作hbase find get execute 等方法 可以直接运行
搭建pinpoint需要的hbase初始化脚本hbase-create.hbase
HBase(hbase-2.4.9-bin.tar.gz)是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System...
1. HBase有哪些基本的特征? 1 HBase特征: 1 2. HBase相对于关系数据库能解决的问题是什么? 2 HBase与关系数据的区别? 2 HBase与RDBMS的区别? 2 3. HBase的数据模式是怎么样的?即有哪些元素?如何存储?等 3 1...
在大数据热潮中,推出了NoSQL数据库,这种天生就为分布式存储而设计的技术,尤其以Apache HBase为代表,占领海量数据存储技术的大半壁江山。本教视从实战角度出来,向学员们手把手掌握HBase使用精髓,让学员达到如下...
hbase-sdk是基于hbase-client和hbase-thrift的原生API封装的一款轻量级的HBase ORM框架。 针对HBase各版本API(1.x~2.x)间的差异,在其上剥离出了一层统一的抽象。并提供了以类SQL的方式来读写HBase表中的数据。对...
注意:zookeeper3.4.13和hbase2.3.5都是采用docker-compose方式部署 原文链接:https://blog.csdn.net/m0_37814112/article/details/120915194 说明:使用外部zookeeper3.4.13之hbase2.3.5一键部署工具,支持部署、...
1. 请用java集合的代码描述HBase的表结构 2. 请简述HBase中数据写入最后导致Region分裂的全过程 3. 如果设计一个笔记的表,表中要求有笔记的属性和笔记的内容,怎么做 4. HBase部署时如何指定多个zookeeper 5. HBase...
HBase 官方文档.pdf HBase的操作和编程.pdf HBase Cpressr优化与实验 郭磊涛.pdf null【HBase】Data Migratin frm Gri t Clu Cmputing - Natural Sienes .pdf 分布式数据库HBase快照的设计与实现.pdf 【HBase】...
HBase开发实战,HBase学习利器:HBase实战
HBase开启审计日志
A.3实验三:熟悉常用的HBase操作 本实验对应第5章的内容。 A.3.1 实验目的 (1)理解HBase在Hadoop体系结构中的角色。(2)熟练使用HBase操作常用的 Shell命令。(3)熟悉HBase操作常用的 Java API。 A.3.2 实验平台 (1...
从HBase的集群搭建、HBaseshell操作、java编程、架构、原理、涉及的数据结构,并且结合陌陌海量消息存储案例来讲解实战HBase 课程亮点 1,知识体系完备,从小白到大神各阶段读者均能学有所获。 2,生动形象,化繁为...
HBASE
hbase 资源合集 hbase 企业应用开发实战 权威指南 hbase 实战 hbase 应用架构
HBase3.0参考指南 This is the official reference guide for the HBase version it ships with. Herein you will find either the definitive documentation on an HBase topic as of its standing when the ...
如果你正在寻找一种具备可伸缩性的存储解决方案来适应几乎没有穷尽的数据的话,这本书将可以向你表明apache hbase完全能够满足你的需求。作为google bigtable架构的开源实现,hbase能够支持数以十亿计的记录数和数以...
由于网上下的不支持最新的hadoop,hbase 版本自己稍微修改了下,支持最新版本HBase的图形化管理工具,目前修改改为hadoop-2.7.1版本,hbase-1.1.2版本,依赖可以自己切换,源代码已经包括再里边了,如想修改直接修改...
│ Day15[Hbase 基本使用及存储设计].pdf │ ├─02_视频 │ Day1501_Hbase的介绍及其发展.mp4 │ Day1502_Hbase中的特殊概念.mp4 │ Day1503_Hbase与MYSQL的存储比较.mp4 │ Day1504_Hbase部署环境准备.mp4 │ Day...