Как можно указать несколько файлов с помощью -files в интерфейсе командной строки Amazon для EMR?

Я пытаюсь запустить кластер amazon через интерфейс командной строки amazon, но я немного запутался, как указать несколько файлов. Мой текущий вызов выглядит следующим образом:

aws emr create-cluster --steps Type=STREAMING,Name='Intra country development',ActionOnFailure=CONTINUE,Args=[-files,s3://betaestimationtest/mapper.py,-
files,s3://betaestimationtest/reducer.py,-mapper,mapper.py,-reducer,reducer.py,-
input,s3://betaestimationtest/output_0_inter,-output,s3://betaestimationtest/output_1_intra] 
--ami-version 3.1.0 
--instance-groupsInstanceGroupType=MASTER,InstanceCount=1,InstanceType=m3.xlarge 
InstanceGroupType=CORE,InstanceCount=2,InstanceType=m3.xlarge --auto-terminate 
--log-uri s3://betaestimationtest/logs

Однако теперь Hadoop жалуется, что не может найти файл редуктора:

Caused by: java.io.IOException: Cannot run program "reducer.py": error=2, No such file or directory

Что я делаю не так? Файл существует в указанной папке


person Lotte    schedule 10.12.2014    source источник


Ответы (3)


Для передачи нескольких файлов на этапе потоковой передачи вам необходимо использовать file:// для передачи шагов в виде файла json.

В сокращенном синтаксисе AWS CLI используется запятая в качестве разделителя для разделения списка аргументов. Поэтому, когда мы пытаемся передать такие параметры, как: «-files», «s3://betaestimationtest/mapper.py, s3://betaestimationtest/reducer.py», тогда анализатор сокращенного синтаксиса будет обрабатывать mapper.py и редьюсер. py-файлы в качестве двух параметров.

Обходной путь — использовать формат json. Пожалуйста, смотрите примеры ниже.

aws emr create-cluster --steps file://./mysteps.json --ami-version 3.1.0 --instance-groups InstanceGroupType=MASTER,InstanceCount=1,InstanceType=m3.xlarge InstanceGroupType=CORE,InstanceCount=2,InstanceType=m3.xlarge --auto-terminate --log-uri s3://betaestimationtest/logs

mysteps.json выглядит так:

[
    {
    "Name": "Intra country development",
    "Type": "STREAMING",
    "ActionOnFailure": "CONTINUE",
    "Args": [
        "-files",
        "s3://betaestimationtest/mapper.py,s3://betaestimationtest/reducer.py",
        "-mapper",
        "mapper.py",
        "-reducer",
        "reducer.py",
        "-input",
        " s3://betaestimationtest/output_0_inte",
        "-output",
        " s3://betaestimationtest/output_1_intra"
    ]}
]

Вы также можете найти примеры здесь: https://github.com/aws/aws-cli/blob/develop/awscli/examples/emr/create-cluster-examples.rst. См. пример 13.

Надеюсь, поможет!

person Shuo    schedule 11.12.2014

Вы указываете -files дважды, вам нужно указать только один раз. Я забыл, нужен ли CLI разделитель в виде пробела или запятой для нескольких значений, но вы можете попробовать это.

Вы должны заменить:

Args=[-files,s3://betaestimationtest/mapper.py,-files,s3://betaestimationtest/reducer.py,-mapper,mapper.py,-reducer,reducer.py,-input,s3://betaestimationtest/output_0_inter,-output,s3://betaestimationtest/output_1_intra]

с:

Args=[-files,s3://betaestimationtest/mapper.py s3://betaestimationtest/reducer.py,-mapper,mapper.py,-reducer,reducer.py,-input,s3://betaestimationtest/output_0_inter,-output,s3://betaestimationtest/output_1_intra]

или, если это не удается, с помощью:

Args=[-files,s3://betaestimationtest/mapper.py,s3://betaestimationtest/reducer.py,-mapper,mapper.py,-reducer,reducer.py,-input,s3://betaestimationtest/output_0_inter,-output,s3://betaestimationtest/output_1_intra]
person Saurabh    schedule 11.12.2014
comment
Я на самом деле уже попробовал оба этих варианта. Первое, что вы предлагаете, приводит к следующей ошибке в моей консоли: Key value pairs, where values are separated by commas, and multiple pairs are separated by spaces. Второй вариант также не работает в Amazon и выдает следующую ошибку: Found 1 unexpected arguments on the command line [s3://betaestimationtest/intraCountryReducer.py] - person Lotte; 11.12.2014

Добавьте escape-последовательность для запятой, разделяющей файлы:

    Args=[-files,s3://betaestimationtest/mapper.py\\,s3://betaestimationtest/reducer.py,-mapper,mapper.py,-reducer,reducer.py,-input,s3://betaestimationtest/output_0_inter,-output,s3://betaestimationtest/output_1_intra]
person Roman Vodonenko    schedule 18.11.2015
comment
Это не сработало. Я получил эту ошибку: Обнаружен 1 непредвиденный аргумент в командной строке [s3://str-emr/reduce.rb] Попробуйте -help для получения дополнительной информации Команда потоковой передачи не удалась! Команда завершается с ret '1' - person rajat banerjee; 26.02.2016