Давайте посмотрим на лес сначала, прежде чем смотреть на деревья.
Здесь есть много информативных ответов с большими подробностями, я не буду повторять ни одного из них. Ключ к программированию в JavaScript имеет сначала правильную ментальную модель общего исполнения.
Хорошие новости заключается в том, что, если вы хорошо понимаете этот момент, вам никогда не придется беспокоиться о гоночных условиях. Прежде всего вы должны понимать, как вы хотите упорядочить свой код как по существу ответ на разные дискретные события, и как вы хотите объединить их в логическую последовательность. Вы можете использовать обещания или новые асинхронные / ожидающие более высокие уровни в качестве инструментов для этой цели, или вы можете откатывать свои собственные.
Но вы не должны использовать какие-либо тактические инструменты для решения проблемы, пока вам не понравится актуальная проблемная область. Нарисуйте карту этих зависимостей, чтобы знать, что нужно запускать, когда. Попытка ad-hoc подхода ко всем этим обратным вызовам просто не поможет вам.
Каждый узел должен содержать целый файл. В этом случае локальная файловая система будет логически неотличима от HDFS в отношении этого файла.
Из страницы часто задаваемых вопросов Spark. Если вы не используете Hadoop / HDFS, «если вы запускаете в кластере, вам понадобится некоторая форма общей файловой системы (например, NFS, установленная на одном пути на каждом узле). Если у вас есть этот тип файловой системы, вы можете просто развернуть Spark в автономном режиме. "
Добавьте «файл: ///» uri вместо «file: //». Это решило проблему для меня.
Spark-1.6.1
Java-1.7.0_99
Узлы в кластере-3 (HDP).
Case 1:
Running in local mode local[n]
file:///..
и file:/..
считывает файл из локальной системы
Case 2:
`--master yarn-cluster`
Input path does not exist: for file:/ and file://
И для file://
java.lang.IllegalArgumentException :Wrong FS: file://.. expected: file:///
Правильный способ использования - с тремя косой чертой. Два для синтаксиса (например, http: //) и один для точки монтирования файловой системы Linux, например sc.textFile (файл: ///home/worker/data/my_file.txt). Если вы используете локальный режим, достаточно только файла. В случае автономного кластера файл должен быть скопирован на каждом узле. Обратите внимание, что содержимое файла должно быть точно таким же, иначе искра возвращает смешные результаты.
добавить file://
к вашему локальному пути к файлу