2014-10-22 2 views
2

Я хочу запустить приложение MapReduce в кластере YARN с использованием кода клиента Java. Например, я хочу отправить WordCount, который находится в файле hadoop-examples.jar в кластер YARN из 16 машин с использованием Java API.Запуск MapReduce приложений на Apache YARN с использованием Java-клиента

Я попытался следовать this tutorial, но я не получил, что такое мастер-приложение приложения. Это то же самое, что и hadoop-examples.jar? Или в другой банке содержится логика ApplicationMaster?

Я ценю, если у вас есть пример кода клиента Java от a до z, чтобы отправить приложение MapReduce в YARN.

Update:

Что я знать, Майки должен представить MapReduce работу в качестве приложения с использованием пряжи Пряжа APIs (например YarnClient, ApplicationClientProtocol, ...), который отличается от this question.

ответ

0

Не знаю, насколько это поможет в подсчете слов, но я построил свои собственные персонажи и редукторы, которые будут обрабатывать R-скрипты. Без всяких сложностей, вот как я представляю простую работу.

ArtisanJob - это просто класс, который расширяет org.apache.hadoop.mapreduce.Job. У меня есть некоторые дополнительные методы для моей функциональности. Вы можете заменить ArtisanJob просто org.apache.hadoop.mapreduce.Job, и он должен работать отлично для вас.

My ArtisanConfiguration расширяет импорт org.apache.hadoop.conf.Configuration и может быть заменен также только импортом org.apache.hadoop.conf.Configuration.

MetricInputFormat, MetricOutputFormat - это те же самые простые адаптеры, которые расширяют InputFormat и OutputFormat соответственно.

Дайте мне знать, если у вас есть вопросы, но это рабочий код для hadoop 2.4.1 с помощью mrv2.

public String execute(IHadoopJobConfiguration jobDetails) 
     throws HadoopJobException { 
    try { 

     ArtisanJob job = createJob(jobDetails); 
     job.submit(); 
     return job.getJobID().toString(); 
    } catch (ClassNotFoundException | IOException | InterruptedException 
      | RAnalyticsException | ConfigurationException e) { 
     logger.log(Level.SEVERE, "Unable to execute job", e); 
     throw new HadoopJobException("Unable to execute operation", e); 
    } catch (Exception e) { 
     throw new HadoopJobException("Unable to execute operation", e); 
    } 
} 

...

ArtisanJob createJob(IHadoopJobConfiguration details) 
     throws IOException, ConfigurationException, RAnalyticsException { 

    IOperation mapperOperation = details.getMapperOperation(); 
    IOperation reducerOperation = details.getReducerOperation(); 

    OperationConfiguration conf = new OperationConfiguration(); 
    conf.setDataProviders(details.getDataProviders()); 
    conf.setOperationInputs(details.getUserInputs()); 

    ArtisanJob job = new ArtisanJob(new ArtisanConfiguration()); 

    // Tell the job to be local for right now 
    job.getConfiguration().set("mapreduce.framework.name", "local"); 

    job.setMapperClass(ROperationMapper.class); 
    job.setReducerClass(ROperationReducer.class); 
    job.setInputFormatClass(MetricInputFormat.class); 
    job.setOutputFormatClass(MetricOutputFormat.class); 
    job.setMapOutputKeyClass(MetricKey.class); 
    job.setMapOutputValueClass(MetricWritable.class); 
    job.setJarByClass(MetricInputFormat.class); 

    job.getConfiguration() 
      .set("conf.column", 
        props.getProperty("com.artisan.orchestrator.hbase.metric.colfamily")); 

    // Set the output type to hbase so that it will write the outputs to 
    // our hbase server 
    MetricOutputFormat.setOutputAdatperType(job.getConfiguration(), 
      OutputAdapterType.HBASE); 

    // Set the input to be the http service, this needs to be more modular. 
    MetricInputFormat.setInputAdapterType(job.getConfiguration(), 
      InputAdapterType.HTTP); 

    job.setMapperOperation(mapperOperation); 
    job.setReducerOperation(reducerOperation); 


    logger.log(Level.SEVERE, "Job class is " + job.getJar()); 

    return job; 
} 
+0

Спасибо большое. Но я не получил, где я могу использовать API YarnClient для указания ресурсов, необходимых для запуска этого задания (например, памяти и ресурсов ЦП для запуска ApplicationMaster). Раньше вы сталкивались с этим? –

+0

Да, вы должны настроить его в файле mapred-site.xml или настроить его так же, как и для mapreduce.framework.name. Это значение может быть «локальным» или «пряжа». По умолчанию он настроен как пряжа в mapred-site.xml, но для тестирования очень быстро я изменил его, чтобы использовать локальный в конфигурации задания непосредственно перед отправкой. Я могу обновить остальную часть ответа чуть позже. –