這篇文章主要介紹“HBase協(xié)處理器Coprocessor怎么使用”,在日常操作中,相信很多人在HBase協(xié)處理器Coprocessor怎么使用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”HBase協(xié)處理器Coprocessor怎么使用”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
創(chuàng)新互聯(lián)2013年開創(chuàng)至今,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目做網(wǎng)站、網(wǎng)站建設(shè)網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元興隆臺做網(wǎng)站,已為上家服務(wù),為興隆臺各地企業(yè)和個人服務(wù),聯(lián)系電話:18982081108
要使您的協(xié)處理器對HBase可用,必須靜態(tài)(通過HBase配置)或動態(tài)(使用HBase Shell或Java API)加載它。
1.靜態(tài)加載:
按照以下步驟靜態(tài)加載協(xié)處理器。請記住,您必須重新啟動HBase來卸載靜態(tài)加載的協(xié)處理器。
a.在配置文件hbase-site.xml中定義協(xié)處理器,新增配置項的<name>應(yīng)該是以下內(nèi)容:
hbase.coprocessor.region.classes for RegionObservers andnd Endpoints.
hbase.coprocessor.wal.classes for WALObservers.
hbase.coprocessor.master.classes for MasterObservers.
<value>對應(yīng)所以加載的完整類名;
例如:要加載RegionObservers協(xié)處理器(在類SumEndPoint.java中實現(xiàn)),在hbase-site中添加以下配置:
<property> <name>hbase.coprocessor.region.classes</name> <value>org.myname.hbase.coprocessor.endpoint.SumEndPoint</value></property>
如果指定多個類用于加載,則類名必須以逗號分隔??蚣車L試使用默認(rèn)的類裝入器裝入所有配置的類。因此,jar文件必須駐留在服務(wù)器端HBase類路徑中。
以這種方式加載的協(xié)處理器將在所有表的所有區(qū)域上處于活動狀態(tài)。這些也稱為系統(tǒng)協(xié)處理器。將為第一個列出的協(xié)處理器分配優(yōu)先級Coprocessor.Priority.SYSTEM。列表中的每個后續(xù)協(xié)處理器的優(yōu)先級值都會增加1(這會降低其優(yōu)先級,因為優(yōu)先級具有整數(shù)的自然排序順序)。
當(dāng)調(diào)用注冊的觀察者時,框架以其優(yōu)先級的排序順序執(zhí)行其回調(diào)方法。關(guān)系是任意破壞的。
b.將代碼放到HBase的類路徑中。一種簡單的方法是將jar(包含您的代碼和所有依賴項)放到HBase安裝中的lib/目錄中。
c.重啟HBase。
2.靜態(tài)卸載
a.從hbase-site中刪除配置。
b.重啟HBase。
c.((可選))從類路徑或HBase的lib/目錄中刪除協(xié)處理器的JAR文件。
3.動態(tài)加載
您還可以動態(tài)加載協(xié)處理器,而無需重新啟動HBase。這似乎比靜態(tài)加載更可取,但是動態(tài)加載的協(xié)處理器是在每個表的基礎(chǔ)上加載的,并且只對加載它們的表可用。因此,動態(tài)加載的表有時被稱為表協(xié)處理器。
此外,動態(tài)加載協(xié)處理器相當(dāng)于對表進(jìn)行模式更改,必須使表脫機(jī)才能加載協(xié)處理器。
以下說明做了如下假設(shè):
一個叫做coprocessor.jar的JAR包含了協(xié)處理器實現(xiàn)以及它的所有依賴項。
該JAR在HDFS中的某些位置 (如,hdfs://<namenode>:<port>/user/<hadoop-user>/coprocessor.jar ) 中可用。
a.使用Hbase shell加載
使用類似以下命令加載協(xié)處理器:
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é)處理器表屬性值中讀取類信息。該值包含由管道(|)字符分隔的四段信息:
1)文件路徑:包含協(xié)處理器實現(xiàn)的jar文件必須位于所有區(qū)域服務(wù)器都可以讀取它的位置,您可以將文件復(fù)制到每個區(qū)域服務(wù)器上的本地磁盤,但建議將其存儲在HDFS中。
2)類名:協(xié)處理器的完整類名。
3)優(yōu)先級:一個整數(shù)??蚣軐⑹褂脙?yōu)先級確定在同一個鉤子上注冊的所有配置的觀察者的執(zhí)行順序。此字段可以留空。在這種情況下,框架將分配一個默認(rèn)的優(yōu)先級值。
4)參數(shù)(可選):這個字段被傳遞給協(xié)處理器實現(xiàn)。這是可選的。
驗證協(xié)處理器加載成功。
hbase(main):04:0> describe 'users'
b.使用JavaAPI加載(all HBase versions)
下面的Java代碼展示了如何使用HTableDescriptor的setValue()方法在users表上加載協(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();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()方法提供了一種更簡單的方法來動態(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();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);
注意:
這里不能保證框架將成功加載給定的協(xié)處理器。例如,shell命令既不保證jar文件存在于特定的位置,也不驗證給定的類是否實際包含在jar文件中。
4.動態(tài)卸載
a.更改表以刪除協(xié)處理器
hbase> alter 'users', METHOD => 'table_att_unset', NAME => 'coprocessor$1'
b.使用JavaAPI卸載
使用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();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);
到此,關(guān)于“HBase協(xié)處理器Coprocessor怎么使用”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
網(wǎng)站欄目:HBase協(xié)處理器Coprocessor怎么使用
文章分享:http://m.rwnh.cn/article14/pcddde.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、網(wǎng)站內(nèi)鏈、企業(yè)網(wǎng)站制作、面包屑導(dǎo)航、網(wǎng)站收錄、網(wǎng)站導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)