【问题标题】:Spark behavior on native file system本机文件系统上的 Spark 行为
【发布时间】:2019-06-25 19:42:28
【问题描述】:

我们正在尝试在没有 Hadoop 和 HDFS 之类的分布式存储的情况下在我们的项目中运行 Spark。 Spark 安装在具有 10 个内核和 16GB RAM 的单个节点上,该节点不属于任何集群。假设 Spark 驱动程序需要 2 个内核,其余内核在执行时由执行程序(每个 2 个)消耗。

如果我们将存储在 Spark 本地磁盘中的一个大 CSV 文件(大小为 1 GB)作为 RDD 处理并将其重新分区到 4 个不同的分区,执行程序会并行处理每个分区吗? 如果我们不将 RDD 重新分区为 4 个 diff 分区,执行程序会做什么? 如果不使用 HDFS,我们会失去分布式计算和并行性的力量吗?

【问题讨论】:

    标签: apache-spark hadoop hdfs


    【解决方案1】:

    Spark 将分区的最大大小限制为 2G,因此您应该能够以最少的分区和更快的处理时间来处理整个数据。您可以将 spark.executor.cores 设置为 8 以利用所有资源。

    理想情况下,您应该根据数据的大小设置分区数,最好将分区数设置为核心/执行器的倍数。

    要回答您的问题,在您的情况下将分区数设置为 4 可能会导致每个分区被发送到执行程序。所以是的,每个分区都会被并行处理。

    如果您不重新分区,Spark 将根据数据为您完成并在执行程序之间分配负载。

    Spark 在没有 Hadoop 的情况下也能正常工作。由于您的文件位于本地文件系统而不是 HDFS 上,因此您可能会看到可以忽略不计的性能下降,但对于大小为 1GB 的文件,这真的无关紧要。

    【讨论】:

    • 感谢 Suraj 的回答。通常,HDFS 将文件拆分为多个分区,并由执行程序并行处理。由于我不使用 HDFS 并自己重新分区数据,我仍然可以在没有 Hadoop Cluster 的情况下实现并行处理,因为分区是由 Spark 分配给执行程序的?因此,仅当处理非常大的文件时才需要 HDFS,但对于大小
    • 是的,你的理解是正确的。默认情况下,会为每个 HDFS 分区创建一个 RDD 分区。通过自己对数据进行分区,您仍然可以实现并行处理。但是建议在生产环境中使用 Hadoop 来满足您的文件存储需求,无论您的负载如何,因为 HDFS + Spark 在大多数用例中都非常有效,并且您可以避免生产中可能出现的大多数问题。此外,使用 YARN 在分布式模式下运行 Spark 将使您的生活更轻松。抱歉回复晚了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-29
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多