HadoopPartition的位置

时间:2015-07-03 17:56:38

标签: apache-spark load-balancing input-split

我在csv文件中有一个数据集,它占用HDFS中的两个块,并在两个节点A和B上复制。每个节点都有一个数据集副本。

当Spark开始处理数据时,我已经看到Spark如何将数据集作为输入加载。它将整个数据集加载到一个节点上的内存中,并在其上执行大部分任务,或者将数据集加载到两个节点中,并将任务溢出到两个节点上(基于我在历史服务器上观察到的内容)。对于这两种情况,都有足够的容量将整个数据集保存在内存中。

我多次重复相同的实验,Spark似乎在这两种方式之间交替。据推测,Spark会像MapReduce作业一样继承输入拆分位置。根据我的理解,MapReduce应该能够利用两个节点。我不明白为什么Spark或MapReduce会在这两种情况之间交替。

当只使用一个节点进行处理时,性能会更差。

1 个答案:

答案 0 :(得分:0)

当您在Spark中加载数据时,您可以指定最小分割数量,这将迫使Spark在多台计算机上加载数据(使用textFile api,您将minPartitions=2添加到您的呼叫中。