gpt4 book ai didi

scala - Spark(Scala)从驱动程序写入(和读取)本地文件系统

转载 作者:可可西里 更新时间:2023-11-01 14:46:42 24 4
gpt4 key购买 nike

第一个问题:我有一个带有 hadoop 的 2 节点虚拟集群。我有一个运行 Spark 作业的 jar 。此 jar 接受作为 cli 参数:commands.txt 文件的路径,该文件告诉 jar 运行哪些命令。

我使用 spark-submit 运行作业,我注意到我的从节点没有运行,因为它找不到主节点本地的 commands.txt 文件。

这是我用来运行它的命令:

./spark-1.6.1-bin-hadoop2.6/bin/spark-submit --class 

univ.bigdata.course.MainRunner --master yarn\
--deploy-mode cluster --executor-memory 1g \
--num-executors 4 \
final-project-1.0-SNAPSHOT.jar commands commands.txt

我是否需要将 commands.txt 上传到 hdfs 并提供 hdfs 路径,如下所示? :

hdfs://master:9000/user/vagrant/commands.txt

第二个问题:我如何在 cwd 中写入驱动程序机器上的文件?我使用普通的 scala 文件编写器将输出写入 queries_out.txt,并且在使用 spark submit 时工作正常

 -master local[]

但是,在运行时

 -master yarn

我找不到文件,没有抛出异常,但我就是找不到文件。它不存在,就好像它从未被写过一样。有没有办法将结果写入本地驱动程序机器上的文件?或者我应该只将结果写入 HDFS 吗?

谢谢。

最佳答案

问题 1:是的,将其上传到 hdfs 或任何网络可访问的文件系统是您解决问题的方法。

问题2:

这有点棘手。假设您的结果在一个 RDD 中,您可以调用 collect(),这将聚合驱动程序进程中的所有数据。然后,您手中就有了一个标准集合,您可以将其简单地写入磁盘。请注意,您应该为您的驱动程序进程提供足够的内存,以便能够在内存中保存所有 结果,不要忘记同时增加最大结果大小。参数是:

--驱动内存16G--conf "spark.driver.maxResultSize=15g"

这在通信复杂度和内存(在结果 RDD 的大小方面)都具有非常差的缩放行为。这是最简单的方法,非常适合玩具项目或数据集总是很小的时候。在所有其他情况下,它肯定会在某个时候爆炸。

正如您可能提到的,更好的方法是使用内置的“saveAs”方法写入,即 hdfs(或其他存储格式)。您可以查看相关文档:http://spark.apache.org/docs/latest/programming-guide.html#actions

请注意,如果您只想持久化 RDD,因为您要在多个计算中重用它(例如缓存,但不是将其保存在内存中,而是将其保存在磁盘中),在 RDD 上还有一个持久化方法。

关于scala - Spark(Scala)从驱动程序写入(和读取)本地文件系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38122039/

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