exponenta event banner

Пример развертывания массивов Tall в кластере Hadoop с поддержкой искр

Поддерживаемая платформа: только Linux ®.

В этом примере показано, как развернуть приложение MATLAB ®, содержащее массивы tall, в кластере Hadoop ® с поддержкой Spark™.

Цель: Вычислить среднюю задержку прибытия и наибольшие задержки прибытия авиакомпаний из данного набора данных.

Набор данных:airlinesmall.csv
Описание:

Информация о вылете и прилете авиакомпании из 1987-2008.

Расположение:/usr/local/MATLAB/R2021a/toolbox/matlab/demos

Примечание

Чтобы развернуть приложения Spark с высоким массивом в Cloudera ® CDH, следуйте тем же инструкциям. Для просмотра примера на Answers™ MATLAB нажмите здесь.

Для использования зон шифрования Cloudera CDH добавьте JAR-файл commons-codec-1.9.jar в статический путь к классам среды выполнения MATLAB. Расположение файла: $HADOOP_PREFIX/lib/commons-codec-1.9.jar, где $ HADOOP _ PREFIX - расположение, в котором установлен Hadoop.

Примечание

При использовании Spark версии 1.6 или выше необходимо увеличить размер кучи Java ® в MATLAB как минимум до 512MB. Дополнительные сведения об увеличении размера кучи Java в MATLAB см. в разделе Настройки памяти кучи Java.

Предпосылки

  1. Начните этот пример с создания новой рабочей папки, видимой в пути поиска MATLAB.

  2. Установите среду выполнения MATLAB в папку, доступную каждому рабочему узлу кластера Hadoop. В этом примере используется /usr/local/MATLAB/MATLAB_Runtime/v## в качестве расположения папки среды выполнения MATLAB.

    Если у вас нет среды выполнения MATLAB, вы можете загрузить ее с веб-сайта по адресу: https://www.mathworks.com/products/compiler/mcr.

    Примечание

    Заменить все ссылки на версию среды выполнения MATLAB v## в этом примере с номером версии среды выполнения MATLAB, соответствующим версии MATLAB. Например, MATLAB R2017b имеет номер версии среды выполнения MATLAB v92. Для получения информации о номерах версий среды выполнения MATLAB, соответствующих выпускам MATLAB, см. этот список.

  3. Копировать файл airlinesmall.csv в папку распределенной файловой системы (HDFS™) Hadoop /user/<username>/datasets. Здесь <username> ссылается на имя пользователя в HDFS.

    $ ./hadoop fs -copyFromLocal airlinesmall.csv hdfs://host:54310/user/<username>/datasets

Процедура

  1. Настройка переменной среды, HADOOP_PREFIX указывает на папку установки Hadoop. Эти свойства необходимы для отправки заданий в кластер Hadoop.

    setenv('HADOOP_PREFIX','/usr/lib/hadoop')

    HADOOP_PREFIX при использовании MATLAB должна быть установлена переменная среды datastore для указания на данные в HDFS. Установка этой переменной среды не имеет ничего общего со Spark. Дополнительные сведения см. в разделе Взаимосвязь между искрой и Hadoop.

    Если планируется использовать набор данных на локальном компьютере, а не на HDFS, можно пропустить этот шаг.

    Примечание

    В этом примере используется /usr/lib/hadoop в качестве каталога, в котором установлен Hadoop. Каталог установки Hadoop может отличаться.

  2. Укажите свойства искры.

    Использовать containers.Map для задания свойств искры.

    sparkProperties = containers.Map( ...
     {'spark.executor.cores', ...
     'spark.executor.memory', ...
     'spark.yarn.executor.memoryOverhead', ...
     'spark.dynamicAllocation.enabled', ...
     'spark.shuffle.service.enabled', ...
     'spark.eventLog.enabled', ...
     'spark.eventLog.dir'}, ...
     {'1', ...
      '2g', ...
      '1024', ...
      'true', ...
      'true', ...
      'true', ...
      'hdfs://host:54310/user/<username>/log'});

    Дополнительные сведения о свойствах искры см. в разделе prop значение 'SparkProperties' пара имя-значение в разделе Входные аргументы SparkConf класс. SparkConf является частью API MATLAB для Spark, который предоставляет альтернативный способ развертывания приложений MATLAB в Spark. Дополнительные сведения см. в разделе Развертывание приложений с помощью API MATLAB for Spark.

  3. Настройте приложение MATLAB, содержащее массивы tall с параметрами Spark.

    Использовать класс matlab.mapreduce.DeploySparkMapReducer для настройки приложения MATLAB, содержащего массивы tall с параметрами Spark в качестве пар ключ-значение.

    conf = matlab.mapreduce.DeploySparkMapReducer( ...
          'AppName','myTallApp', ...
          'Master','yarn-client', ...
          'SparkProperties',sparkProperties);

    Дополнительные сведения см. в разделе matlab.mapreduce.DeploySparkMapReducer.

  4. Определите среду выполнения искры.

    Используйте mapreducer для определения среды выполнения Spark.

    mapreducer(conf)

    Дополнительные сведения см. в разделе mapreducer.

  5. Включите код приложения MATLAB, содержащий массивы tall.

    Использование функции MATLAB datastore для создания datastore объект, указывающий на файл airlinesmall.csv в HDFS. Пройти datastore объект в качестве входного аргумента для tall функция. Это создаст массив высокого уровня. Можно выполнять операции с массивом высокого уровня для вычисления средней задержки поступления и наибольших задержек поступления.

    % Create a |datastore| for a collection of tabular text files representing airline data. 
    % Select the variables of interest, specify a categorical data type for the 
    % |Origin| and |Dest| variables.
    % ds = datastore('airlinesmall.csv') % if using a dataset on your local machine
    ds = datastore('hdfs:///<username>/datasets/airlinesmall.csv');
    ds.TreatAsMissing = 'NA';
    ds.SelectedVariableNames = {'Year','Month','ArrDelay','DepDelay','Origin','Dest'};
    ds.SelectedFormats(5:6) = {'%C','%C'};
    
    % Create Tall Array
    % Tall arrays are like normal MATLAB arrays, except that they can have any
    % number of rows. When a |tall| array is backed by a |datastore|, the underlying class of
    % the tall array is based on the type of datastore.
    tt = tall(ds);
    
    % Remove Rows with Missing Data or NaN Values
    idx = any(ismissing(tt),2); 
    tt(idx,:) = [];
    
    % Compute Mean Delay
    meanArrivalDelay = mean(tt.DepDelay,'omitnan');
    biggestDelays = topkrows(tt,10,'ArrDelay');
    
    % Gather Results
    % The |gather| function forces evaluation of all queued operations and
    % brings the resulting output back into memory. 
    [meanArrivalDelay,biggestDelays] = gather(meanArrivalDelay,biggestDelays)
    
    % Delete mapreducer object
    delete(conf);
  6. Создание приложения Spark.

    Используйте mcc с помощью команды -vCW параметры для создания приложения Spark.

    >> mcc -vCW 'Spark:myTallApp' deployTallArrayToSpark.m

    Создаются следующие файлы.

    ФайлыОписание
    run_myTallApp.shСценарий оболочки для запуска приложения. Сценарий вызывает spark-submit для запуска приложения в кластере.
    myTallApp.jarПриложение JAR. Приложение JAR содержит упакованный код MATLAB и другие зависимости.
    readme.txtФайл Readme, содержащий сведения о запуске приложения.
    requiredMCRProducts.txt 
    mccExcludedFiles.log 

    Дополнительные сведения см. в разделе mcc.

  7. Запустите приложение из оболочки Linux с помощью следующей команды:

    $ ./run_myTallApp.sh /usr/local/MATLAB/MATLAB_Runtime/v##

    /usr/local/MATLAB/MATLAB_Runtime/v## является аргументом, указывающим местоположение среды выполнения MATLAB.

  8. Вы увидите следующие выходные данные:

    meanArrivalDelay =
        7.1201
    
    biggestDelays =
    
      10x5 table
    
        Year    Month    ArrDelay    Origin    Dest
        ____    _____    ________    ______    ____
    
        1995    11       1014        HNL       LAX 
        2007     4        914        JFK       DTW 
        2001     4        887        MCO       DTW 
        2008     7        845        CMH       ORD 
        1988     3        772        ORD       LEX 
        2008     4        710        EWR       RDU 
        1998    10        679        MCI       DFW 
        2006     6        603        ABQ       PHX 
        2008     6        586        PIT       LGA 
        2007     4        568        RNO       SLC
    

При необходимости, чтобы проанализировать или просмотреть результаты, сгенерированные приложением в MATLAB, необходимо записать результаты в файл на HDFS с помощью write функция для больших массивов. Затем файл можно прочитать с помощью datastore функция.

Чтобы записать результаты в файл на HDFS, добавьте следующую строку кода в приложение MATLAB непосредственно перед delete(conf) выписки, а затем упакуйте приложение:

write('hdfs:///user/<username>/results', tall(biggestDelays));

Заменить <username> с именем пользователя.

В файл можно сохранить только одну переменную с помощью write функция для больших массивов. Поэтому для сохранения нескольких переменных потребуется выполнить запись в несколько файлов.

Чтобы просмотреть результаты в MATLAB после выполнения приложения для кластера с поддержкой Spark, используйте datastore выполнять следующие функции:

>> ds = datastore('hdfs:///user/<username>/results')
>> readall(ds)

Возможно, потребуется задать переменную среды HADOOP_PREFIX использование функции setenv в случае невозможности просмотра результатов с помощью datastore функция.

Примечание

Если развертываемое приложение массива tall является функцией MATLAB, а не сценарием MATLAB, используйте следующий синтаксис выполнения:

$ ./run_<applicationName>.sh \
  <MATLAB_Runtime_Location> \
  [Spark arguments] \
  [Application arguments]
Например:
$ ./run_myTallApp.sh \
   /usr/local/MATLAB/MATLAB_Runtime/v92 \
   yarn-client \
   hdfs://host:54310/user/<username>/datasets/airlinesmall.csv \
   hdfs://host:54310/user/<username>/result

Код:

 deployTallArrayToSpark.m