- 921. Minimum Add to Make Parentheses Valid 使括号有效的最少添加
- 915. Partition Array into Disjoint Intervals 分割数组
- 932. Beautiful Array 漂亮数组
- 940. Distinct Subsequences II 不同的子序列 II
要使您的协处理器可用于HBase,必须静态(通过HBase配置)或动态(使用HBase Shell或Java API)加载它。
请按照以下步骤静态加载协处理器。请记住,必须重新启动HBase才能卸载已静态加载的协处理器。
1、 在hbase-site.xml中定义协处理器,其中元素带有和子元素应该是以下之一:
* 对于RegionObservers和Endpoints是hbase.coprocessor.region.classes。
* 对于WALObservers是hbase.coprocessor.wal.classes。
* 对于MasterObservers是hbase.coprocessor.master.classes。
<value>必须包含协处理器实现类的完全限定类名。
例如,要加载协处理器(在类SumEndPoint.java中实现),您必须在RegionServer的'hbase-site.xml'文件中创建以下条目(通常位于'conf'目录下):
<property>
<name>hbase.coprocessor.region.classes</name>
<value>org.myname.hbase.coprocessor.endpoint.SumEndPoint</value>
</property>
如果为加载指定了多个类,则类名必须以逗号分隔。框架尝试使用默认的类加载器加载所有已配置的类。因此,jar文件必须驻留在服务器端HBase类路径中。
以这种方式加载的协处理器将在所有表的所有区域上处于活动状态。这些也称为系统协处理器。将为第一个列出的协处理器分配优先级Coprocessor.Priority.SYSTEM。列表中的每个后续协处理器的优先级值都会增加1(这会降低其优先级,因为优先级具有整数的自然排序顺序)。
当调用注册的观察者时,框架以其优先级的排序顺序执行其回调方法。关系是任意破坏的。
2、 将您的代码放在HBase的类路径上一种简单的方法是将jar(包含代码和所有依赖项)放入HBase的安装目录lib/中;
3、 重启HBase;
1、 从hbase-site.xml中删除协处理器的元素,包括子元素;
2、 重启HBase;
3、 (可选)从类路径或HBase的lib/目录中删除协处理器的JAR文件;
您也可以动态加载协处理器,而无需重新启动HBase。这似乎比静态加载更好,但动态加载的协处理器是基于每个表加载的,并且只能用于加载它们的表。因此,动态加载的表有时称为表协处理器(Table Coprocessor)。
此外,动态加载协处理器充当表上的模式更改,并且必须使表脱机以加载协处理器。
有三种方法可以动态加载协处理器。
以下说明做了如下假设:
1、 使用HBaseShell禁用表:
hbase> disable 'users'
2、 使用如下命令加载协处理器:
hbase alter 'users', METHOD => 'table_att', 'Coprocessor'=>'hdfs://<namenode>:<port>/
user/<hadoop-user>/coprocessor.jar| org.myname.hbase.Coprocessor.RegionObserverExample|1073741823|
arg1=1,arg2=2'
协处理器框架将尝试从协处理器表属性值中读取类信息。该值包含由pipe(|)字符分隔的四条信息。
* 文件路径:包含协处理器实现的jar文件必须位于所有区域服务器都可以读取它的位置。
您可以将文件复制到每个区域服务器上的本地磁盘上,但建议将其存储在HDFS中。
[HBASE-14548][]允许指定包含jar或一些通配符的目录,例如:hdfs://<namenode>:<port>/user/<hadoop-user>/,或hdfs://<namenode>:<port>/user/<hadoop-user>/\*.jar。请注意,如果指定了目录,则会添加目录中的所有jar文件(.jar)。它不搜索子目录中的文件。如果要指定目录,请不要使用通配符。此增强功能也适用于通过JAVA API的用法。
* 类名:协处理器的完整类名。
* 优先级:整数。该框架将使用优先级确定在同一个钩子上注册的所有已配置观察者的执行顺序。该字段可以保留为空。在这种情况下,框架将分配默认优先级值。
3、 启用该表;
hbase(main):003:0> enable 'users'
4、 验证协处理器已加载:
hbase(main):04:0> describe 'users'
协处理器应列在TABLE\_ATTRIBUTES。
下面的Java代码演示如何使用HTableDescriptor的setValue()方法在”用户”表上加载协处理器。
TableName tableName = TableName.valueOf("users");
String path = "hdfs://<namenode>:<port>/user/<hadoop-user>/coprocessor.jar";
Configuration conf = HBaseConfiguration.create();
Connection connection = ConnectionFactory.createConnection(conf);
Admin admin = connection.getAdmin();
admin.disableTable(tableName);
HTableDescriptor hTableDescriptor = new HTableDescriptor(tableName);
HColumnDescriptor columnFamily1 = new HColumnDescriptor("personalDet");
columnFamily1.setMaxVersions(3);
hTableDescriptor.addFamily(columnFamily1);
HColumnDescriptor columnFamily2 = new HColumnDescriptor("salaryDet");
columnFamily2.setMaxVersions(3);
hTableDescriptor.addFamily(columnFamily2);
hTableDescriptor.setValue("COPROCESSOR$1", path + "|"
+ RegionObserverExample.class.getCanonicalName() + "|"
+ Coprocessor.PRIORITY_USER);
admin.modifyTable(tableName, hTableDescriptor);
admin.enableTable(tableName);
在HBase 0.96及更新版本中,该HTableDescriptor的addCoprocessor()方法提供了一种动态加载协处理器的简便方法。
TableName tableName = TableName.valueOf("users");
Path path = new Path("hdfs://<namenode>:<port>/user/<hadoop-user>/coprocessor.jar");
Configuration conf = HBaseConfiguration.create();
Connection connection = ConnectionFactory.createConnection(conf);
Admin admin = connection.getAdmin();
admin.disableTable(tableName);
HTableDescriptor hTableDescriptor = new HTableDescriptor(tableName);
HColumnDescriptor columnFamily1 = new HColumnDescriptor("personalDet");
columnFamily1.setMaxVersions(3);
hTableDescriptor.addFamily(columnFamily1);
HColumnDescriptor columnFamily2 = new HColumnDescriptor("salaryDet");
columnFamily2.setMaxVersions(3);
hTableDescriptor.addFamily(columnFamily2);
hTableDescriptor.addCoprocessor(RegionObserverExample.class.getCanonicalName(), path,
Coprocessor.PRIORITY_USER, null);
admin.modifyTable(tableName, hTableDescriptor);
admin.enableTable(tableName);
无法保证框架将成功加载给定的协处理器。例如,shell命令既不保证特定位置存在jar文件,也不验证给定类是否实际包含在jar文件中。
1、 禁用该表;
hbase> disable 'users'
2、 更改表以删除协处理器;
hbase> alter 'users', METHOD => 'table_att_unset', NAME => 'coprocessor$1'
3、 启用该表;
hbase> enable 'users'
重新加载表定义,而无需使用setValue()或addCoprocessor()方法设置协处理器的值。这将删除附加到表的任何协处理器。
TableName tableName = TableName.valueOf("users");
String path = "hdfs://<namenode>:<port>/user/<hadoop-user>/coprocessor.jar";
Configuration conf = HBaseConfiguration.create();
Connection connection = ConnectionFactory.createConnection(conf);
Admin admin = connection.getAdmin();
admin.disableTable(tableName);
HTableDescriptor hTableDescriptor = new HTableDescriptor(tableName);
HColumnDescriptor columnFamily1 = new HColumnDescriptor("personalDet");
columnFamily1.setMaxVersions(3);
hTableDescriptor.addFamily(columnFamily1);
HColumnDescriptor columnFamily2 = new HColumnDescriptor("salaryDet");
columnFamily2.setMaxVersions(3);
hTableDescriptor.addFamily(columnFamily2);
admin.modifyTable(tableName, hTableDescriptor);
admin.enableTable(tableName);
在HBase 0.96及更新版本中,您可以改为使用该HTableDescriptor类的removeCoprocessor()方法。
发出时Delete对于 hbase,我知道它不会立即删除数据。但是什么时候删除数据,我的意思是,物理上? 最佳答案 当您向 HBase 写入内容时,它会存储在内存存储 (RAM) 中,然后再写入磁盘。
同一行的列族属于同一个 RegionServer。 那么,这里的问题是一个 RegionServer 会在不同的机器上存储不同的列族吗? 最佳答案 不一定,但在某些时候它会。这是基本 HBase 架构
如果我想插入表格: row | fam:qualifier | timestamp | value 1 | foo:bar | 12345 | 2 1 | foo:bar | 12346 | 3 1
有时我想退出我在 HBase shell 中运行的命令,例如扫描操作通常需要太多时间。 所以我想停止运行这个命令,但我不想退出 HBase shell。 我常用的停止运行命令的方式,我使用了Ctrl+
有没有办法设置 Hbase 以便我们可以在同一个集群中创建多个数据库? 最佳答案 只是为了刷新主题:http://hbase.apache.org/book.html#namespace 5.3.1.
怎么看version的 hbase我在用? 你能下命令吗? 最佳答案 hbase version命令行界面中的命令给出了 version的 hbase正在使用中。 以下是来自 Cloudera 的两个
高级问题: HBase 是否对所有分布(因此不是实现的工件)通用的每行施加了最大大小,无论是在 方面吗?字节存储 或在 方面细胞数 ? 如果是这样: 限制是什么? 极限存在的原因是什么? 限制在哪里记
假设,假设我在数据仓库设置中有一个星型模式。 有一个非常非常长的事实表(想想几十亿到几万亿行)和几个低基数维度表(想想 100 个维度表)。每个事实表外键 指向一个维度表的主键是位图索引的。每个维度表
版本:Hadoop: 2.0.0-cdh4.3.1 HBase: 0.94.6-cdh4.3.1 我正在运行 cloudera quick start vm,这是我的小型远程 HBase Java 客
我正在尝试以完全分布式模式配置 HBase。 (使用 Ubuntu 12.04,Apache Hadoop 2.2(以伪模式运行,HBase 版本 0.98) 以下是我的 bashrc 设置: exp
我想知道如何正确配置 hbase.zookeeper.quorum 以将 zookeeper 实例指向集群模式。 最佳答案 hbase.zookeeper.quorum 属性是运行 ZooKeeper
我想知道如何正确配置 hbase.zookeeper.quorum 以将 zookeeper 实例指向集群模式。 最佳答案 hbase.zookeeper.quorum 属性是运行 ZooKeeper
我正在尝试对位于 Hbase 中的两个表进行映射连接。我的目的是在hashmap中保留小表的记录并与大表进行比较,一旦匹配,再次将记录写入hbase中的表中。我使用 Mapper 和 Reducer
我正在尝试编写一个程序来连接到 HBase。但是当我执行以下命令时HBaseConfiguration.create();我收到以下错误:. "hbase-default.xml 文件似乎是旧版本的
基于HBase documentation ,再次遵循 Google BigTable 论文的引用,据说这些行是按行键的字典顺序存储的。 很明显,当我们在 rowkey 中有一个字符串或者如果我们将一
我有一个 hbase 表,其中的行键如 row1、row2、row3 .... 和 rowN,我想要的是获取行键从 row100 到 row200 的行,如何编写查询子句或将 hbase 表设计为让查
我正在尝试创建命名空间,但出现类似下面给出的错误 hbase(main):031:0> create namespace 'Aniruddha'
我发现为以下要求建模 HBase 表有困难。 我有一个表“商店”,它存储了商店的详细信息(必胜客)。 我有一个表格“订单”,其中包含交易摘要(总交易金额等...)。 我有另一个表“Order_Item
谁能告诉我如果在不首先禁用表的情况下使用“alter”命令可能影响表结构的可能影响? 据我所知,禁用表意味着关闭与表的所有连接。如果我在不禁用表的情况下使用 alter,可能会发生什么异常情况? 我正
我无法将表从 HBase 导出到 HDFS。下面是错误跟踪。它是相当大的尺寸。还有其他方法可以导出吗? 我使用以下命令导出。我增加了 rpc 超时,但工作仍然失败。 sudo -u hdfs hbas
我是一名优秀的程序员,十分优秀!