2017-02-02 6 views
1

Я использую hasoop, предоставленный кластером CDH 5.4.1. Проблема, с которой я сталкиваюсь, заключается в том, что существует каталог hdfs с указанием пути/tmp/data У него есть некоторые файлы csv: abc.csv Теперь эта же папка присутствует на одном из локальных linux fs узла (скажем, узла 1) а также содержащий файл csv xyz.csv.HDFS запутывается, если тот же путь присутствует и на локальном узле

Когда я выполняю следующую команду из node1: hdfs dfs -ls /tmp/data/*.csv Я ожидаю, что вывод будет показан abc.csv, но я получаю сообщение об ошибке ls: `/ tmp/data /xyz.csv: Нет такого файла или каталога Эта же команда дает правильный вывод при запуске на других узлах, которые не имеют такого же пути к папке на своих локальных fux-файлах linux.

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

Просьба указать указатели на то, что может быть причиной такого поведения?

ответ

2

Вы видите эффекты Bash (или любые ваши оболочки выбора) подстановку и расширение подстановочные перед передачей аргумента команды HDFS , В локальной файловой системе есть файл в /tmp/data/xyz.csv. Поэтому команда, которая действительно вызывается, равна hdfs dfs -ls /tmp/data/xyz.csv. Поскольку xyz.csv не существует в вашем кластере HDFS, он сообщается как файл не найден.

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

> # local file system 
> ls /tmp/data/*.csv 
/tmp/data/xyz.csv 

> # attempting to check HDFS, but wildcard expansion happens before invoking command 
> hdfs dfs -ls /tmp/data/*.csv 
ls: `/tmp/data/xyz.csv': No such file or directory 

> # wrap in single quotes to prevent globbing expansion 
> hdfs dfs -ls '/tmp/data/*.csv' 
-rw-r--r-- 3 naurc001 supergroup   0 2017-02-02 11:52 /tmp/data/abc.csv 
+0

спасибо Криса. Ваше решение отлично подходит для меня. Однако я не понимаю, как создавался каталог на первом месте в локальных linux fs. Все, что я делаю, это толкать некоторые файлы csv в hdfs в/tmp/data location. Это происходит на некоторых редких сценариях, которые я не могу воспроизвести. Любые указатели на это помогут. – Pushkin

+0

Если пути создаются в локальной файловой системе неожиданно, возможно, некоторые из ваших команд 'hdfs dfs' случайно создают каталоги и файлы локально, а не на HDFS. Это произойдет, если аргумент пути, переданный команде, является URI файла (с префиксом 'file: //') или если команда случайно запускается без полной конфигурации Hadoop (core-site.xml и hdfs-site.xml) в эффект. Если конфигурация не найдена, то по умолчанию 'fs.defaultFS' является локальной файловой системой. –

1

Мое понимание было то, что с тех пор я использую HDFS ДФС команду Hadoop следует искать в пространстве Dfs только и не запутаться с локального Linux фс

Только если вы правильно настроить ваш клиент XML Hadoop файлы конфигурации использовать hdfs:// URI и не file://

в колонкового site.xml, значение по умолчанию fs.defaultFS является file://


Это значение должно быть правильно установлено в CDH или HDP управляемой среде, хотя

+0

Hi cricket_007, значение правильно установлено в файл и указывая на HDFS: // только – Pushkin