2015-03-17 3 views
8

Я пытался распаковать zip-файл, хранящийся в файловой системе Hadoop, & сохранил его обратно в файловой системе hadoop. Я пробовал следующие команды, но никто из них не работал.Как распаковать файл в hadoop?

hadoop fs -cat /tmp/test.zip|gzip -d|hadoop fs -put - /tmp/ 
hadoop fs -cat /tmp/test.zip|gzip -d|hadoop fs -put - /tmp 
hadoop fs -cat /tmp/test.zip|gzip -d|hadoop put - /tmp/ 
hadoop fs -cat /tmp/test.zip|gzip -d|hadoop put - /tmp 

Я получаю ошибки как gzip: stdin has more than one entry--rest ignored, cat: Unable to write to output stream., Error: Could not find or load main class put на терминале, когда я запускаю эти команды. Любая помощь?

Редактировать 1: У меня нет доступа к пользовательскому интерфейсу. Таким образом, разрешены только командные строки. Утилиты unzip/gzip устанавливаются на моей машине hadoop. Я использую версию Hadoop 2.4.0.

+0

AFAIK, единственный ваниль путь сделать это было бы, чтобы получить файл вашей локальной машины, разархивировать его и отправить обратно в кластер. – fxm

+0

У меня нет такой свободы: | – Abhishek

+0

Считаете ли вы [это решение?] (Http://stackoverflow.com/questions/15256808/unzip-files-using-hadoop -streaming) – fxm

ответ

0
  1. GZIP использовать -c для чтения данных из стандартного ввода
  2. Hadoop фс -Положи оленью кожей поддержки чтения данных из стандартного ввода

    Я попробовал много вещей, и буду help.I не можешь найти вход почтового индекса поддержка hadoop.So это не оставляло мне выбора, кроме как загружать файл hadoop в локальные fs, разархивировать его и снова загружать в hdfs.

+0

Когда я запускал 'hadoop fs -unzip ', он показывает '-unzip: Неизвестная команда' не найден – Abhishek

2

Я использую большую часть времени HDFS предохранителей креплениями для этого

Таким образом, вы можете просто сделать

$ cd /hdfs_mount/somewhere/ 
$ unzip file_in_hdfs.zip 

http://www.cloudera.com/content/www/en-us/documentation/archive/cdh/4-x/4-7-1/CDH4-Installation-Guide/cdh4ig_topic_28.html

Редактировать 1/30/16: В случае, если вам использовать ACL в hdfs: в некоторых случаях плавкие вставки не привязаны к спискам ACL hdfs, поэтому вы сможете выполнять файловые операции, разрешенные базовыми правами доступа unix. См. https://issues.apache.org/jira/browse/HDFS-6255, комментарии внизу, которые я недавно попросил открыть.

+0

Имеет ли это какой-либо побочный эффект на производительность? – Abhishek

+0

Я использую это для файлов с сотнями Gb в размере. Производительность - она ​​должна быть проверена по сравнению с другими вариантами, которые у вас могут быть, если таковые имеются.Это гораздо удобнее - просто запустите gunzip. – Tagar

+0

Просто любопытно, Не похоже ли копировать на локальный, а затем копировать обратно? – Abhishek

0

Чтобы передать данные через трубу в hadoop, вам нужно использовать команду hdfs.

cat mydatafile | hdfs dfs -put - /MY/HADOOP/FILE/PATH/FILENAME.EXTENSION 
2

Чтобы разархивировать со сжатыми (или сжатые bzip'ом) файл, я использую следующий

hdfs dfs -cat /data/<data.gz> | gzip -d | hdfs dfs -put - /data/ 

Если файл находится на локальном диске, а затем

zcat <infile> | hdfs dfs -put - /data/ 
Смежные вопросы