Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 一个减速机与多个减速机的比较,具有用于计算字数和排序的后处理功能。哪一个更高效、更可扩展?_Java_Hadoop_Mapreduce - Fatal编程技术网

Java 一个减速机与多个减速机的比较,具有用于计算字数和排序的后处理功能。哪一个更高效、更可扩展?

Java 一个减速机与多个减速机的比较,具有用于计算字数和排序的后处理功能。哪一个更高效、更可扩展?,java,hadoop,mapreduce,Java,Hadoop,Mapreduce,我在一个MapReduce作业中使用排序(按值)进行字数计算。实现这一目标的两种方法: 在reduce函数中使用一个reducer并将所有内容保存在HashMap中,在cleanUp函数中按值对所有内容进行排序,然后将所有内容写入文件 在MapReduce作业之后,使用多个缩减器并在HDFS中保存字数。在MR之后,使用Java对所有内容进行排序 哪种解决方案在效率和可扩展性方面更好 第二种变体不提供全局排序,例如,如果您有两个还原器,则结果文件可能是 part-r-00000 word1

我在一个MapReduce作业中使用排序(按值)进行字数计算。实现这一目标的两种方法:

  • 在reduce函数中使用一个reducer并将所有内容保存在HashMap中,在cleanUp函数中按值对所有内容进行排序,然后将所有内容写入文件

  • 在MapReduce作业之后,使用多个缩减器并在HDFS中保存字数。在MR之后,使用Java对所有内容进行排序


  • 哪种解决方案在效率和可扩展性方面更好

    第二种变体不提供全局排序,例如,如果您有两个还原器,则结果文件可能是

    part-r-00000
    word1    1
    word2    3
    
    part-r-00001
    word3    2
    word4    5
    
    即使按值对每个文件进行排序,也很难按降序迭代单词
    word4-word2-word3-word1
    。不过,你可以在阅读的同时做一些技巧

    另一方面,单个减速器的执行速度较慢,因为它必须处理所有数据。此外,您可能没有足够的内存来保存JVM堆中的所有数据


    如果可能的话,我会选择单个减速机。

    对于一般化的工作负载(包括字数),使用一个减速机不是一个好主意,因为它是一个明显的瓶颈(即,所有多个映射器输出都会用到它)。因此,选项2更可取


    另外,请注意,reducer输出是经过排序的,因此“HashMap”、“cleanUp”在选项1

    中是多余的。在第二个变体中,排序可以通过Java Collection.sort()完成,方法是访问每个文件(part-r-00000、part-r-00001等),获取值并将其存储在HashMap中。hashmap的每个条目都可以添加到列表中,并可以使用Collection.sort()进行排序。你认为如果我们处理的是大文件,这可能吗?@HamzaMalik如果你能在一个减速机中做同样的事情,那么在MR作业之后用java程序读取所有文件有什么意义呢?因为在一个MR作业中,我只能找到单词的频率(我的减速机将所有最终频率相加),然后写回HDFS。我还想对输出的键值按值排序,但按关键字排序。@HamzaMalik你不明白我的意思。我说,在reducer cleanup中使用按值排序的变体1与在java程序中读取所有reducer文件并按值排序是一样的。好的,您认为在性能方面是一样的吗?所谓排序,我指的是按值排序,也有问题地进行了更新。