Lea*_*ner 3 scala apache-spark
我在火花执行过程中完全混乱。我参考了可能的文章和教程,没有人详细讨论。我可能错误地理解了火花。请纠正我。
我的 40GB 文件分布在 10 个节点集群的 4 个节点(每个节点 10GB)上。当我spark.read.textFile("test.txt")在我的代码中说,它是否会将所有 4 个节点的数据(40GB)加载到驱动程序(主节点)中?或者这个RDD将分别加载到所有4个节点中。那样的话,每个节点RDD应该保存10GB的物理数据,是吗?并且整个 RDD 保存 10GB 数据并为每个分区执行任务,即在 spark 2.0 中为 128MB。最后将输出混洗到驱动程序(主节点)
而且我在某处读到“ numbers of cores in Cluster = no. of partitions”是不是意味着,spark会将一个节点的分区移动到所有10个节点进行处理?
Spark 不必一次将整个文件读入内存。那个 40GB 的文件被分成许多 128MB(或任何你的分区大小)的分区。每个分区都是一个处理任务。每个核心一次只能处理一个任务,优先处理数据分区存储在同一节点上的任务。只需要读取正在处理的 128MB 分区,不读取文件的其余部分。一旦任务完成(并产生一些输出),那么下一个任务 cab 的 128MB 就会被读入,并且可以从内存中释放第一个任务读入的数据。因此,只需将一次处理的少量数据加载到内存中,而不是一次加载整个文件。
也严格来说spark.read.textFile("test.txt")什么都不做。它不读取数据,也不做任何处理。它创建了一个 RDD,但一个 RDD 不包含任何数据。而 RDD 只是一个执行计划。 spark.read.textFile("test.txt")声明文件 test.txt 将被读取并用作数据源,如果并且当 RDD 被评估但它自己不做任何事情时。