我正在尝试理解Apache spark中的懒惰评估。 我的理解是:
让我们说硬盘中有文本文件。
步骤:
1)首先,我将创建RDD1,这只是一个数据定义。(现在没有数据加载到内存中)
2)我在RDD1上应用了一些转换逻辑并创建了RDD2,仍然在这里RDD2是数据定义(仍然没有数据加载到内存中)
3)然后我在RDD2上应用过滤器并创建RDD3(仍然没有数据加载到内存中,RDD3也是一个数据定义)
4)我执行一个动作,这样我就可以在文本文件中获得RDD3输出。因此,当我执行此操作时,我希望从内存中输出内容,然后将数据加载到内存中的spark会创建RDD1,2和3并生成输出。
因此,火花中RDD的懒惰只是继续制定路线图(RDD),直到他们没有获得制作或生产它的批准。
我的理解是否正确到此......?
我的第二个问题是,它说它的(懒惰评估)火花比Hadoop强大的原因之一,我可以知道如何因为我不太了解Hadoop?在这种情况下,hadoop会发生什么?
谢谢:)
答案 0 :(得分:1)
是的,你的理解很好。动作图(DAG)是通过转换构建的,它们在动作时立即计算。这就是懒惰执行的含义。
Hadoop仅提供文件系统(HDFS),资源管理器(YARN)以及允许您运行MapReduce的库。鉴于足够的内存,Spark只关注自身比后者更优化
Apache Pig是Hadoop生态系统中的另一个框架,允许进行惰性评估,但与其支持的语言中Spark的广泛可编程性相比,它具有自己的脚本语言。 Pig支持运行MapReduce,Tez或Spark动作进行计算。 Spark只运行并优化自己的代码。
实际的MapReduce代码中发生的情况是,您需要在操作中将每个操作阶段写入磁盘或内存以完成相对较大的任务
Spark并不代替" Hadoop"这是一种恭维。