gpt4 book ai didi

apache-spark - 在 apache spark 的从机上生成输出文件

转载 作者:行者123 更新时间:2023-12-04 04:46:06 25 4
gpt4 key购买 nike

我在运行读取文件的 spark java 程序时遇到一些问题,进行一些操作,然后在给定路径生成输出文件。当主机和从机在同一台机器上时,一切正常。即:在独立集群模式下。但是当我在多机多节点集群设置中部署相同的程序时,问题就开始了。这意味着 master 运行在 x.x.x.102 而 slave 运行在 x.x.x.104。主从都共享了他们的 SSH key 并且可以相互访问。

最初 slave 无法读取输入文件,因此我知道我需要在 sc.textFile() 之前调用 sc.addFile()。那解决了问题。但现在我看到输出正在输出路径下的 _temporary 文件夹中的从机上生成。即:/tmp/emi/_temporary/0/task-xxxx/part-00000在本地集群模式下,它工作正常并在 /tmp/emi/part-00000 中生成输出文件。

我开始知道我需要使用 SparkFiles.get()。但我无法理解如何以及在何处使用此方法。

我现在还在用

DataFrame dataobj = ...
dataObj.javaRDD().coalesce(1).saveAsTextFile("file:/tmp/emi");

谁能告诉我如何调用 SparkFiles.get()

简而言之,我如何告诉 slave 在运行驱动程序的机器上创建输出文件?

请帮忙。

非常感谢。

最佳答案

这里没有什么意外的。每个worker分别写入自己的部分数据。使用 file 方案仅意味着从 worker 的角度来看,数据写入本地文件系统中的文件。

关于 SparkFiles 它不适用于这种特殊情况。 SparkFiles 可用于将公共(public)文件分发到不处理结果的工作机器。

如果出于某种原因你想在用于运行驱动程序代码的机器上执行写入,你必须首先将数据获取到驱动程序机器(collect 需要足够的内存来容纳所有数据或 toLocalIterator,它当时收集分区并需要多个作业)和 use standard tools将结果写入本地文件系统。一般来说,虽然写给驱动程序不是一个好习惯,而且大多数时候根本没用。

关于apache-spark - 在 apache spark 的从机上生成输出文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38223723/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com