您好,登錄后才能下訂單哦!
這篇文章主要介紹“HBase協處理器Coprocessor怎么使用”,在日常操作中,相信很多人在HBase協處理器Coprocessor怎么使用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”HBase協處理器Coprocessor怎么使用”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
要使您的協處理器對HBase可用,必須靜態(通過HBase配置)或動態(使用HBase Shell或Java API)加載它。
1.靜態加載:
按照以下步驟靜態加載協處理器。請記住,您必須重新啟動HBase來卸載靜態加載的協處理器。
a.在配置文件hbase-site.xml中定義協處理器,新增配置項的<name>應該是以下內容:
hbase.coprocessor.region.classes for RegionObservers andnd Endpoints.
hbase.coprocessor.wal.classes for WALObservers.
hbase.coprocessor.master.classes for MasterObservers.
<value>對應所以加載的完整類名;
例如:要加載RegionObservers協處理器(在類SumEndPoint.java中實現),在hbase-site中添加以下配置:
<property> <name>hbase.coprocessor.region.classes</name> <value>org.myname.hbase.coprocessor.endpoint.SumEndPoint</value></property>
如果指定多個類用于加載,則類名必須以逗號分隔。框架嘗試使用默認的類裝入器裝入所有配置的類。因此,jar文件必須駐留在服務器端HBase類路徑中。
以這種方式加載的協處理器將在所有表的所有區域上處于活動狀態。這些也稱為系統協處理器。將為第一個列出的協處理器分配優先級Coprocessor.Priority.SYSTEM。列表中的每個后續協處理器的優先級值都會增加1(這會降低其優先級,因為優先級具有整數的自然排序順序)。
當調用注冊的觀察者時,框架以其優先級的排序順序執行其回調方法。關系是任意破壞的。
b.將代碼放到HBase的類路徑中。一種簡單的方法是將jar(包含您的代碼和所有依賴項)放到HBase安裝中的lib/目錄中。
c.重啟HBase。
2.靜態卸載
a.從hbase-site中刪除配置。
b.重啟HBase。
c.((可選))從類路徑或HBase的lib/目錄中刪除協處理器的JAR文件。
3.動態加載
您還可以動態加載協處理器,而無需重新啟動HBase。這似乎比靜態加載更可取,但是動態加載的協處理器是在每個表的基礎上加載的,并且只對加載它們的表可用。因此,動態加載的表有時被稱為表協處理器。
此外,動態加載協處理器相當于對表進行模式更改,必須使表脫機才能加載協處理器。
以下說明做了如下假設:
一個叫做coprocessor.jar的JAR包含了協處理器實現以及它的所有依賴項。
該JAR在HDFS中的某些位置 (如,hdfs://<namenode>:<port>/user/<hadoop-user>/coprocessor.jar ) 中可用。
a.使用Hbase shell加載
使用類似以下命令加載協處理器:
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'
協處理器框架將嘗試從協處理器表屬性值中讀取類信息。該值包含由管道(|)字符分隔的四段信息:
1)文件路徑:包含協處理器實現的jar文件必須位于所有區域服務器都可以讀取它的位置,您可以將文件復制到每個區域服務器上的本地磁盤,但建議將其存儲在HDFS中。
2)類名:協處理器的完整類名。
3)優先級:一個整數。框架將使用優先級確定在同一個鉤子上注冊的所有配置的觀察者的執行順序。此字段可以留空。在這種情況下,框架將分配一個默認的優先級值。
4)參數(可選):這個字段被傳遞給協處理器實現。這是可選的。
驗證協處理器加載成功。
hbase(main):04:0> describe 'users'
b.使用JavaAPI加載(all HBase versions)
下面的Java代碼展示了如何使用HTableDescriptor的setValue()方法在users表上加載協處理器。
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();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);
c.使用JavaAPI(HBase 0.96+ only)
在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();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);
注意:
這里不能保證框架將成功加載給定的協處理器。例如,shell命令既不保證jar文件存在于特定的位置,也不驗證給定的類是否實際包含在jar文件中。
4.動態卸載
a.更改表以刪除協處理器
hbase> alter 'users', METHOD => 'table_att_unset', NAME => 'coprocessor$1'
b.使用JavaAPI卸載
使用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();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);
到此,關于“HBase協處理器Coprocessor怎么使用”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。