一个Spark任务是否曾经是多线程的?

时间:2019-07-19 15:25:52

标签: apache-spark databricks

我试图确定是否使用执行程序上的所有可用内核运行了单个任务?也就是说,如果一个阶段仅包含一个任务,这是否意味着该任务是执行程序上的单线程单核处理,还是该任务可以“在幕后”以多线程方式使用所有可用的内核?

我在Azure Databricks上以一名工作人员(因此一名执行者)运行ETL作业,并且在管道中的某个点,一个作业创建了一个阶段,该阶段运行一个任务来处理整个数据集。该任务需要几分钟才能完成。

我想了解一个任务是否可以使用所有并行运行功能的可用执行程序内核?在这种情况下,我使用from_json函数反序列化JSON消息并将其另存为实木复合地板文件。我担心这是在单个任务中进行的单线程进程。

spark
    .read
    .table("input")
    .withColumn("Payload", from_json($"Payload", schema))
    .write
    .mode(SaveMode.Append)
    .saveAsTable("output")

1 个答案:

答案 0 :(得分:1)

如果您正在查看Spark UI并且仅看到一项任务,那么肯定是单核和单线程。

例如,如果先进行联接然后进行转换,则默认情况下会看到类似200任务的内容。这意味着200“线程”是并行计算的。

如果要检查执行者的数量,可以单击stages标签,单击任何阶段,您将看到使用了多少个执行者。