如何在Redis上儲存的資料上對Java執行分散式MapReduce

Tybyq發表於2018-11-22

MapReduce是一個框架,當今的程式設計師可以使用它來編寫能夠使用現代分散式資料處理方法處理大量資料的應用程式。 這種處理方法在當今的組織中非常流行。 由於它允許在大型商用硬體叢集上並行處理資料,因此   MapReduce   可以顯著加快資料處理速度。 在這篇文章中,我們將看看如何 MapReduce   使用 Redisson 執行   Redis中儲存的資料

什麼是MapReduce?

MapReduce  是一種可以用Java實現的分散式計算的程式模型。 該演算法包含兩個關鍵任務,稱為   Map   和   Reduce

Map   任務 的目的   是將資料集轉換為另一個資料集,其中元素被分解為稱為元組的鍵/值對。 Reduce   任務將這些資料元組組合成一小組元組,使用地圖的輸出作為輸入。

分散式計算意味著將任務分成幾個單獨的程式,然後可以在大型商用硬體叢集上並行執行。 一旦   MapReduce   將大資料集的各個元素分解為元組,然後進一步將它們縮小為較小的集合,剩餘的資料可以並行處理,這可以顯著加快需要對資料執行的處理。

何時需要使用MapReduce處理Redis資料?

在許多情況下,使用它 MapReduce   來處理Redis資料 很有幫助   通常,它們的共同點是您需要處理的資料量非常大。

舉一個簡單的 例子 ,您可以考慮一種情況,其中您有大量組織的月度能耗資料。 現在假設您需要處理此資料以生成每個組織的最大使用年份,最小使用年份等結果。 雖然編寫演算法來執行這種處理對於有經驗的程式設計師來說並不困難,但是如果必須執行大量資料,許多這樣的演算法將花費很長時間來執行。

作為長處理時間問題的解決方案,您可以使用   MapReduce   減少資料集的總體大小,從而使處理速度更快。 對於許多組織來說,處理時間的減少可能非常重要,因為它可以釋放硬體,以便可以用於其他計算任務。

還有更多的情況 MapReduce   使用Redisson儲存在Redis中的 分散式   資料可能是非常有用的。 例如, MapReduce   如果您需要快速,可靠且準確地計算非常大的檔案或檔案集合的字數 ,則使用   特別有用。

在Redis中儲存的資料上執行分散式MapReduce的示例

以下是如何使用 MapReduce   建立生成準確字數的有效演算法 的示例   這似乎是一個非常簡單的任務,但使用   MapReduce   非常重要的是減少非常大的文字塊或大量檔案集的處理時間。

請檢視以下程式碼,瞭解此演算法如何使用   Redisson MapReduce   提供的 文字資料並對其進行處理以可靠地生成準確的字數。

步驟1

建立Redisson配置:

//來自JSON

配置 config  =  配置。fromJSON(...)

//來自YAML

配置 config  =  配置。來自YAML(...)

//或動態

Config  config  =  new  Config();

...


第2步

建立Redisson例項:

RedissonClient  redisson  =  Redisson。create(config);


第3步

定義   Mapper   物件。 這適用於每個   Map   條目,並按空格分割值以分隔單詞:

公共 類 WordMapper  實現 RMapper < String,String,String,Integer > {

    @覆蓋
    public  void  map(String  key,String  value,RCollector < String,Integer >  collector){
            String [] words  =  value。split(“[^ a-zA-Z]”);
            for(String  word:words){
                收藏家。發射(字,1);
            }
        }
    }

}


第4步

定義 Reducer   物件。 這計算每個單詞的總和。

公共 類 WordReducer  實現 RReducer < String,Integer > {

     @覆蓋
     public  Integer  reduce(String  reducedKey,Iterator < Integer >  iter){
         int  sum  =  0 ;
         而(ITER。hasNext()){
            整數 i  =(整數)iter。next();
            sum  + =  i ;
         }
         返還 金額 ;
     }
}


第5步

定義   Collator   物件(可選)。 這會計算單詞總數。

公共 類 WordCollator  實現 RCollator < String,Integer,Integer > {

     @覆蓋
     public  Integer  collate(Map < String,Integer >  resultMap){
        int  result  =  0 ;
        為(整數 計數:結果對映。值()){
            結果 + =  計數 ;
        }

        返回 結果 ;
     }
}


第6步

以下是如何一起執行它:

    RMap < String,String >  map  =  redisson。getMap(“wordsMap”);
    地圖。put(“line1”,“愛麗絲開始變得非常疲憊”);
    地圖。把(“line2”,“坐在她姐姐的銀行和”);
    地圖。放(“line3”,“她無事可做一次”);
    地圖。put(“line4”,“偷看了她姐姐讀的書”);
    地圖。put(“line5”,“但它沒有圖片或對話”);
    地圖。put(“line6”,“以及書籍的用途”);
    地圖。put(“line7”,“思想愛麗絲沒有圖片或談話”);

    RMapReduce < String,String,String,Integer >  mapReduce
             =  地圖。< String,Integer > mapReduce()
                  。mapper(新的 WordMapper())
                  。reducer(new  WordReducer());

    //計算單詞的出現次數
    Map < String,Integer >  mapToNumber  =  mapReduce。execute();

    //計算總字數量
    整數 totalWordsAmount  =  mapReduce。execute(new  WordCollator());


  MapReduce   也可用於收集型別的物件,其中包括   Set ,   SetCache ,   List ,   SortedSet ,   ScoredSortedSet ,   Queue ,   BlockingQueue ,   Deque, ,   BlockingDeque ,   PriorityQueue ,和   PriorityDeque

如何使用Redisson對Redis中儲存的資料執行MapReduce

Redisson 是一個最先進的Redis客戶端,為使用Java進行程式設計和資料處理提供了無限可能。 從最大的企業到最小的初創公司,各種各樣的公司使用Redisson透過Redis為他們的Java應用程式提供支援。

作為一個高度複雜的Redis客戶端,Redisson提供了服務,物件,集合,鎖和同步器的分散式實現。 它支援一系列Redis配置,包括單個,叢集,標記或主從配置。

MapReduce   如果您已經使用 Redisson 在Redis中儲存大量資料, 使用   是一個很好的選擇 Redisson提供了一種基於Java的   MapReduce   程式設計模型,可以輕鬆處理儲存在Redis中的大量資料。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31557424/viewspace-2221261/,如需轉載,請註明出處,否則將追究法律責任。

相關文章