怎么在Redis上对Java执行分布式MapReduce-创新互联
这篇文章主要讲解了“怎么在Redis上对Java执行分布式MapReduce”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么在Redis上对Java执行分布式MapReduce”吧!
创新互联公司于2013年成立,先为贵州等服务建站,贵州等地企业,进行企业商务咨询服务。为贵州企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。什么是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中的大量数据。
感谢各位的阅读,以上就是“怎么在Redis上对Java执行分布式MapReduce”的内容了,经过本文的学习后,相信大家对怎么在Redis上对Java执行分布式MapReduce这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!
本文标题:怎么在Redis上对Java执行分布式MapReduce-创新互联
文章URL:http://azwzsj.com/article/cdjhss.html