利用Hbase的coprocessor實現增量式Apriori算法

  • Apriori在數據挖掘中是經典的頻繁項集挖掘算法,其主要思想就是如果某個項集不頻繁,則任何包含此項集的項集一定不頻繁。而今天要實現的增量式的Apriori算法,有點像分佈式的Apriori,因爲我們可以把已挖掘的事務集和新增的事務集看作兩個互相獨立的數據集,挖掘新增的事務集,獲取所有新增頻繁集,然後與已有的頻繁集做並集,對於兩邊都同時頻繁的項集肯定全局頻繁,而只有一邊頻繁的項集則需要統計其在兩邊的頻繁計數,這樣完成後就能獲得所有的全局頻繁集,並不需要重新挖掘已有的事務集,效率必然提高。

  • 至於Hbase的Coprocessor,相信大家也很瞭解了吧,這是根據Google的BigTable中實現的Percolator的開源實現,目的是提供增量操作以及建立二級索引。Hbase提供兩種類型的Coprocessor,Endpoint和Observer,Endpoint提供的類似於數據庫的存儲過程,需要事先部署一份程序到各個regionserver,然後由客戶端調用,並彙總各個regionserver處理後返回的數據。Observer就像數據庫中的觸發器,只需部署到regionserver,其提供PreGet、PostGet、PrePut、PostPut、PreDelete、PostDelete等操作,所以當每個regionserver發生了以上的操作時,就會觸發Observer。

  • 今天我們只用到了Endpoint型的Coprocessor,由各個regionserver統計其事務集中所有頻繁項集,然後客戶端彙總各個region的頻繁項集,做個並集,對於計數已達到最低支持度要求的項集就認定爲全局頻繁,剩下的項集就繼續統計其在所有region中的頻繁計數,最終獲得所有全局頻繁項集。第二步,就是增量地插入事務集,用timestamp做好標記,然後按照一開始說的方法,再次得到所有全局頻繁的項集。
    有必要提一下的是,Hbase從0.98版本開始,Coprocessor的遠程通信採用了protobuf標準,protobuf需要實現定義通信格式,下面就是該算法需要的proto
package apriori;
option java_package = "dave.apriori.protos";
option java_outer_classname = "AprioriProtos";
option java_generic_services = true;
option java_generate_equals_and_hash = true;
option optimize_for = SPEED;

message AprioriRequest {
  required int32 length = 1;
  required float support = 2;
}

message AprioriResponse {
  message FrequentSet {
    required bytes fset = 3;
    required int32 support = 4;
  }
  required int32 count = 5;
  repeated FrequentSet fsets = 6;
}

message SpecialRequest {
    repeated bytes fsets = 7;
}

message SpecialResponse {
    repeated int32 supportCount = 8;
}

message HelloRequest{
    required bytes hellostr = 9;
}

message HelloResponse{
    required bytes helloresp = 10;
}

service Apriori {
  rpc getFrequentSet(AprioriRequest)
    returns (AprioriResponse);
  rpc getSepecialSupport(SpecialRequest)
    returns (SpecialResponse);
  rpc sayHello(HelloRequest)
    returns (HelloResponse);
}

定義了三個service,一個是獲得該region所有的頻繁項集,另一個是獲取某個項集在該region的計數,最後是測試用的sayHello。
定義好了之後,用protoc –java_out=. Apriori.proto命令就可以在當前目錄下生成相應的java文件,再導入到項目中就可以編寫服務器和客戶端了。
部署過程和源代碼已上傳,有需要的朋友可在http://download.csdn.net/detail/xanxus46/8801857下載

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章