Каков конкретный пример синтаксиса для загрузки данных S3 в HDFS перед выполнением шагов в MRJob?

Когда я запускаю свой сценарий MRJob и использую CLI для запуска кластеров EMR для работы, я пытаюсь выяснить, как загрузить данные из S3 в HDFS в кластерах. Я хочу сделать это как часть процесса установки.

Я искал несколько мест, чтобы получить представление о правильном синтаксисе для использования с MRJob для предварительной загрузки моих данных S3 в HDFS. Я все еще осваиваю терминологию и процесс.

MRJob упоминает JarStep и Hadoop Streaming в своих документах: https://pythonhosted.org/mrjob/guides/writing-mrjobs.html

У Yelp есть дискуссионная ветка по этому поводу: https://github.com/Yelp/mrjob/pull/ 665

В AWS есть инструмент S3DistCp для предоставления синтаксиса для загрузки, а примеры относятся к Java. (Я не могу опубликовать более 2 ссылок, но поиск в Google даст больше информации об этом)

Мой подход заключался в том, чтобы включить JarStep в качестве шага перед MRStep в моем методе шагов сценария MRJob. Я пытался передать команды S3DistCp в качестве аргументов.

 def steps(self):
     return [JarStep(name='jar-step', jar='s3://<bucket to jar file>', 
                     args=['--src,s3://<bucket to data>, --dest,hdfs:///<bucket>']),
             MRStep(...)
             ]

Я пробовал несколько вариантов этого с и без кавычек или кавычек, разделяющих ввод и вывод, или пробелов между запятыми. В первую очередь я получаю сообщение об ошибке: «Исключение в потоке 'main' java.lang.RuntimeException: аргумент --src, --desc,, не совпадает.

Примеры, которые я нашел, похожи на следующие:

args=['naive-bayes', JarStep.INPUT, JarStep.OUTPUT]

Неясно, следует ли JarStep.INPUT заменить или определить в другом месте. Я начинаю думать, что мне следует передать команды java в CLI в разделе --jobconf, чтобы он соответствовал документации S3DistCp.

Любые идеи или просто примеры, пожалуйста, пришлите мне.


person nyghtowl    schedule 11.07.2014    source источник


Ответы (1)


если вы хотите скопировать один файл в свой hdfs, используйте команду, как показано ниже

hadoop fs -cp s3://‹ s3bucket >/‹ путь > hdfs:///output

Или используйте S3DistCp, как показано ниже.

./elastic-mapreduce --jobflow j-3GY8JC4179IOJ --jar \ /home/hadoop/lib/emr-s3distcp-1.0.jar \ --arg --s3Endpoint --arg 's3-eu-west-1.amazonaws. com' \ --arg --src --arg 's3://myawsbucket/logs/j-3GY8JC4179IOJ/node/' \ --arg --dest --arg 'hdfs:///output' \ --arg --srcPattern --arg '.*[a-zA-Z,]+'

person Sandesh Deshmane    schedule 11.07.2014
comment
Сандеш спасибо за быстрый ответ. Я пытаюсь включить команду либо в команду, которую использую для запуска экземпляров EMR, либо в сценарий MRJob. Насколько я понимаю, два перечисленных вами варианта требуют, чтобы EMR уже работал. Знаете ли вы пример, который будет идти в сценарии MRJob, как часть команды MRJob bash для запуска задания или в файле conf? - person nyghtowl; 11.07.2014
comment
Я бы хотел, чтобы кто-нибудь дал вам ответ на этот вопрос, у меня такая же проблема - person Tom Busby; 29.08.2014