Как мы можем передать аргументы для Hadoop Streaming из AWS SDK для PHP? - PullRequest
1 голос
/ 02 апреля 2012

Я пытаюсь добавить работу через AWS SDK для PHP.Я могу успешно запустить кластер и начать новый поток заданий через API, но я получаю сообщение об ошибке при попытке создать шаг потоковой передачи Hadoop.

Вот мой код:

// add some jobflow steps
$response = $emr->add_job_flow_steps($JobFlowId, array(
    new CFStepConfig(array(
        'Name' => 'MapReduce Step 1. Test',
        'ActionOnFailure' => 'TERMINATE_JOB_FLOW',
        'HadoopJarStep' => array(
    'Jar' => '/home/hadoop/contrib/streaming/hadoop-streaming.jar',
            // ERROR IS HERE!!!! How can we pas the parameters?
    'Args' => array(
                '-input s3://logs-input/appserver1 -output s3://logs-input/job123/ -mapper s3://myscripts/mapper-apache.php -reducer s3://myscripts/reducer.php',
              ),
        )
   )),
));

Я получаю сообщение об ошибке вроде: Неверный параметр потоковой передачи '-input s3: // .... -output s3: // ..... -mapper s3: //....../mapper.php -reducer s3: //...../reducer.php "

Так что не ясно, как я могу передать аргументы в Hadoop Streaming JAR?

OfficialДокументация AWS SDK для PHP не предоставляет никаких примеров или документации.

Возможно связанный поток без ответа:

Передача параметров в скрипт hive с использованием aws php sdk

Ответы [ 2 ]

1 голос
/ 24 апреля 2012

Это сработало для меня:

'Args' => array( '-input','s3://mybucket/in/','-output','s3://mybucket/oo/',
                '-mapper','s3://mybucket/c/mapperT1.php',
                    '-reducer','s3://mybucket/c/reducerT1.php')
1 голос
/ 02 апреля 2012

Я еще не выполнил эти шаги с AWS SDK для PHP , но из других сред я бы подумал, что способ указания местоположений Amazon S3 может не соответствовать правильно - я думаю, что они должны быть следующими для ваших входных и выходных параметров:

  • S3N: // журналы входов / appserver1
  • S3N: // журналы входов / job123 /

Обратите внимание на использование схемы s3n: vs. s3: URI, которая может потребоваться для Amazon EMR согласно соответствующему FAQ Как Amazon Elastic MapReduce использует Amazon EC2 и Amazon S3

Клиенты загружают свои входные данные и приложение для обработки данных в Amazon S3. Amazon Elastic MapReduce затем запускает ряд Экземпляры Amazon EC2, указанные клиентом. Служба начинается выполнение потока работ при извлечении входных данных из Amazon S3 используя протокол S3N в запущенных экземплярах Amazon EC2. Однажды поток работ завершен, Amazon Elastic MapReduce передает выходные данные данные в Amazon S3, где клиенты могут затем извлечь их или использовать в качестве ввод в другой поток работ. [Акцент мой]


Приложение

Различие между двумя схемами URI объясняется в Hadoop Wiki, см. AmazonS3 :

Hadoop предоставляет две файловые системы, использующие S3.

  • Собственная файловая система S3 (схема URI: s3n) Нативная файловая система для чтения и запись обычных файлов на S3. Преимущество этой файловой системы что вы можете получить доступ к файлам на S3, которые были написаны с помощью других инструментов. И наоборот, другие инструменты могут обращаться к файлам, написанным с использованием Hadoop. недостатком является ограничение в 5 ГБ на размер файла, наложенное S3. За это причина, по которой он не подходит в качестве замены для HDFS (которая имеет поддержку для очень больших файлов).
  • S3 Block FileSystem (схема URI: s3) Файловая система на основе блоков, поддерживаемая S3. Файлы хранятся в виде блоков, просто как они в HDFS. Это позволяет эффективно осуществлять переименовывает. Эта файловая система требует от вас выделить место для файловая система - вы не должны использовать существующую корзину, содержащую файлы, или записать другие файлы в то же ведро. Файлы, сохраненные этим файловая система может быть больше, чем 5 ГБ, но они не совместимы с другие инструменты S3.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...