ITPub博客

首页 > 数字化转型 > 其他 > 如何在Redis上存储的数据上对Java执行分布式MapReduce

如何在Redis上存储的数据上对Java执行分布式MapReduce

原创 其他 作者:Tybyq 时间:2018-11-22 18:04:23 0 删除 编辑

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   非常重要的是减少非常大的文本块或大量文件集的处理时间。

请查看以下代码,了解此算法如何使用   Redisson MapReduce   提供的 文本数据并对其进行处理以可靠地生成准确的字数。

步骤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中的大量数据。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31557424/viewspace-2221261/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2018-10-31

  • 博文量
    173
  • 访问量
    60528