Можно ли запустить hadoop fs -getmerge в S3?

У меня есть задание Elastic Map Reduce, которое записывает некоторые файлы в S3, и я хочу объединить все файлы для создания уникального текстового файла.

В настоящее время я вручную копирую папку со всеми файлами в нашу HDFS (hadoop fs copyFromLocal), затем запускаю hadoop fs -getmerge и hadoop fs copyToLocal для получения файла.

можно ли использовать hadoop fs непосредственно на S3?


person yeforriak    schedule 29.06.2012    source источник


Ответы (3)


На самом деле, этот ответ о getmerge неверен. getmerge ожидает локального назначения и не будет работать с S3. Он выдает IOException при попытке и отвечает -getmerge: Wrong FS:.

Применение:

hadoop fs [generic options] -getmerge [-nl] <src> <localdst>
person Brent Black    schedule 27.02.2013

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

  1. Объедините части файла в один файл на локальном компьютере (Документация)

    hadoop fs -getmerge hdfs://[FILE] [LOCAL FILE]
    
  2. Скопируйте полученный файл на S3, а затем удалите локальный файл (Документация)

    hadoop dfs -moveFromLocal [LOCAL FILE] s3n://bucket/key/of/file
    
person justderb    schedule 12.11.2013

Я лично не пробовал использовать команду getmerge, но команды hadoop fs на узлах кластера EMR поддерживают пути S3 точно так же, как пути HDFS. Например, вы можете подключиться по SSH к главному узлу вашего кластера и запустить:

hadoop fs -ls s3://<my_bucket>/<my_dir>/

Приведенная выше команда выведет список всех объектов S3 по указанному пути к каталогу.

Я ожидаю, что hadoop fs -getmerge будет работать так же. Итак, просто используйте полные пути S3 (начиная с s3://) вместо путей HDFS.

person Mark Grover    schedule 30.06.2012
comment
hadoop fs -getmerge может объединяться только с локальной файловой системой, а не с s3 - person justderb; 12.11.2013