Apache Spark создает исключение java.io.FileNotFoundException - PullRequest
1 голос
/ 30 октября 2019

Я пытаюсь запустить spark-submit с машины, которая запускает мастер-искры, в то время как у меня есть работник на другой машине:

  • Машина A: мастер-мастер
  • МашинаB: ведомый искры

Но всегда выдается исключение: java.io.FileNotFoundException

19/10/30 18:19:00 WARN TaskSetManager: Lost task 1.0 in stage 0.0 (TID 1, 130.229.129.193, executor 0): java.io.FileNotFoundException: File file:/private/var/folders/mf/hvtcpzmx6s39n7xc9182fxvc0000gp/T/spark-2237692a-95c1-4355-90fe-ed4524040879/userFiles-c1150981-0e3b-4b6f-a951-5783c1d14db8/data.csv does not exist

Исключение не выдается, когда я запускаю мастера и работника на одной машине,Я понимаю, что проблема связана с расположением файла, но я использую комбинацию :

  • sparkContext.addFile (fileName)
  • и SparkFile.get(fileName)

Итак, добавленный файл должен быть загружен с этим заданием Spark на каждом узле №?

Я не хочу пробовать альтернативное решение (S3, HDFS,...), я просто хочу выяснить, что я делаю не так. Спасибо.

Ява-код, который я использую:

public class Main {
    public static void main(String[] args) throws IOException {
        String fileName = "data.csv";

        //Count words and lines
        countWordsAndLines(fileName);
    }

    public  static void countWordsAndLines(String fileName) throws IOException {

        // SparkConf object for describing the application configuration.
        SparkConf sparkConf = new SparkConf()
                .setAppName("Count file words and lines");
                //.setMaster("local[*]");  // Delete this line when submitting to a cluster

        // A SparkContext object is the main entry point for Spark.
        JavaSparkContext sparkContext = new JavaSparkContext(sparkConf);

        //Add a file to be downloaded with this Spark job on every node.
        sparkContext.addFile("https://sda6.s3.eu-central-1.amazonaws.com/test/" + fileName);

        // Get the absolute path of a file added through SparkContext.addFile().
        // SparkContext is used to read a text file in memory as a JavaRDD object.
        JavaRDD<String> csvFile = sparkContext.textFile("file://" + SparkFiles.get(fileName));

        // Count no of lines
        System.out.println("Number of lines in file = " + csvFile.count());

        sparkContext.stop();
    }
}

Чтобы запустить мое приложение в кластере, я делаю следующее:

  1. Создайте новыйфайл spark-env.sh, внутри папки apache spark conf, где я установил SPARK_MASTER_HOST='machine-A-IP'. Я делаю это на машинах A и B.

(в командной строке):

Мастер запуска (станок A)
/usr/local/Cellar/apache-spark/2.4.4/libexec/sbin/start-master.sh
Запуск ведомого (машина B) (и я вижу, как рабочий появляется на главной странице мастера в машине A)
/usr/local/Cellar/apache-spark/2.4.4/libexec/sbin/start-slave.sh spark://machine-A-IP:7077
Запустить spark-submit (станок A)
/usr/local/bin/spark-submit   --master spark://machine-A-IP:7077   --class Main   build/libs/spark-exercise-1.0-SNAPSHOT.jar
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...