Пример при развертывании длинных массивов к Spark Enabled кластер Hadoop

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

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

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

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

Отъезд авиакомпании и информация о прибытии от 1987-2008.

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

Примечание

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

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

Примечание

Если вы будете использовать версию 1.6 Spark или выше, необходимо будет увеличить размер кучи Java® в MATLAB по крайней мере к 512 МБ. Для получения информации о том, как увеличить размер кучи Java в MATLAB, смотрите Настройки Java Heap Memory.

Необходимые условия

  1. Запустите этот пример путем создания новой папки работы, которая отображается к пути поиска файлов MATLAB.

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

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

    Примечание

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

  3. Скопируйте файл airlinesmall.csv в папку Hadoop Distributed File System (HDFS™) /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. Смотрите Отношение Между Spark и Hadoop для получения дополнительной информации.

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

    Примечание

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

  2. Свойства Specify Spark.

    Используйте containers.Map объект задать свойства Spark.

    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'});

    Для получения дополнительной информации о свойствах Spark расширьте prop значение 'SparkProperties' пара "имя-значение" в разделе Input Arguments SparkConf класс. SparkConf класс является частью MATLAB API для Spark, который обеспечивает альтернативный способ развернуть приложения MATLAB в Spark. Для получения дополнительной информации смотрите, Развертывают Приложения Используя MATLAB API для Spark.

  3. Сконфигурируйте свое приложение MATLAB, содержащее длинные массивы параметрами Spark.

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

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

    Для получения дополнительной информации смотрите matlab.mapreduce.DeploySparkMapReducer.

  4. Задайте среду выполнения Spark.

    Используйте mapreducer функция, чтобы задать среду выполнения Spark.

    mapreducer(conf)

    Для получения дополнительной информации смотрите mapreducer.

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

    Используйте функцию 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.jarJAR приложения. 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 Runtime.

  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 функция.

Примечание

Если развертываемым приложением длинного массива является функция 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