2016-04-21 1 views
0

Я копия вставила строку, которая выглядит как этотСпарк wholeTextFiles разницы между оболочкой и приложением

val files = sc.wholeTextFiles("file:///path/to/files/*.csv") 

от искровой оболочки, где он работает, с приложением, в котором он не запускается. Вместо этого я получаю, что шаблон соответствует 0 файлам, хотя в оболочке я могу видеть все файлы, и Spark читает их.

Что мне не хватает? Это проблема с правами доступа к файлам?

Я бегу приложение следующим образом:

spark-submit \ 
    --master yarn \ 
    --deploy-mode cluster \ 
    --files /usr/hdp/current/spark/conf/hive-site.xml \ 
    --num-executors 20 \ 
    --driver-memory 8G \ 
    --executor-memory 4G \ 
    --class com.myorg.pkg.MyApp \ 
    MyApp-assembly-0.1.jar 
+0

Ваш файл присутствует в локальной файловой системе или hdfs? –

+0

Вы предоставляете абсолютный путь или относительный путь? – user1314742

+0

Это на локальной FS, и путь такой же, как в примерном примере: абсолютный. – Ian

ответ

2

Для того, чтобы это работало, все ваши исполнители должны иметь доступ к этому файлу. Если файл не находится в локальной файловой системе для каждого исполнителя, тогда вы столкнетесь с проблемами.

Один из вариантов - разместить файл на hdfs и указать путь как hdfs:/path/to/file.csv. Таким образом, все исполнители имеют к нему доступ.

Другой вариант - передать файл в параметре --files. Это отправит файл всем исполнителям, чтобы все они имели к нему доступ.

+0

Да, я понял, что один из них вышел после моего ноутбука. HDFS - лучшее решение. Благодаря! – Ian

+0

Кстати, меня все еще беспокоит то, что в оболочке Spark это работает. Почему оболочка может справиться с этим? Использует ли он только локальный узел (т. Е. 1 исполнитель)? – Ian

+0

Spark Shell работает, потому что он запускает мастер приложений локально, где существует файл @Ian –

Смежные вопросы