`
dyllove98
  • 浏览: 1405281 次
  • 性别: Icon_minigender_1
  • 来自: 济南
博客专栏
73a48ce3-d397-3b94-9f5d-49eb2ab017ab
Eclipse Rcp/R...
浏览量:39053
4322ac12-0ba9-3ac3-a3cf-b2f587fdfd3f
项目管理checkList...
浏览量:80058
4fb6ad91-52a6-307a-9e4f-816b4a7ce416
哲理故事与管理之道
浏览量:133163
社区版块
存档分类
最新评论

Hbase0.98.4中部署用户自定义的Observer Coprocessor

阅读更多

 Hbase自0.92之后开始支持Coprocessor(协处理器),旨在使用户可以将自己的代码放在regionserver上来运行,即将计算程序移动到数据所在的位置进行运算。这一点与MapReduce的思想一致。Hbase的Coprocess分为observer和endpoint两大类。简单说,observer相当于关系型数据库中的触发器,而endpoint则相当于关系型数据库中的存储过程。关于HBase Coprocessor的介绍网上有很多的文档,由于我也是刚刚学习,从很多好人贡献的文档上了解了很多。

    这里记录一下自己在一个完全分布式系统上部署自定义的Coprocessor的过程,本文会介绍两种部署的方法:一种是在hbase-site.xml中配置;第二种是使用表描述符来配置(alter);前者会被所有的表的所有的region加载,而后者只会对指定的表的所有region加载。本文会结合自己的实验过程指出哪些地方为易错点。

    首先,还是先来看下环境:

        hadoop1.updb.com    192.168.0.101    Role:master

        hadoop2.updb.com    192.168.0.102    Role:regionserver

        hadoop3.updb.com    192.168.0.103    Role:regionserver

        hadoop4.updb.com    192.168.0.104    Role:regionserver

        hadoop5.updb.com    192.168.0.105    Role:regionserver

    首先编码自定义的Coprocessor,该段代码摘自《Hbase权威指南》,只是修改了package的名字:

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);
        }
    }
}

    编码完成后需要将该类编译并打成jar包,类名上右击--Export,弹出如下窗口

wKiom1RuwbOxV68dAAf7rJQRL_k329.jpg

    选择JAR file,然后Next,出现如下窗口

wKioL1Ruwi2iESOaAAJnt1YRiMA058.jpg

    指定jar文件的保存路径,然后finish,就完成了RegionObserverExample类的编译和打包,接下来就需要将打好的jar文件使用ftp的方式上传到hbase集群的master服务器上,这里为hadoop1。

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

    然后需要修改hbase的hbase-env.sh、hbase-site.xml两个配置文件

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>

    在master上修改配置文件完成之后,将修改后的文件scp到其他个regionserver上,然后重启hbase使配置生效。重启之后来看是否能够正确的触发

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已经成功的部署到分布式系统中了。

    需要留意的是在hbase-site.xml配置的Coprocessor默认是会被每张表的每个region加载。如果只想要某个表使用这个observer coprocessor,就需要使用表描述符的加载方式,这种方式同样的需要修改hbase-env.sh将jar包路径添加到hbase的classpath中去,与上面不同的是不用在hbase-site.xml中设置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>

    在hbase shell中使用alter命令来为kora表来设定Coprocessor

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

    设置成功,decribe下表

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

    ok,已经设置成功,下面来测试一下

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

    需要注意的是,Coprocessor的优先级有SYSTEM和USER两种,SYSTEM优先于USER加载。使用表描述符设置Coprocessor时,不要设置优先级这一项,否则无法成功触发,如

1
'coprocessor' => '|org.apache.hbase.kora.coprocessor.RegionObserverExample|USER|'

    虽然也能成功设置Coprocessor,但是测试时是无法触发的,在上述环境中亲自测试过的,而且hbase帮助文档中优先级这个项用户不是必输项,只有类名是必输项。我们可以根据自己的需求来选择使用哪种方式来配置自己的Coprocessor。

欢迎大家访问我的个人网站 萌萌的IT人
0
0
分享到:
评论

相关推荐

    Hadoop2.2.0+Hbase0.98.4+sqoop-1.4.4+hive-0.98.1安装手册(All)_ZCX

    叶梓老师整理的Hadoop2.2.0+Hbase0.98.4+sqoop-1.4.4+hive-0.98.1安装手册,非常实用

    HBase-coprocessor.pptx

    在编写完成后,将Coprocessor打包成jar包,并部署到HBase环境中。 加载Coprocessor: 加载Coprocessor有两种方式:静态加载和动态加载。静态加载是通过修改HBase的配置文件,指定Coprocessor的类路径和加载顺序。...

    HBase单机版部署教程

    HBase单机版部署教程 HBase是一种基于Hadoop的分布式、面向列的NoSQL数据库,它提供了高性能、可扩展、灵活的数据存储解决方案。下面是HBase单机版部署的详细教程: 安装JDK 首先,我们需要安装JDK,因为HBase...

    HBase中Coprocessor的介绍以及实际业务场景中的使用.pdf

    讲师:陈杨——快手大数据高级研发工程师 ...内容概要:(1)讲解hbase coprocessor的原理以及使用场景,(2) coprocessor整个流程实战,包括开发,加载,运行以及管理(3)结合1,2分析coprocessor在rsgroup中的具体使用

    hbase_coprocessor_hbase_coprocessorjava_源码

    在HBase中,Coprocessor机制是一个强大的特性,它允许用户在HBase服务器端自定义扩展功能,如数据过滤、统计计算、访问控制等。这个压缩包“hbase_coprocessor_hbase_coprocessorjava_源码”显然包含了用Java API...

    hbasesink 自定义序列化类

    hbasesink 自定义序列化类 ,可实现自定义rowkey及去除字段两边索引,具体请看下代码。 hbasesink 自定义序列化类 ,可实现自定义rowkey及去除字段两边索引,具体请看下代码。

    Python-提供Hbase自动化部署方案WhaleAI专注人工智能大数据

    WhaleAI的自动化部署方案简化了HBase在Python环境中的配置和管理。通过使用Python库,如HappyBase或pyhbase,开发者可以轻松地在Python中操作HBase,实现数据的增删改查、表的创建和管理等。WhaleAI的解决方案可能...

    HBase Coprocessor 优化与实验

    其中,Coprocessor作为HBase的一项关键特性,允许用户自定义逻辑以增强系统的灵活性和扩展性。 #### HBase Coprocessor 的概念与作用 Coprocessor的概念来源于Google BigTable的研究成果,它允许用户在服务器端...

    使用Hbase协作器(Coprocessor)同步数据到ElasticSearch(hbase 版本 1.2.0-cdh5.8.0, es 2.4.0 版本)

    2. **配置Coprocessor**:在HBase的表或列族配置中,添加Coprocessor的类路径和优先级。这样,每当有数据写入时,Coprocessor就会被触发执行。 3. **连接Elasticsearch**:在Coprocessor中,使用Elasticsearch的...

    hbase-2.3.5单机一键部署工具

    说明:使用外部zookeeper3.4.13之hbase2.3.5一键部署工具,支持部署、启动、停止、清除、连接,支持自定义服务端口,数据存储目录等功能,已在生产环境使用。 Options: deploy.sh build single 构建并启动一个hbase...

    zookeeper+hadoop+hbase+hive(集成hbase)安装部署教程(超详细).docx

    3.集群能正常运行的条件是集群可节点宕机数应保证有超过集群机器总数一半的机器在运行,因此从经济和实用性来说,集群的节点一般是奇数个,本文部署4台机器,其容灾能力与部署3台机器一致,即只能宕机1台

    Hbase2.2.0集群部署.docx

    Hbase2.2.0集群部署 Hbase是基于Hadoop的分布式、面向列的NoSQL数据库,具有高可扩展性和高性能的特点。今天,我们将学习如何部署Hbase2.2.0集群。 一、文件解压和环境变量配置 在部署Hbase之前,我们需要解压...

    藏经阁-HBase Coprocessor-22.pdf

    1.灵活的数据处理:HBase Coprocessor 可以对 HBase 表中的数据进行灵活的处理,例如聚合计算、排序、过滤等。 2.高性能:HBase Coprocessor 可以提高 HBase 的性能,例如使用 Endpoint 机制可以实现高效的数据处理...

    HBaseCoprocessor的实现与应用.pdf

    HBase Coprocessor 是一种灵活且强大的机制,它允许用户在 HBase 上执行自定义逻辑,从而扩展 HBase 的功能。Coprocessor 的灵感源自 BigTable 的协处理器概念,其主要特性在于能够在 HBase 的 RegionServer 上执行...

    Hadoop、HBase、Zookeeper安装部署

    在Hadoop和HBase中,Zookeeper扮演着关键角色,如集群中的节点发现和领导者选举,确保服务的稳定运行。 **Hadoop的安装部署**: 1. **环境准备**:确保服务器之间网络可达,安装Java开发环境。 2. **安装Hadoop**:...

    hbase-0.98.9部署

    在上述部署步骤中,注意HBase的配置文件`hbase-env.sh`用于设置Java环境,`hbase-site.xml`用于定义HBase的各种配置参数,如HDFS目录、是否开启分布式模式、Master地址、临时文件目录以及ZooKeeper的配置。...

    hbase-2.2.2单机一键部署工具

    注意:zookeeper3.4.13和hbase2.2.2都是采用docker-compose方式部署 原文链接:https://blog.csdn.net/m0_37814112/article/details/118794130 说明:使用外部zookeeper之hbase2.2.2一键部署工具,支持部署、启动、...

    HBaseCoprocessor的实现与应用.zip

    其中,HBase Coprocessor是其提供的一种强大的功能,允许用户在数据存储和检索过程中实现自定义逻辑,从而提高了系统的灵活性和性能。本资料“HBase Coprocessor的实现与应用.zip”深入探讨了这一特性,主要涵盖了...

Global site tag (gtag.js) - Google Analytics