MapReduce是一个框架,当今的程序员可以使用它来编写能够使用现代分布式数据处理方法处理大量数据的应用程序。
这种处理方法在当今的组织中非常流行。
由于它允许在大型商用硬件集群上并行处理数据,因此
MapReduce
可以显着加快数据处理速度。
在这篇文章中,我们将看看如何
MapReduce
使用
Redisson
执行
Redis中存储的数据
。
MapReduce
是一种可以用Java实现的分布式计算的程序模型。
该算法包含两个关键任务,称为
Map
和
Reduce
。
该
Map
任务
的目的
是将数据集转换为另一个数据集,其中元素被分解为称为元组的键/值对。
该
Reduce
任务将这些数据元组组合成一小组元组,使用地图的输出作为输入。
分布式计算意味着将任务分成几个单独的进程,然后可以在大型商用硬件集群上并行执行。
一旦
MapReduce
将大数据集的各个元素分解为元组,然后进一步将它们缩小为较小的集合,剩余的数据可以并行处理,这可以显着加快需要对数据执行的处理。
在许多情况下,使用它
MapReduce
来处理Redis数据
很有帮助
。
通常,它们的共同点是您需要处理的数据量非常大。
举一个简单的 例子 ,您可以考虑一种情况,其中您有大量组织的月度能耗数据。 现在假设您需要处理此数据以生成每个组织的最大使用年份,最小使用年份等结果。 虽然编写算法来执行这种处理对于有经验的程序员来说并不困难,但是如果必须运行大量数据,许多这样的算法将花费很长时间来执行。
作为长处理时间问题的解决方案,您可以使用
MapReduce
减少数据集的总体大小,从而使处理速度更快。
对于许多组织来说,处理时间的减少可能非常重要,因为它可以释放硬件,以便可以用于其他计算任务。
还有更多的情况
MapReduce
使用Redisson存储在Redis中的
分布式
数据可能是非常有用的。
例如,
MapReduce
如果您需要快速,可靠且准确地计算非常大的文件或文件集合的字数
,则使用
特别有用。
以下是如何使用
MapReduce
创建生成准确字数的有效算法
的示例
。
这似乎是一个非常简单的任务,但使用
MapReduce
非常重要的是减少非常大的文本块或大量文件集的处理时间。
请查看以下代码,了解此算法如何使用
Redisson
MapReduce
提供的
文本数据并对其进行处理以可靠地生成准确的字数。
创建Redisson配置:
//来自JSON
配置 config = 配置。fromJSON(...)
//来自YAML
配置 config = 配置。来自YAML(...)
//或动态
Config config = new Config();
...
创建Redisson实例:
RedissonClient redisson = Redisson。create(config);
定义
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);
}
}
}
}
定义
Reducer
对象。
这计算每个单词的总和。
公共 类 WordReducer 实现 RReducer < String,Integer > {
@覆盖
public Integer reduce(String reducedKey,Iterator < Integer > iter){
int sum = 0 ;
而(ITER。hasNext()){
整数 i =(整数)iter。next();
sum + = i ;
}
返还 金额 ;
}
}
定义
Collator
对象(可选)。
这会计算单词总数。
公共 类 WordCollator 实现 RCollator < String,Integer,Integer > {
@覆盖
public Integer collate(Map < String,Integer > resultMap){
int result = 0 ;
为(整数 计数:结果映射。值()){
结果 + = 计数 ;
}
返回 结果 ;
}
}
以下是如何一起运行它:
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客户端,为使用Java进行编程和数据处理提供了无限可能。 从最大的企业到最小的初创公司,各种各样的公司使用Redisson通过Redis为他们的Java应用程序提供支持。
作为一个高度复杂的Redis客户端,Redisson提供了服务,对象,集合,锁和同步器的分布式实现。 它支持一系列Redis配置,包括单个,集群,标记或主从配置。
MapReduce
如果您已经使用
Redisson
在Redis中存储大量数据,
则
使用
是一个很好的选择
。
Redisson提供了一种基于Java的
MapReduce
编程模型,可以轻松处理存储在Redis中的大量数据。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31557424/viewspace-2221261/ ,如需转载,请注明出处,否则将追究法律责任。