单个 Spark 任务曾经是多线程的吗?
Is a single Spark task ever multithreaded?
我想弄清楚单个任务是否曾经 运行 使用执行程序上的所有可用内核?也就是说,如果一个阶段只包含一个任务,这是否意味着该任务是执行程序上的单线程单核处理,或者该任务是否可以多线程方式使用所有可用的核"under the covers"?
我在 Azure Databricks 中 运行 在一名工作人员(因此一名执行者)上执行 ETL 作业,并且在管道中的某一点,一个作业创建了一个阶段,运行 是一个任务处理整个数据集。该任务需要几分钟才能完成。
我想了解单个任务是否可以并行使用所有可用的执行器核心 运行ning 功能?在这种情况下,我使用 from_json 函数反序列化 json 消息并将它们保存为 parquet 文件。我担心这是在单个任务中进行的单线程进程。
spark
.read
.table("input")
.withColumn("Payload", from_json($"Payload", schema))
.write
.mode(SaveMode.Append)
.saveAsTable("output")
如果您查看 Spark UI
并且只看到一个任务,这绝对是单核单线程。
例如,如果您进行连接然后进行转换,默认情况下您会看到类似 200
的任务。这意味着 200
"thread" 正在并行计算。
如果你想查看执行器的数量,你可以点击stages
选项卡,点击任何一个阶段,你会看到使用了多少个执行器。
我想弄清楚单个任务是否曾经 运行 使用执行程序上的所有可用内核?也就是说,如果一个阶段只包含一个任务,这是否意味着该任务是执行程序上的单线程单核处理,或者该任务是否可以多线程方式使用所有可用的核"under the covers"?
我在 Azure Databricks 中 运行 在一名工作人员(因此一名执行者)上执行 ETL 作业,并且在管道中的某一点,一个作业创建了一个阶段,运行 是一个任务处理整个数据集。该任务需要几分钟才能完成。
我想了解单个任务是否可以并行使用所有可用的执行器核心 运行ning 功能?在这种情况下,我使用 from_json 函数反序列化 json 消息并将它们保存为 parquet 文件。我担心这是在单个任务中进行的单线程进程。
spark
.read
.table("input")
.withColumn("Payload", from_json($"Payload", schema))
.write
.mode(SaveMode.Append)
.saveAsTable("output")
如果您查看 Spark UI
并且只看到一个任务,这绝对是单核单线程。
例如,如果您进行连接然后进行转换,默认情况下您会看到类似 200
的任务。这意味着 200
"thread" 正在并行计算。
如果你想查看执行器的数量,你可以点击stages
选项卡,点击任何一个阶段,你会看到使用了多少个执行器。