【问题标题】:How to read files uploaded by spark-submit on Kubernetes如何在 Kubernetes 上读取 spark-submit 上传的文件
【发布时间】:2021-10-01 17:53:57
【问题描述】:

我在 Yarn 上运行 Spark 作业。这些天我正在迁移到 Kubernetes 上的 Spark。

在 Kubernetes 上我遇到了一个问题:通过 --files 上传的文件无法被 Spark 驱动程序读取。

在 Yarn 上,如许多答案中所述,我可以使用 Source.fromFile(filename) 读取这些文件。

但我无法在 Kubernetes 上的 Spark 中读取文件。

  • Spark 版本:3.0.1
  • Scala 版本:2.12.6
  • 部署模式:集群
  • 提交命令
    $ spark-submit --class <className> \
          --name=<jobName> \
          --master=k8s://https://api-hostname:6443 \
          ...
          --deploy-mode=cluster \
          --files app.conf \
          --conf spark.kubernetes.file.upload.path=hdfs://<nameservice>/path/to/sparkUploads/ \
          app.jar
    

执行上述命令后,app.conf被上传到hdfs://&lt;nameservice&gt;/path/to/sparkUploads/spark-upload-xxxxxxx/

在 Driver 的 pod 中,我在 /tmp/spark-******/ 目录中找到了 app.confapp.jar 也是如此。

但是Driver无法读取app.confSource.fromFile(filename)返回null,没有权限问题。

更新 1

在 Spark Web UI->“环境”选项卡中,spark://&lt;pod-name&gt;-svc.ni.svc:7078/files/app.conf 在“类路径条目”菜单中。这是否意味着app.conf 在类路径中可用?

另一方面,在 Spark on Yarn 中,user.dir 属性包含在 System 类路径中。


我找到SPARK-31726: Make spark.files available in driver with cluster deploy mode on kubernetes

更新 2

我发现驱动程序 pod 的 /opt/spark/work-dir/ 目录包含在类路径中。

但是 /opt/spark/work-dir/ 在驱动程序 pod 上是空的,而在执行程序 pod 上它包含 app.confapp.jar

我认为这是问题所在,SPARK-31726 对此进行了描述。

更新 3

在阅读了 Jacek 的回答后,我测试了org.apache.spark.SparkFiles.getRootDirectory()

它返回/var/data/spark-357eb33e-1c17-4ad4-b1e8-6f878b1d8253/spark-e07d7e84-0fa7-410e-b0da-7219c412afa3/userFiles-59084588-f7f6-4ba2-a3a3-9997a780af24

更新 4 - 解决方法

  • 首先,我制作 ConfigMap 来保存我想读取驱动程序/执行程序的文件
  • 接下来,将 ConfigMap 挂载到驱动程序/执行程序上。要挂载 ConfigMap,请使用 Pod TemplateSpark Operator

【问题讨论】:

    标签: scala apache-spark kubernetes


    【解决方案1】:

    应使用SparkFiles.get 实用程序访问--files 文件:

    get(文件名:字符串):字符串

    获取通过SparkContext.addFile()添加的文件的绝对路径。

    【讨论】:

      猜你喜欢
      • 2021-08-15
      • 2017-05-20
      • 2020-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多