溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Redis上對Java執(zhí)行分布式MapReduce

發(fā)布時間:2021-12-23 09:56:45 來源:億速云 閱讀:130 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要講解了“怎么在Redis上對Java執(zhí)行分布式MapReduce”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么在Redis上對Java執(zhí)行分布式MapReduce”吧!

什么是MapReduce?

MapReduce 是一種可以用Java實現(xiàn)的分布式計算的程序模型。該算法包含兩個關(guān)鍵任務,稱為  Map 和  Reduce。

Map 任務的目的  是將數(shù)據(jù)集轉(zhuǎn)換為另一個數(shù)據(jù)集,其中元素被分解為稱為元組的鍵/值對。該Reduce 任務將這些數(shù)據(jù)元組組合成一小組元組,使用地圖的輸出作為輸入。

分布式計算意味著將任務分成幾個單獨的進程,然后可以在大型商用硬件集群上并行執(zhí)行。一旦  MapReduce 將大數(shù)據(jù)集的各個元素分解為元組,然后進一步將它們縮小為較小的集合,剩余的數(shù)據(jù)可以并行處理,這可以顯著加快需要對數(shù)據(jù)執(zhí)行的處理。

何時需要使用MapReduce處理Redis數(shù)據(jù)?

在許多情況下,使用它MapReduce 來處理Redis數(shù)據(jù)很有幫助  。通常,它們的共同點是您需要處理的數(shù)據(jù)量非常大。

舉一個簡單的例子,您可以考慮一種情況,其中您有大量組織的月度能耗數(shù)據(jù)?,F(xiàn)在假設您需要處理此數(shù)據(jù)以生成每個組織的最大使用年份,最小使用年份等結(jié)果。雖然編寫算法來執(zhí)行這種處理對于有經(jīng)驗的程序員來說并不困難,但是如果必須運行大量數(shù)據(jù),許多這樣的算法將花費很長時間來執(zhí)行。

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

還有更多的情況MapReduce 使用Redisson存儲在Redis中的分布式  數(shù)據(jù)可能是非常有用的。例如,MapReduce 如果您需要快速,可靠且準確地計算非常大的文件或文件集合的字數(shù),則使用  特別有用。

在Redis中存儲的數(shù)據(jù)上執(zhí)行分布式MapReduce的示例

以下是如何使用MapReduce 創(chuàng)建生成準確字數(shù)的有效算法的示例  。這似乎是一個非常簡單的任務,但使用  MapReduce 非常重要的是減少非常大的文本塊或大量文件集的處理時間。

請查看以下代碼,了解此算法如何使用  RedissonMapReduce 提供的文本數(shù)據(jù)并對其進行處理以可靠地生成準確的字數(shù)。

步驟1

創(chuàng)建Redisson配置:

//來自JSON
配置 config  =  配置。fromJSON(...)
//來自YAML
配置 config  =  配置。來自YAML(...)
//或動態(tài)
Config  config  =  new  Config();
...

第2步

創(chuàng)建Redisson實例:

RedissonClient  redisson  =  Redisson。create(config);

第3步

定義  Mapper 對象。這適用于每個  Map 條目,并按空格分割值以分隔單詞:

公共 類 WordMapper  實現(xiàn) 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){
                收藏家。發(fā)射(字,1);
            }
        }
    }

}

第4步

定義Reducer 對象。這計算每個單詞的總和。

公共 類 WordReducer  實現(xiàn) RReducer < String,Integer > {

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

第5步

定義  Collator 對象(可選)。這會計算單詞總數(shù)。

公共 類 WordCollator  實現(xiàn) RCollator < String,Integer,Integer > {

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

        返回 結(jié)果 ;
     }
}

第6步

以下是如何一起運行它:

    RMap < String,String >  map  =  redisson。getMap(“wordsMap”);
    地圖。put(“l(fā)ine1”,“愛麗絲開始變得非常疲憊”);
    地圖。把(“l(fā)ine2”,“坐在她姐姐的銀行和”);
    地圖。放(“l(fā)ine3”,“她無事可做一次”);
    地圖。put(“l(fā)ine4”,“偷看了她姐姐讀的書”);
    地圖。put(“l(fā)ine5”,“但它沒有圖片或?qū)υ挕保?
    地圖。put(“l(fā)ine6”,“以及書籍的用途”);
    地圖。put(“l(fā)ine7”,“思想愛麗絲沒有圖片或談話”);

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

    //計算單詞的出現(xiàn)次數(shù)
    Map < String,Integer >  mapToNumber  =  mapReduce。execute();
    //計算總字數(shù)量
    整數(shù) totalWordsAmount  =  mapReduce。execute(new  WordCollator());

 MapReduce 也可用于收集類型的對象,其中包括  Set,  SetCache,  List,  SortedSet,  ScoredSortedSet,  Queue,  BlockingQueue,  Deque,,  BlockingDeque,  PriorityQueue,和  PriorityDeque。

如何使用Redisson對Redis中存儲的數(shù)據(jù)執(zhí)行MapReduce

Redisson是一個最先進的Redis客戶端,為使用Java進行編程和數(shù)據(jù)處理提供了無限可能。從最大的企業(yè)到最小的初創(chuàng)公司,各種各樣的公司使用Redisson通過Redis為他們的Java應用程序提供支持。

作為一個高度復雜的Redis客戶端,Redisson提供了服務,對象,集合,鎖和同步器的分布式實現(xiàn)。它支持一系列Redis配置,包括單個,集群,標記或主從配置。

MapReduce 如果您已經(jīng)使用Redisson在Redis中存儲大量數(shù)據(jù),則使用  是一個很好的選擇。Redisson提供了一種基于Java的  MapReduce 編程模型,可以輕松處理存儲在Redis中的大量數(shù)據(jù)。

感謝各位的閱讀,以上就是“怎么在Redis上對Java執(zhí)行分布式MapReduce”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對怎么在Redis上對Java執(zhí)行分布式MapReduce這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI