gpt4 book ai didi

apache-spark - Spark 在哪里查找文本文件?

转载 作者:行者123 更新时间:2023-12-03 07:20:57 25 4
gpt4 key购买 nike

我认为加载文本文件只能从工作人员/集群内完成(您只需要确保所有工作人员都可以访问相同的路径,或者通过在所有节点上提供该文本文件,或者通过使用一些共享的文件夹映射到同一路径)

例如spark-submit/spark-shell 可以从任何地方启动,并连接到 Spark Master 以及启动 spark-submit 的机器/spark-shell(这也是我们的驱动程序运行的地方,除非您处于“集群”部署模式)与集群无关。因此,任何数据加载都应该仅从工作人员完成,而不是在驱动程序机器上完成,对吧?例如sc.textFile("file:///somePath") 不应该导致 Spark 在 driver 机器上查找文件(同样,驱动程序位于集群外部,例如在“客户端”部署模式/独立模式下),对吗?

嗯,我也是这么想的...

我们的 Actor 阵容

  • 机器 A:驱动程序运行的地方
  • 机器 B:spark master 和其中一个工作线程都在其中运行

第一幕 - 希望

当我从机器 B 启动 Spark-shell 到 B 上的 Spark Master 时,我得到以下信息:

scala> sc.master
res3: String = spark://machinB:7077

scala> sc.textFile("/tmp/data/myfile.csv").count()
res4: Long = 976

第二幕 - 冲突

但是当我从机器 A 启动 Spark-shell 并指向 B 上的 Spark Master 时,我得到:

scala> sc.master
res2: String = spark://machineB:7077

scala> sc.textFile("/tmp/data/myfile.csv").count()
org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: file:/tmp/data/myfile.csv

事实上/tmp/data/myfile.csv在机器A上不存在,但是机器A不在集群上,它只是驱动程序运行的地方

第三幕 - 惊奇

更奇怪的是,如果我让这个文件在机器 A 上可用,它就不会再抛出这个错误了。 (相反,它创建了一个作业,但没有任务,并且只是由于超时而失败,这是另一个值得单独问题的问题)

Spark 的行为方式中是否存在我所遗漏的内容?我认为 Spark shell 连接到远程时与您正在运行的机器无关。那么为什么当我将该文件放到机器 A 上时错误就会停止呢?这意味着 sc.textFile 的位置包括 spark-shellspark-submit 启动的位置(在我的情况下也是驱动程序运行的位置)?这对我来说毫无意义。但同样,我乐于学习新事物。

尾声

tl;dr - sc.textFile("file:/somePath") 从机器 A 上的驱动程序运行到机器 B、C、D 上的集群...(驱动程序不是集群的一部分)

它似乎也在驱动程序上寻找路径file:/somePath,这是真的吗(或者只是我)?这是已知的吗?是这样设计的吗?

我有一种感觉,这是我工作场所网络特有的一些奇怪的网络/VPN 拓扑问题,但这仍然是发生在我身上的情况,我完全困惑这是否只是我的问题还是已知的行为。 (或者我只是不明白 Spark 是如何工作的,这始终是一个选项)

最佳答案

因此,答案的真正简短版本是,如果您引用“file://...”,则应该可以在集群中的所有节点(包括 dirver 程序)上访问它。有时,一些工作会发生在 worker 身上。一般来说,解决这个问题的方法就是不使用本地文件,而是使用 S3、HDFS 或其他网络文件系统之类的东西。有 sc.addFile 方法,可用于将文件从驱动程序分发到所有其他节点(然后使用 SparkFiles.get 来解析下载)位置)。

关于apache-spark - Spark 在哪里查找文本文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32464894/

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