Spark工作节点看不到添加的文件

dw1jzc5e  于 2023-10-23  发布在  Apache
关注(0)|答案(1)|浏览(159)

我在本地机器上运行Java Spark应用程序时遇到问题。我正在运行Spark master和1个spark worker节点作为docker镜像,配置如下:

version: '2.2'

services:
  spark:
    image: docker.io/bitnami/spark:latest
    environment:
      - SPARK_MODE=master
      - SPARK_RPC_AUTHENTICATION_ENABLED=no
      - SPARK_RPC_ENCRYPTION_ENABLED=no
      - SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no
      - SPARK_SSL_ENABLED=no
      - SPARK_USER=spark
    ports:
      - '8010:8080'
      - '7077:7077'
    network_mode: bridge
  spark-worker:
    image: docker.io/bitnami/spark:latest
    environment:
      - SPARK_MODE=worker
      - SPARK_MASTER_URL=spark://172.17.0.2:7077
      - SPARK_WORKER_MEMORY=8G
      - SPARK_WORKER_CORES=4
      - SPARK_RPC_AUTHENTICATION_ENABLED=no
      - SPARK_RPC_ENCRYPTION_ENABLED=no
      - SPARK_LOCAL_STORAGE_ENCRYPTION_ENABLED=no
      - SPARK_SSL_ENABLED=no
      - SPARK_USER=spark
    ports:
      - '8081:8081'
      - '65040:65040'
    network_mode: bridge

我的本地java应用程序是驱动程序本身,配置如下:

SparkConf conf =
                new SparkConf()
                        .setAppName("Simple Application")
                        .set("spark.driver.port", "65040")
                        .set("spark.driver.host", "192.168.18.15")
                        .set("spark.files.overwrite", "true")
                        .setMaster("spark://localhost:7077");

        sparkContext = new SparkContext(conf);
        String path = getClass().getResource("/addresses.csv").getPath();

        sparkContext.addFile(path);
        sparkContext.addedFiles();
        spark = new SparkSession(sparkContext);
        
        Dataset<Row> csv = spark.read().csv(SparkFiles.get("addresses.csv"));

主/工人和本地应用程序通信没有问题,但有问题与访问addresses.csv文件的工人,他们试图访问它使用我的本地机器路径,如工人日志below:23/09/19 08:44:09 ERROR Executor: Exception in task 0.3 in stage 0.0 (TID 3) org.apache.spark.SparkFileNotFoundException: File file:/C:/Users/patry/AppData/Local/Temp/spark-fc24a898-45ad-47fe-bf10-41c109a8c46c/userFiles-ab6c8b5c-fc69-4f75-9627-7639860df8bf/addresses.csv does not exist任何想法我如何可以上传和处理我的文件在工人节点,而不使用HDFS?
我试过使用不同的路径,传递文件到应用程序的方式,但没有成功

lc8prwob

lc8prwob1#

在提交Spark应用程序时,您可以包含要分发的文件。这些文件被提交并放置在每个worker的工作目录中。显然,这不是一个很好的大文件分发方法;只有小文件才应该以这种方式分发,这些文件不适合存储在HDFS或等效存储上。
我无法在官方文档中找到spark-submit可用的参数的完整列表,但我找到了来自CDP docs的链接。

spark-submit ./bin/spark-submit \
  --class <main-class> \
  --master <master-url> \
  --deploy-mode <deploy-mode> \
  --conf <key>=<value> \
  ... # other options, here you can place --files <filepath/name>
  <application-jar> \
  [application-arguments]

相关问题