2014-09-28 36 views
0

我已經使用python streaming(僅具有mapper函數實現)編寫了mapreduce代碼,並使用happybase從Hbase讀取。 當我在5節點發行版中運行mapreduce代碼時,由於python流代碼具有掃描功能,該功能從hbase讀取記錄並分佈在整個集羣中,所有創建的映射器實例正在從提取/讀取的相同數據集上進行處理hbase。Python Mapreduce在從hbase讀取的重複數據上運行

例如:

for key, data in table.scan(row_start='1'): 

    Somecompute(key, data) 

在這裏,如果我有在HBase的100行中的所有集羣中催生了映射器實例從HBase的,因爲它是在分發執行相同的映射器代碼因此重複處理相同的100個記錄。 我的要求是,m1映射器應該處理1到20條記錄,m2映射器應該處理21到40條記錄,m3應該處理41到60等.... 我如何在使用快樂基的python流中實現這一點? 任何人都可以請幫忙。 謝謝!

回答

0

在happybase,使用掃描,row_start意味着決定開始行密鑰

所以如果start_rows是相同的,那麼結果集將是相同的。

如果你想獲得下一集,你必須設置row_start到的前結果的最後一行鍵

像下面

  1. 第一次掃描:row_start=1result=[1:101]last_row=101Somecompute(1 ~ 100)
  2. 第二次掃描:row_start=101result=[101:201]last_row=201Somecompute(101 ~ 200)
  3. 第三次掃描:....

我希望這會對您有所幫助。

+0

han058:無論您提到的是我的要求,但其他映射器實例如何表明m2將知道它必須掃描101到201條記錄的表,即預結果和m3從202到n,因爲我的映射減少代碼我提到row_start從1開始並部署代碼。我在hbase表中有超過一百萬條記錄。 – 2014-09-29 05:47:21