W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
要使您的協(xié)處理器可用于HBase,必須靜態(tài)(通過HBase配置)或動態(tài)(使用HBase Shell或Java API)加載它。
請按照以下步驟靜態(tài)加載協(xié)處理器。請記住,必須重新啟動HBase才能卸載已靜態(tài)加載的協(xié)處理器。
<property>
<name>hbase.coprocessor.region.classes</name>
<value>org.myname.hbase.coprocessor.endpoint.SumEndPoint</value>
</property>
如果為加載指定了多個類,則類名必須以逗號分隔??蚣車L試使用默認的類加載器加載所有已配置的類。因此,jar文件必須駐留在服務(wù)器端HBase類路徑中。您也可以動態(tài)加載協(xié)處理器,而無需重新啟動HBase。這似乎比靜態(tài)加載更好,但動態(tài)加載的協(xié)處理器是基于每個表加載的,并且只能用于加載它們的表。因此,動態(tài)加載的表有時稱為表協(xié)處理器(Table Coprocessor)。
此外,動態(tài)加載協(xié)處理器充當(dāng)表上的模式更改,并且必須使表脫機以加載協(xié)處理器。
有三種方法可以動態(tài)加載協(xié)處理器。
以下說明做了如下假設(shè):
hbase> disable 'users'
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'
協(xié)處理器框架將嘗試從協(xié)處理器表屬性值中讀取類信息。該值包含由pipe(|)字符分隔的四條信息。hbase(main):003:0> enable 'users'
hbase(main):04:0> describe 'users'
協(xié)處理器應(yīng)列在TABLE_ATTRIBUTES。下面的Java代碼演示如何使用HTableDescriptor的setValue()方法在"用戶"表上加載協(xié)處理器。
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()方法提供了一種動態(tài)加載協(xié)處理器的簡便方法。
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);
無法保證框架將成功加載給定的協(xié)處理器。例如,shell命令既不保證特定位置存在jar文件,也不驗證給定類是否實際包含在jar文件中。
hbase> disable 'users'
hbase> alter 'users', METHOD => 'table_att_unset', NAME => 'coprocessor$1'
hbase> enable 'users'
重新加載表定義,而無需使用setValue()或addCoprocessor()方法設(shè)置協(xié)處理器的值。這將刪除附加到表的任何協(xié)處理器。
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()方法。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: