Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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
Hadoop 映射程序何时将其输出存储到本地硬盘?_Hadoop_Apache Spark_Mapreduce_Mapper_Reducers - Fatal编程技术网

Hadoop 映射程序何时将其输出存储到本地硬盘?

Hadoop 映射程序何时将其输出存储到本地硬盘?,hadoop,apache-spark,mapreduce,mapper,reducers,Hadoop,Apache Spark,Mapreduce,Mapper,Reducers,我知道 映射器(中间数据)的输出存储在每个映射器数据节点的本地文件系统(而不是HDFS)上。这通常是一个临时目录,Hadoop管理员可以在config中设置它。一旦映射器作业完成或数据传输到Reducer,这些中间数据将被清除,不再可访问 但是,我想知道映射器何时将其输出存储到本地硬盘?是因为数据太大,无法存储在内存中吗?只有正在处理的数据保留在内存中?如果数据很小,并且整个数据都可以放在内存中,那么就没有磁盘参与了吗 一旦数据在映射器中进行处理,我们能否在没有映射器m/c硬盘参与的情况下,直接

我知道

映射器(中间数据)的输出存储在每个映射器数据节点的本地文件系统(而不是HDFS)上。这通常是一个临时目录,Hadoop管理员可以在config中设置它。一旦映射器作业完成或数据传输到Reducer,这些中间数据将被清除,不再可访问

但是,我想知道映射器何时将其输出存储到本地硬盘?是因为数据太大,无法存储在内存中吗?只有正在处理的数据保留在内存中?如果数据很小,并且整个数据都可以放在内存中,那么就没有磁盘参与了吗

一旦数据在映射器中进行处理,我们能否在没有映射器m/c硬盘参与的情况下,直接将数据从映射器移动到reducer。我的意思是,由于数据是在映射器中处理的,并且是在内存中,一旦计算出来,它就会直接传输到reducer,映射器可以类似地传递下一个数据块,而无需涉及磁盘

在spark中,据说有内存计算,这与上面的有什么不同?是什么让spark内存计算比map reduce更好?另外,在spark中,如果数据太大,就必须涉及磁盘


请在这里解释许多问题。我将尽力解释每一个问题

映射器何时将其输出存储到本地硬盘

映射器将数据存储在配置的内存中。当内存已满80%(同样可配置)时,它会对内存中存在的数据运行combiner以减少数据。但是,当合并的数据也超过这个内存限制时,它就会溢出到磁盘。这些文件称为溢出文件。在整个操作过程中,会写入多个溢出的文件。在编写溢出文件时,映射器根据缩减器对数据进行排序和分区。在映射操作结束时,需要合并这些溢出文件

一旦数据在映射器中进行处理,我们能否在没有映射器m/c硬盘参与的情况下,直接将数据从映射器移动到reducer

在任何处理过程中,成本最高的操作是机器之间的“数据传输”。map reduce的整个范例是在数据附近进行处理,而不是移动数据。因此,如果按照您建议的方式进行,将会有大量数据移动。与在网络上写入相比,写入本地磁盘的速度更快。这些数据可以通过合并溢出文件来减少。 排序是在溢出文件时完成的,因为合并排序数据更容易(更快)。分区完成了,因为您只需要合并相同的分区(数据将进入相同的缩减器)。在合并过程中,再次运行合并器以减少数据。然后,这些简化的数据被发送到简化器

在spark中,据说有内存计算,这与上面的有什么不同

在spark和map reduce程序中没有区别,您只需读取一些数据集,执行一个map函数和一个reduce函数。它将在磁盘中执行与mapreduce代码相同的读写操作。当您需要在同一数据集上运行几个操作时,就会出现差异。在map reduce中,每次操作它都会从磁盘读取数据,但在spark中,您可以选择使用内存来存储数据,在这种情况下,它只会从磁盘读取一次,以后的操作将在内存中存储的数据上运行,这显然要快得多。
或者,在存在操作链的情况下,第一个操作的输出被输入到第二个操作。在Mapreduce中,第一个操作的输出将写入磁盘,并在第二个操作中从磁盘读取,而在spark中,您可以将第一个操作的输出保存在内存中,以便第二个操作从内存读取,并且速度更快

非常感谢您如此深入的回答。但是,在mapreduce中进行分区是指洗牌吗?他们在这里是一样的吗?读这篇文章你帮了很大的忙,你也能回答这个问题吗…非常感谢