這篇文章主要講解了“怎么在Redis上對Java執(zhí)行分布式MapReduce”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“怎么在Redis上對Java執(zhí)行分布式MapReduce”吧!
創(chuàng)新互聯(lián)公司于2013年成立,先為貴州等服務(wù)建站,貴州等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為貴州企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。MapReduce
是一種可以用Java實現(xiàn)的分布式計算的程序模型。該算法包含兩個關(guān)鍵任務(wù),稱為 Map
和 Reduce
。
該Map
任務(wù)的目的 是將數(shù)據(jù)集轉(zhuǎn)換為另一個數(shù)據(jù)集,其中元素被分解為稱為元組的鍵/值對。該Reduce
任務(wù)將這些數(shù)據(jù)元組組合成一小組元組,使用地圖的輸出作為輸入。
分布式計算意味著將任務(wù)分成幾個單獨的進程,然后可以在大型商用硬件集群上并行執(zhí)行。一旦 MapReduce
將大數(shù)據(jù)集的各個元素分解為元組,然后進一步將它們縮小為較小的集合,剩余的數(shù)據(jù)可以并行處理,這可以顯著加快需要對數(shù)據(jù)執(zhí)行的處理。
在許多情況下,使用它MapReduce
來處理Redis數(shù)據(jù)很有幫助 。通常,它們的共同點是您需要處理的數(shù)據(jù)量非常大。
舉一個簡單的例子,您可以考慮一種情況,其中您有大量組織的月度能耗數(shù)據(jù)。現(xiàn)在假設(shè)您需要處理此數(shù)據(jù)以生成每個組織的大使用年份,最小使用年份等結(jié)果。雖然編寫算法來執(zhí)行這種處理對于有經(jīng)驗的程序員來說并不困難,但是如果必須運行大量數(shù)據(jù),許多這樣的算法將花費很長時間來執(zhí)行。
作為長處理時間問題的解決方案,您可以使用 MapReduce
減少數(shù)據(jù)集的總體大小,從而使處理速度更快。對于許多組織來說,處理時間的減少可能非常重要,因為它可以釋放硬件,以便可以用于其他計算任務(wù)。
還有更多的情況MapReduce
使用Redisson存儲在Redis中的分布式 數(shù)據(jù)可能是非常有用的。例如,MapReduce
如果您需要快速,可靠且準確地計算非常大的文件或文件集合的字數(shù),則使用 特別有用。
以下是如何使用MapReduce
創(chuàng)建生成準確字數(shù)的有效算法的示例 。這似乎是一個非常簡單的任務(wù),但使用 MapReduce
非常重要的是減少非常大的文本塊或大量文件集的處理時間。
請查看以下代碼,了解此算法如何使用 RedissonMapReduce
提供的文本數(shù)據(jù)并對其進行處理以可靠地生成準確的字數(shù)。
創(chuàng)建Redisson配置:
//來自JSON
配置 config = 配置。fromJSON(...)
//來自YAML
配置 config = 配置。來自YAML(...)
//或動態(tài)
Config config = new Config();
...
創(chuàng)建Redisson實例:
RedissonClient redisson = Redisson。create(config);
定義 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);
}
}
}
}
定義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 ;
}
返還 金額 ;
}
}
定義 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é)果 ;
}
}
以下是如何一起運行它:
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客戶端,為使用Java進行編程和數(shù)據(jù)處理提供了無限可能。從大的企業(yè)到最小的初創(chuàng)公司,各種各樣的公司使用Redisson通過Redis為他們的Java應(yīng)用程序提供支持。
作為一個高度復(fù)雜的Redis客戶端,Redisson提供了服務(wù),對象,集合,鎖和同步器的分布式實現(xiàn)。它支持一系列Redis配置,包括單個,集群,標記或主從配置。
MapReduce
如果您已經(jīng)使用Redisson在Redis中存儲大量數(shù)據(jù),則使用 是一個很好的選擇。Redisson提供了一種基于Java的 MapReduce
編程模型,可以輕松處理存儲在Redis中的大量數(shù)據(jù)。
感謝各位的閱讀,以上就是“怎么在Redis上對Java執(zhí)行分布式MapReduce”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對怎么在Redis上對Java執(zhí)行分布式MapReduce這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!