Доступ к файлам Hdfs в спарк - PullRequest
0 голосов
/ 04 мая 2018

Я занимаюсь разработкой приложения, в котором я читаю файл из hadoop, обрабатываю и сохраняю данные обратно в hadoop. Я запутался, какой должен быть правильный формат пути файла hdfs. При чтении файла hdfs из оболочки Shell вроде

val file=sc.textFile("hdfs:///datastore/events.txt")

работает нормально, и я могу прочитать.

Но когда я собираю банку с пряжей, которая содержит тот же набор кодов, это выдает ошибку, говорящую

org.apache.hadoop.HadoopIllegalArgumentException: Uri without authority: hdfs:/datastore/events.txt

Когда я добавляю имя узла ip как hdfs://namenodeserver/datastore/events.txt, все работает.

Я немного озадачен поведением и нуждаюсь в руководстве.

Примечание: я использую настройку aws emr, и все конфигурации по умолчанию.

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Проблема решена. Когда я продолжил отладку, свойство fs.defaultFS не использовалось из core-site.xml, когда я просто передаю путь как hdfs:///path/to/file. Но все свойства конфигурации hadoop загружены (как я зарегистрировал sparkContext.hadoopConfiguration объект.

В качестве обходного пути я вручную прочитал свойство как sparkContext.hadoopConfiguration().get("fs.defaultFS) и добавил его в путь.

Я не знаю, это правильный способ сделать это.

0 голосов
/ 04 мая 2018

если вы хотите использовать sc.textFile ("hdfs: // ..."), вам нужно указать полный путь (абсолютный путь), в вашем примере это будет "nn1home: 8020 /.."

Если вы хотите упростить задачу, просто используйте sc.textFile ("hdfs: /input/war-and-peace.txt")

Это только один /

Я думаю, что это будет работать.

...