【问题标题】:Spark (Scala) Writing (and reading) to local file system from driverSpark(Scala)从驱动程序写入(和读取)本地文件系统
【发布时间】:2016-11-02 11:40:07
【问题描述】:

第一个问题: 我有一个带有 hadoop 的 2 节点虚拟集群。 我有一个运行火花工作的罐子。 此 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 文件编写器将输出写入 query_out.txt,并且在使用 spark 提交时效果很好

 -master local[]

但是,在运行时

 -master yarn

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

谢谢。

【问题讨论】:

    标签: scala hadoop apache-spark hdfs


    【解决方案1】:

    问题 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 上还有一个 persist 方法。

    【讨论】:

    • 当我需要将内容写入文件时,我使用了 collect \ take。它在本地 [*] 中运行时可以工作,但是当我在集群上运行它时,它根本不会创建任何文件。
    • 您的驱动程序也在集群上吗?请注意,驱动程序不一定是主人。驱动程序是您运行 spark-submit 或 spark-shell 的计算机。
    • 是的,我登录到 master 并从那里运行 spark-submit。
    【解决方案2】:

    解决方案非常简单,我将 --deploy-mode cluster 更改为 --deploy-mode client,然后文件写入在我运行驱动程序的机器上正确完成。

    【讨论】:

      【解决方案3】:

      问题 1 的答案: 提交带有 --files 标记和本地文件路径的 spark 作业会将文件从驱动程序节点下载到所有工作程序节点的 cwd,因此只需使用其名称即可访问。

      【讨论】:

        猜你喜欢
        • 2018-02-07
        • 2018-01-15
        • 2021-09-19
        • 2012-05-30
        • 1970-01-01
        • 2017-03-05
        • 2017-04-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多