【问题标题】:When does an action not run on the driver in Apache Spark?什么时候没有在 Apache Spark 中的驱动程序上运行操作?
【发布时间】:2015-08-27 22:15:06
【问题描述】:

我刚开始使用 Spark,并且在任务的概念上苦苦挣扎。

谁能帮我理解什么时候没有在驱动程序中运行一个动作(比如reduce)。

来自 spark 教程,

"使用函数 func 聚合数据集的元素( 接受两个参数并返回一个)。函数应该是 交换和结合,以便它可以正确计算 平行线。 "

我目前正在试验一个应用程序,它读取“n”个文件上的目录并计算字数。

在 Web UI 中,任务数等于文件数。并且所有reduce函数都发生在驱动节点上。

你能告诉我reduce函数不会在驱动程序上执行的场景吗?任务总是包含“转换+动作”还是只包含“转换”

【问题讨论】:

  • 如何提交要执行的作业?
  • 它是一个集群设置,我正在通过 master 提交作业。
  • 不,从字面上看,您是如何提交的?你的 spark-submit 命令是什么
  • /opt/spark/spark-1.3.1/bin/spark-submit --class sampleApp.CoreNLP --executor-memory 17G --master spark://archlab1:7077 --deploy-模式集群 hdfs://10.18.107.136:9000/sampleApp_bp1/target/sampleApp-0.0.1-SNAPSHOT.jar
  • 谢谢,通常 OP 不设置主人。

标签: mapreduce apache-spark bigdata


【解决方案1】:

所有操作都在集群上执行,并且操作的结果可能最终在驱动程序上(取决于操作)。

一般来说,您围绕业务逻辑编写的 spark 代码并不是实际运行的程序——而是 spark 使用它来创建一个计划,该计划将在集群中执行您的代码。该计划创建了一个可以在分区上执行的所有操作的任务,而无需重新整理数据。每次 spark 需要以不同方式排列的数据时(例如排序后),它会创建一个新任务,并在第一个任务和后一个任务之间进行 shuffle

【讨论】:

    【解决方案2】:

    尽管我可能遗漏了部分问题,但我会对此进行尝试。任务确实总是转换和动作。转换是惰性的,不会提交任何东西,因此需要采取行动。您可以随时在您的 RDD 上拨打.toDebugString 以查看每个作业拆分的位置;每一级缩进都是一个新的阶段。我认为显示在驱动程序上的 reduce 函数有点用词不当,因为它将首先并行运行,然后合并结果。所以,我希望该任务确实尽可能在工人身上运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-11
      • 1970-01-01
      • 2016-04-28
      • 1970-01-01
      • 1970-01-01
      • 2021-05-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多