hbase(main):021:0> describe 'users'

DESCRIPTION                                                                                                         ENABLED                                                        

 {NAME => 'users', coprocessor$1 => 'file:///home/u/myjar/UsersObserver.jar|test.hbase.inaction.example5_2.Users true                                                           

 Observer|1001|', FAMILIES => [{NAME => 'info', BLOOMFILTER => 'NONE', REPLICATION_SCOPE => '0', COMPRESSION => 'N                                                                

 ONE', VERSIONS => '3', TTL => '2147483647', MIN_VERSIONS => '0', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCK                                                                

 CACHE => 'true'}]}                                                                                                                                                                

1 row(s) in 0.0610 seconds



 先disable表。然后alert一下。那个1001是优先级。别忘记enable

disable 'users'

 alter 'users', METHOD => 'table_att', 'coprocessor'=>'file:///home/u/mylib/UsersObserver.jar|test.hbase.inaction.example5_2.UsersObserver|1001|'

 alter 'users', METHOD => 'table_att_unset',NAME => 'coprocessor$2'  
删除

 enable 'users'



hbase(main):022:0> scan 'users'

ROW                                           COLUMN+CELL                                                                                                                          

 id01                                         column=info:email, timestamp=1413963413002, value=wyj@gmail.com                                                                      

 id01                                         column=info:name, timestamp=1413963413002, value=wyj                                                                                 

 id01                                         column=info:password, timestamp=1413963413002, value=000000                                                                          

 id01                                         column=info:user, timestamp=1413963413002, value=id01                                                                                

 id09                                         column=info:email, timestamp=1414566775616, value=test9@gmail.com                                                                    

 id09                                         column=info:name, timestamp=1414566775616, value=test9                                                                               

 id09                                         column=info:password, timestamp=1414566775616, value=9                                                                               

 id09                                         column=info:user, timestamp=1414566775616, value=id09                                                                                

 id99                                         column=info:email, timestamp=1414565339530, value=test99@gmail.com                                                                   

 id99                                         column=info:name, timestamp=1414565339530, value=test99                                                                              

 id99                                         column=info:password, timestamp=1414565339530, value======01=====                                                                    

 id99                                         column=info:user, timestamp=1414565339530, value=id99                                                                                

 invalID                                      column=info:invalid_pass, timestamp=1414566775657, value=invalid_pass:9                                                              

11 row(s) in 0.1290 seconds



start() 和stop()这两个方法,在表enable和disable时分别也会相应运行

这start()和stop()在连接池里获得连接与释放连接实在是多余

observer类似触发器,操作一张表的时候要注意递归调用,拦截到一次put后再put这个表就会递归

这个样例就是这种,实际上没不论什么意义,就是个样例而已

注意锁。HBase是行级的锁,假设想put同一行是不会成功的

observer非常不好调试。仅仅能整一堆的log......

package test.hbase.inaction.example5_2;

import java.io.IOException;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.hbase.CoprocessorEnvironment;
import org.apache.hadoop.hbase.client.HTableInterface;
import org.apache.hadoop.hbase.client.HTablePool;
import org.apache.hadoop.hbase.client.Put;
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.wal.WALEdit;
import org.apache.hadoop.hbase.util.Bytes; import test.hbase.inaction.example2_4.User;
import test.hbase.inaction.example2_4.UsersDAO; /*
<span style="color:#ff0000;">先disable表,然后alert一下,那个1001是优先级,别忘记enable</span>
disable 'users'
alter 'users', METHOD => 'table_att', 'coprocessor'=>'file:///home/u/mylib/FollowsObserver.jar|test.hbase.inaction.example5_2.FollowsObserver|1001|'
alter 'users', METHOD => 'table_att_unset',NAME => 'coprocessor$2'<span style="white-space:pre"> </span>
enable 'users'
describe 'users'
*/
public class UsersObserver extends BaseRegionObserver { private final Log log = LogFactory.getLog(this.getClass()); private HTablePool pool = null; public void start(CoprocessorEnvironment env) throws IOException {
log.info("WYJ ---------------------------- start() begin");
pool = new HTablePool(env.getConfiguration(), Integer.MAX_VALUE);
log.info("pool=" + pool);
log.info("WYJ ---------------------------- start() end");
} public void stop(CoprocessorEnvironment env) throws IOException {
log.info("WYJ ---------------------------- stop() begin");
pool.close();
log.info("WYJ ---------------------------- stop() end");
} public void postPut(final ObserverContext<RegionCoprocessorEnvironment> e,
final Put put, final WALEdit edit, final boolean writeToWAL) {
log.info("WYJ: ================================================ postPut() begin");
try {
byte[] table = e.getEnvironment().getRegion().getRegionInfo()
.getTableName();
log.info("table=" + Bytes.toString(table));
if (!Bytes.equals(table, UsersDAO.TABLE_NAME)) {
return;
}
String pass = Bytes.toString(put.get(UsersDAO.INFO_FAM, UsersDAO.PASS_COL).get(0).getValue());
log.info("pass=" + pass);
byte[] user = put.get(UsersDAO.INFO_FAM, UsersDAO.USER_COL).get(0).getValue();
log.info("user=" + Bytes.toString(user));
if (pass == null || pass.length() < 6) {
log.info("password.length=" + pass.length());
UsersDAO dao = new UsersDAO(pool);
log.info("pool=" + pool);
dao.addUser("id99", "test99", "test99@gmail.com", "=====01=====");
log.info("dao.addUser(\"id99\", \"test99\", \"test99@gmail.com\", \"99999999\"); FINAL");
}
} catch (Exception ex) {
log.error(ex, ex);
}
log.info("WYJ: ================================================ postPut() end");
}
}

hadoop-HBase-observer的一个样例的更多相关文章

  1. 使用IDEA操作Hbase API 报错:org.apache.hadoop.hbase.client.RetriesExhaustedException的解决方法:

     使用IDEA操作Hbase API 报错:org.apache.hadoop.hbase.client.RetriesExhaustedException的解决方法: 1.错误详情: Excepti ...

  2. [推荐]Hadoop+HBase+Zookeeper集群的配置

    [推荐]Hadoop+HBase+Zookeeper集群的配置 Hadoop+HBase+Zookeeper集群的配置  http://wenku.baidu.com/view/991258e881c ...

  3. hbase(ERROR: org.apache.hadoop.hbase.ipc.ServerNotRunningYetException: Server is not running yet)

    今天启动clouder manager集群时候hbase list出现 (ERROR: org.apache.hadoop.hbase.ipc.ServerNotRunningYetException ...

  4. Cloudera集群中提交Spark任务出现java.lang.NoSuchMethodError: org.apache.hadoop.hbase.HTableDescriptor.addFamily错误解决

    Cloudera及相关的组件版本 Cloudera: 5.7.0 Hbase: 1.20 Hadoop: 2.6.0 ZooKeeper: 3.4.5 就算是引用了相应的组件依赖,依然是报一样的错误! ...

  5. 【解决】org.apache.hadoop.hbase.ClockOutOfSyncException:

    org.apache.hadoop.hbase.ClockOutOfSyncException: org.apache.hadoop.hbase.ClockOutOfSyncException: Se ...

  6. Hadoop,HBase,Zookeeper源码编译并导入eclipse

    基本理念:尽可能的参考官方英文文档 Hadoop:  http://wiki.apache.org/hadoop/FrontPage HBase:  http://hbase.apache.org/b ...

  7. org.apache.hadoop.hbase.TableNotDisabledException 解决方法

    Exception in thread "main" org.apache.hadoop.hbase.TableNotDisabledException: org.apache.h ...

  8. Java 向Hbase表插入数据报(org.apache.hadoop.hbase.client.HTablePool$PooledHTable cannot be cast to org.apac)

    org.apache.hadoop.hbase.client.HTablePool$PooledHTable cannot be cast to org.apac 代码: //1.create HTa ...

  9. Hadoop,HBase集群环境搭建的问题集锦(四)

    21.Schema.xml和solrconfig.xml配置文件里參数说明: 參考资料:http://www.hipony.com/post-610.html 22.执行时报错: 23., /comm ...

随机推荐

  1. poj 3280 Cheapest Palindrome ---(DP 回文串)

    题目链接:http://poj.org/problem?id=3280 思路: dp[i][j] :=第i个字符到第j个字符之间形成回文串的最小费用. dp[i][j]=min(dp[i+1][j]+ ...

  2. Lua 与C 交换 第一篇

    编译 windows上编译lua源代码 cl /MD /O2 /W3 /c /DLUA_BUILD_AS_DLL *.c del *.o ren lua.obj lua.o ren luac.obj ...

  3. Android基于cordova3.3插件开发

    最近的工作项目,需要使用cordova插件开发,详细Cordova角色,不会走,你可以去百度自身OK该,直接启动.详细过程,我有一个小Demo解说提前进行. 还只是接触,东西太理论基础,我也不太清楚, ...

  4. SQLiteDatabase和Contentprovider

    SQLiteDatabase和Contentprovider这两个数据库,我一般是用前面一个,喜欢它的操作数据库的语句,简单明了,可惜有时遇到数据库同步的问题,有时我们需要在一个数据库下建立多个表,多 ...

  5. Swing界面刷新问题(转)

    在Java Swing编程中,往往会遇到需要动态刷新界面的时候,例如动态刷新JLabel的文本,JTextField里的文本等等.但是往往却没有达到我们预期的效果,我相信很多朋友都遇到过本文将要说的这 ...

  6. tomcat 性能优化(转)

    tomcat nginx默许的post大小限制 tomcat nginx默认的post大小限制执行大文件上传,或者,大数据量提交时,当提交的数据大小超过一定限制时,发现后台从request取值的代码r ...

  7. UE4编码规范

    翻译原文为Unreal 的官方!自己看着总结了一下,不一定每条都能对上.不足之处,请多多不吝赐教! 原文地址:  unreal CodingStandard UE4编码规范 在Epic,有简单几条代码 ...

  8. ORA-00913错误:PL/SQL: ORA-00913: too many values

    ORA-00913错误 描写叙述:PL/SQL: ORA-00913: too many values 目标:编写一个能够循环插入数据的脚本 操作过程: SQL> desc tcustmer N ...

  9. dm8148 jpeg编解码器测试

    测试过程: 1)于A8将jpeg传送到videoM3解码,然后,videoM3编码.在编译jpeg图像传输到A8,主要是测试jpeg编码的图像需要多少时间: 1000w像素:  编码时间:43ms. ...

  10. 复制360于Launcher浮动窗口的屏幕显示内存使用情况(基本版)

    MainActivity如下面: package cc.cc; import android.os.Bundle; import android.view.View; import android.v ...