如何在Redis上儲存的資料上對Java執行分散式MapReduce
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
非常重要的是減少非常大的文字塊或大量檔案集的處理時間。
請檢視以下程式碼,瞭解此演算法如何使用 RedissonMapReduce
提供的文字資料並對其進行處理以可靠地生成準確的字數。
步驟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中的大量資料。