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

标签 hadoop apache-spark mapreduce mapper reducers

我知道

The output of the Mapper (intermediate data) is stored on the Local file system (not HDFS) of each individual mapper data nodes. This is typically a temporary directory which can be setup in config by the Hadoop administrator. Once the Mapper job completed or the data transferred to the Reducer, these intermediate data is cleaned up and no more accessible.

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

我们能不能不直接移动数据,一旦它在mapper中处理,从mapper到reducer而不需要mapper m/c的硬盘参与。我的意思是,由于数据是在映射器中处理的,而且它在内存中,一旦计算出来,它就会直接传输到缩减器,映射器可以类似地传递下一个数据 block ,而不涉及磁盘。

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

请解释

最佳答案

这里有很多问题。我将尝试解释每一个。

when does a mapper store it's output to its local hard disk?

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

Can we not directly move the data, once it is processed in the mapper, from the mapper to reducer without the involvement of the hard disk of the mapper m/c.

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

In spark, it is said there is in-memory computation, How different is that from above?

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

关于hadoop - 映射器何时将其输出存储到本地硬盘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44346122/

相关文章:

mongodb - 如何在pentaho中访问配置单元表

java - 使用 spark 读取 hbase 表

hadoop - java.io.IOException:WAITINGMini HDFS集群启动时超时

java - Spark Streaming,如何将不同的流合并为一个流

python - 使用 pyspark : [java. lang.IllegalArgumentException 从 S3 服务器读取时出错]

mongodb - 使用 Mongodb 和 mapreduce 创建包含子项的列表

hadoop - Mapreduce 传递命令行参数

hadoop - reducer 中键值对的个数

python - Python 中的分布式单元测试和代码覆盖率

apache-spark - 尝试从 apache ignite context 的 sharedRDD 检索数据