hadoop-HBase-observer的一个样例
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的一个样例的更多相关文章
- 使用IDEA操作Hbase API 报错:org.apache.hadoop.hbase.client.RetriesExhaustedException的解决方法:
使用IDEA操作Hbase API 报错:org.apache.hadoop.hbase.client.RetriesExhaustedException的解决方法: 1.错误详情: Excepti ...
- [推荐]Hadoop+HBase+Zookeeper集群的配置
[推荐]Hadoop+HBase+Zookeeper集群的配置 Hadoop+HBase+Zookeeper集群的配置 http://wenku.baidu.com/view/991258e881c ...
- hbase(ERROR: org.apache.hadoop.hbase.ipc.ServerNotRunningYetException: Server is not running yet)
今天启动clouder manager集群时候hbase list出现 (ERROR: org.apache.hadoop.hbase.ipc.ServerNotRunningYetException ...
- 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 就算是引用了相应的组件依赖,依然是报一样的错误! ...
- 【解决】org.apache.hadoop.hbase.ClockOutOfSyncException:
org.apache.hadoop.hbase.ClockOutOfSyncException: org.apache.hadoop.hbase.ClockOutOfSyncException: Se ...
- Hadoop,HBase,Zookeeper源码编译并导入eclipse
基本理念:尽可能的参考官方英文文档 Hadoop: http://wiki.apache.org/hadoop/FrontPage HBase: http://hbase.apache.org/b ...
- org.apache.hadoop.hbase.TableNotDisabledException 解决方法
Exception in thread "main" org.apache.hadoop.hbase.TableNotDisabledException: org.apache.h ...
- 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 ...
- Hadoop,HBase集群环境搭建的问题集锦(四)
21.Schema.xml和solrconfig.xml配置文件里參数说明: 參考资料:http://www.hipony.com/post-610.html 22.执行时报错: 23., /comm ...
随机推荐
- 设计模式之迭代器模式(Iterator)摘录
23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于怎样创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...
- Codeforces Round#297 div2
B: 题意:给定一个字符串,然后给定m个数字 对于每个数字ai的含义是,将ai到n-ai+1的字符串给翻转一遍. 要求输出m次翻转之后的字符串. 想法就是判断第i个位置的字符是翻转了奇数次,还是偶数次 ...
- 软件測试系统文章(文件夹&链接在此)
前言 我会在此账号上写一系列关于软件測试的文章,故在此置顶软件測试系列文章的文件夹和链接,以方便大家阅读! 文件夹 软件測试系列之入门篇(一) 软件測试系列之了解篇(二) 软件測试系列之黑白盒(三) ...
- 程序设计实践C++ 程序代写(QQ 928900200)
程序设计实践 采用C++作为编程语言. 设计开发一个“学生信息”管理系统.该系统模拟数据库管理系统(DBMS)的功能,为用户提供数据存储.查找的能力. 该系统存储的学生信息包括: 学号.姓名.性别.语 ...
- UML相关工具一览
http://www.cnblogs.com/chehaoj/p/3478003.html TopCoder UML Tool 1.2.6 TopCoder, Inc http://www.topco ...
- HTML5 CSS3 诱人的实例 : 网页载入进度条的实现,下载进度条等
今天给大家带来一个比較炫的进度条,进度条在一耗时操作上给用户一个比較好的体验,不会让用户认为在盲目等待,对于没有进度条的长时间等待,用户会任务死机了,毫不犹豫的关掉应用:一般用于下载任务,删除大量任务 ...
- 凝视条件推断浏览器<!--[if !IE]><!--[if IE]><!--[if lt IE 6]><!--[if gte IE 6]>
<!--[if !IE]><!--> 除IE外可识别 <!--<![endif]--> <!--[if IE]> 所有的IE可识别 <![e ...
- HDU 4360 As long as Binbin loves Sangsang spfa
题意: 给定n个点m条边的无向图 每次必须沿着LOVE走,到终点时必须是完整的LOVE,且至少走出一个LOVE, 问这样情况下最短路是多少,在一样短情况下最多的LOVE个数是多少. 有自环. #inc ...
- Delphi XE7 发布时间
Delphi7 XE7 我可以下载: http://altd.embarcadero.com/download/radstudio/xe7/delphicbuilder_xe7_win.iso 安装包 ...
- Android自己定义组件系列【9】——Canvas绘制折线图
有时候我们在项目中会遇到使用折线图等图形,Android的开源项目中为我们提供了非常多插件,可是非常多时候我们须要依据详细项目自己定义这些图表,这一篇文章我们一起来看看怎样在Android中使用Can ...