2015-09-22 2 views
0

Я пытаюсь прочитать файл в Spark Shell, который поставляется с дистрибутивом CentOS Cloudera на моей локальной машине. Ниже приведены команды, которые я ввел в Spark Shell.Spark Shell не может прочитать файл на допустимом пути

spark-shell 
val fileData = sc.textFile("hdfs://user/home/cloudera/cm_api.py"); 
fileData.count 

Я также попытался даного для чтения файла:

val fileData = sc.textFile("user/home/cloudera/cm_api.py"); 

Однако я получаю

org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: hdfs://quickstart.cloudera:8020/user/cloudera/user/cloudera/cm_api.py 

Я не изменил никаких настроек или конфигураций. Что я делаю не так?

+0

Нет необходимости в древних ';' в scala. – Reactormonk

ответ

0

В "hdfs://user/home/cloudera/cm_api.py" у вас отсутствует hostname URI. Вы должны пройти что-то вроде "hdfs://<host>:<port>/user/home/cloudera/cm_api.py", где <host> является Hadoop HostNodeNode и <port> is, колодец, номер порта Hadoop NameNode, который по умолчанию равен 50070.

0

Сообщение об ошибке hdfs://quickstart.cloudera:8020/user/cloudera/user/cloudera/cm_api.py не существует. Путь выглядит подозрительно! Файл, который вы имеете в виду, вероятно, находится на hdfs://quickstart.cloudera:8020/user/cloudera/cm_api.py.

Если есть, вы можете получить к нему доступ, используя этот полный путь. Или, если файловая система по умолчанию настроена как hdfs://quickstart.cloudera:8020/user/cloudera/, вы можете использовать просто cm_api.py.

+0

Не этот'quickstart.cloudera: 8020' URL, а не каталог на диске? – user2498079

+1

Номенклатура в стороне Я думаю, что 'sc.textFile (" hdfs: //quickstart.cloudera: 8020/user/home/cloudera/cm_api.py ")' - ваш лучший выбор. 'sc.textFile ("/user/home/cloudera/cm_api.py ")', и, возможно, 'sc.textFile (" cm_api.py ")' также может работать. –

+0

Ни один из них не работал. Я не знаю, почему. Файл присутствует в домашнем каталоге Cloudera. – user2498079

3

Вам не хватает ведущей косой черты в вашем URL-адресе, поэтому путь относительный. Для того, чтобы сделать его абсолютным, используйте

val fileData = sc.textFile("hdfs:///user/home/cloudera/cm_api.py") 

или

val fileData = sc.textFile("/user/home/cloudera/cm_api.py") 
+0

Пробовал 'hdfs: ///' это не сработало. Необходимо попробовать путь '/ user'. – user2498079

1

Я думаю, вам нужно поместить файл в HDFS первый: hadoop fs -put, а затем проверить файл: hadoop fs -ls, затем spark-shell, val fileData = sc.textFile("cm_api.py")

0

Вы можете быть смущены между файлами HDFS и локальными файловыми путями. Указав

hdfs://quickstart.cloudera:8020/user/home/cloudera/cm_api.py 

вы говорите две вещи:

1) есть компьютер под названием «quickstart.cloudera» достижимы через сеть (TRY пинг, чтобы убедиться, что это так), и работает HDFS.

2) файловая система HDFS содержит файл на /user/home/cloudera/cm_api.py (попробуйте 'HDFS ДФС -ls/пользователь/дома/Cloudera /', чтобы проверить эту

Если вы пытаетесь получить доступ к файлу в локальной файловой системе, вы должны использовать другой URI:

file:///user/home/cloudera/cm_api.py 
Смежные вопросы