scala - Kubernetes上如何读取spark-submit上传的文件

标签 scala apache-spark kubernetes

我在 Yarn 上运行 Spark 作业。这些天我正在转向 Kubernetes 上的 Spark。

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

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

但我无法在 Kubernetes 上的 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://<nameservice>/path/to/sparkUploads/spark-upload-xxxxxxx/ ,

在 Driver 的 pod 中,我找到了 app.conf/tmp/spark-******/目录,app.jar

但驱动程序无法读取app.conf , Source.fromFile(filename)返回 null ,没有权限问题。

更新 1

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

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


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

更新2

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

但是/opt/spark/work-dir/在 driver pod 上是空的,而在 executor 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 - 解决方法

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

最佳答案

--files 文件应该使用 SparkFiles.get 访问效用:

get(filename: String): String

Get the absolute path of a file added through SparkContext.addFile().

关于scala - Kubernetes上如何读取spark-submit上传的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65353164/

相关文章:

scala - Scala 的哪些特性允许使用 Props[SomeActor] 语法

scala - Spark : java. io.NotSerializableException : org. apache.avro.Schema$RecordSchema

scala - 使用 Scala/Apache Spark 对数据进行分组

apache-spark - 从 JDBC 源迁移数据时如何优化分区?

apache-spark - 如何让 AWS 上的本地 Spark 写入 S3

apache-spark - 用 kubernetes 代替 yarn 激发 Spark

kubernetes - 使用Kaniko从Kubernetes CloudBees Jenkins共享库构建容器时出现问题

scala - 如何在Scala中运行Docker命令?

windows - winutils.exe chmod 命令未设置权限

docker - Kind kubernetes 集群拉取 docker 镜像失败