2014-12-19 3 views
0

Я пытаюсь загрузить gzipped файлы из каталога на удаленном компьютере в HDFS моей локальной машины. Я хочу иметь возможность читать gzipped файлы с удаленной машины и транслировать их прямо в HDFS на моем локальном компьютере. Это то, что у меня на локальной машине:Труба нескольких файлов в HDFS

ssh remote-host "cd /files/wanted; tar -cf - *.gz" | tar -xf - | hadoop fs -put - "/files/hadoop" 

Это, видимо, копирует все файлы с gzip'нутыми из удаленного пути, указанному в пути, где я выполнить команду и загружает пустой файл - в HDFS. То же самое происходит, если я попробовать его без tar также:

ssh remote-host "cd /files/wanted; cat *.gz" | hadoop fs -put - "/files/hadoop" 

Просто для чертовыми и хихикает, чтобы увидеть, если я, возможно, не хватает что-то простое, я попытался следующие на моей локальной машине:

tar -cf - *.gz | tar -xf -C tmp 

Это сделало то, что я ожидал, он взял все файлы gzipped в текущем каталоге и поместил их в существующий каталог tmp.

Затем с частью Hadoop на локальной машине:

cat my_file.gz | hadoop fs -put - "/files/hadoop" 

Это также сделал то, что я ожидал, он положил мой сжатый файл в /files/hadoop на HDFS.

Невозможно ли подключить несколько файлов в HDFS?

+0

я прочитал его снова и снова, и я не мог понять, какая часть точно не работает вы: -/ – maksimov

+0

@maksi mov, поэтому он копирует файлы в первых двух командах с удаленного хоста на локальный хост, который не должен произойти (так я думал). Он должен перейти прямо в HDFS, по какой-то причине сбивая несколько файлов в HDFS, которые не работают. – kurczynski

+0

Это актуально: http://stackoverflow.com/questions/11270509/putting-a-remote-file-into-hadoop-without-copying-it-to-local-disk, однако они идут другим путем, но это может дать вам некоторые подсказки. Обратите внимание, что OP обнаружил проблему с производительностью при прямой пересылке в hdf. – maksimov

ответ

1

По какой-то причине я не могу передать несколько файлов в HDFS. Так что я в конечном итоге делает создавал фон SSH сессии, поэтому я не должен создать для каждого отдельного файла, который я хочу, чтобы загрузить:

ssh -fNn remote-host 

А затем итерация по списку файлов нужно загрузить в HDFS и трубы каждый в:

for file in /files/wanted/*; do 
    ssh -n remote-host "cat $file" | "hadoop fs -put - /files/hadoop/$file" 
done 

Также убедитесь, чтобы закрыть SSH сессию:

ssh -O exit remote-host 
Смежные вопросы