Я создаю искровое приложение с maven (с плагином с тенями) и просматриваю его на узле данных для выполнения с помощью кластера spark-submit --deploy (начиная с запуска прямо из системы сборки с клиентом --deploy-mode не работает из-за асимметричной сети, которая не под моим контролем).spark-submit classNotFoundException
Вот моя команда запуска
искровым отправить --class испытания --master пряжи --deploy-кластерном режиме --supervise --verbose jarName.jar HDFS:///somePath/Test.txt HDFS: ///somePath/Test.out
работа быстро выходит из строя с ClassNotFoundException для теста $ 1; один из анонимных классов Java создает из моего основного класса
6/03/18 12:59:41 WARN scheduler.TaskSetManager: Затерянные задачи 0.0 в стадии 0,0 (TID 0, dataNode3): java.lang. ClassNotFoundException: Test $ 1
Я видел, что эта ошибка упоминается много раз (google), и большинство рекомендаций сводятся к вызову conf.setJars (jarPaths) или тому подобное.
Я действительно не понимаю, почему это необходимо, когда отсутствующий класс определен (я проверил), доступный в jarName.jar, почему указание этого во время компиляции предпочтительнее делать это во время выполнения с помощью -jar как аргумент spark-submit, и в любом случае, какой путь я должен предоставить для jar. Я копировал его в свой домашний каталог на datanode из target/jarName.jar в системе сборки, но кажется, что исправить - отправить его в hdfs где-то, что трудно сгладить в жестко запрограммированное имя пути во время компиляции или время запуска.
И, самое главное, почему бы не исправить-отправить обработку этого автоматически на основе аргумента someJar.jar, а если нет, что мне делать, чтобы исправить это?
Просто попытался с помощью --deployMode клиента на жаворонка, и это работал! Я действительно не понимаю этого. – Bradjcox
Я считаю, что Спарк не может найти вашу банку. Ваша баня присутствует в каждом узле? Вы пытались указать абсолютный путь к банке? –