为什么坚持RDD到DISK不能提高性能?

时间:2017-03-09 01:44:03

标签: apache-spark

我有以下DAG

  1. 生成包含2亿条记录的RDD
  2. 将RDD保留到磁盘(StorageLevel.DISK_ONLY())
  3. 过滤RDD中的每个偶数记录(50%的记录)
  4. 存储到磁盘(saveAsNewAPIHadoopDataset
  5. 过滤RDD中的每个奇数记录(50%的记录)
  6. 存储到磁盘(saveAsNewAPIHadoopDataset
  7. 磁盘上RDD的大小为 100GB

    完成第一个操作所需的总时间(步骤4) 10分钟

    我原本以为对于第二个动作(步骤6),RDD将从磁盘过滤等加载。花费的时间要短得多。

    但事实上它需要相同的时间 10分钟

    从磁盘加载100GB rdd真的花费与生成rdd相同的时间吗?

    有什么可以解释这个?我是否遇到某种IO瓶颈?如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

作业链:您希望使用一个作业运行多个作业,具体取决于之前的输出。

MapReduce pardigm:1MR job =>将输出保存在HDFS =>从HDFS 2读取MR作业=> .......

Spark =>尝试在内存中保存尽可能多的数据,否则我们会陷入MapReduce范式的低效率。

现在回答你的问题:

  
      
  1. Spark会在保存磁盘上的数据时进行一些优化,但与内存中的数据相比没有。
  2.   
  3. Spark生成一系列MapTask和Reduce Task。我们应尽量在内存中保存尽可能多的数据,最好的情况下尝试完成   只有一项MR任务的任务。
  4.   

如果深思熟虑,请按照

http://bytepadding.com/big-data/spark/understanding-spark-through-map-reduce/