【发布时间】:2016-02-19 00:41:44
【问题描述】:
我是 Spark 的新手。需要帮助了解 spark 的工作原理。
假设README.md 存储在 3 个节点的 HDFS 128 块中,我正在使用 spark shell 来处理它。
val textFile = sc.textFile("README.md")
val linesWithSpark = textFile.filter(line => line.contains("Spark"))
linesWithSpark.first()
在上述情况下,执行将由第 3 行触发。
Spark 会在 HDFS 节点的 RAM 中加载完成 3 次 README.md 拆分,然后过滤 linesWithSpark 并在内存中保留片刻。并从linesWithSpark(从第一次拆分)发送第一行?
或者它只会从 HDFS 节点的磁盘的 Split1 中提取带有“Spark”的第一行并将其发送给驱动程序。
如果我将第 2 行更改为
,处理会发生什么变化val linesWithSpark = textFile.filter(line => line.contains("Spark")).cache()
【问题讨论】:
-
不是一个实际的答案,而是一些评论。您不应该关心用户级别的步骤的精确执行顺序,这就是 Spark 的用途。不过,您可以在 spark 的 Web UI 中检查执行 DAG。另一点是
sc.textFile("README.md")将在路径/工作目录而不是 HDFS 上查找“README.md”文件,您必须明确地将 HDFS URI 提供给函数/方法。
标签: scala apache-spark