我们正在尝试在没有Hadoop且没有像HDFS这样的分布式存储的项目中运行Spark。 Spark安装在具有10个核心和16GB RAM的单个节点上,并且该节点不属于任何群集。假设Spark驱动程序使用2个内核,而其余的则在执行时由执行程序使用(每个2个)。
如果我们以RDD处理存储在Spark本地磁盘中的大CSV文件(大小为1 GB)并将其重新分区为4个不同的分区,执行者是否会并行处理每个分区? 如果我们不将RDD重新分区为4个diff分区,执行者会怎么做? 如果不使用HDFS,我们是否会失去分布式计算和并行性的力量?
答案 0 :(得分:1)
Spark将分区的最大大小限制为2G,因此您应该能够以最少的分区和更快的处理时间来处理整个数据。您可以将spark.executor.cores设置为8,以利用所有资源。
理想情况下,应根据数据大小设置分区数,最好将分区数设置为核心/执行程序的倍数。
要回答您的问题,在您的情况下将分区数设置为4可能会导致将每个分区发送给执行程序。所以,是的,每个分区将被并行处理。
如果您不进行分区,那么Spark将根据数据为您完成分区,并在执行程序之间分配负载。
Spark在没有Hadoop的情况下也可以正常工作。由于文件位于本地文件系统而不是HDFS上,因此性能下降可能会忽略不计。但是对于1GB的文件来说,这确实无关紧要。