Поддерживаемая платформа: Linux® только.
В этом примере показано, как развернуть MATLAB® приложение, содержащее длинные массивы к Spark™, включило Hadoop® кластер.
Цель: Вычислите среднюю задержку прибытия и самые большие задержки прибытия авиакомпаний от данного набора данных.
| Набор данных: | airlinesmall.csv |
| Описание: |
Отъезд авиакомпании и информация о прибытии от 1987-2008. |
| Местоположение : | /usr/local/MATLAB/R2021b/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.
Необходимые условия
Запустите этот пример путем создания новой папки работы, которая отображается к пути поиска файлов MATLAB.
Установите 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 см. этот список.
Скопируйте файл airlinesmall.csv в папку Hadoop Distributed File System (HDFS™) /user/<username>/datasets. Здесь <username> относится к вашему имени пользователя в HDFS.
$ ./hadoop fs -copyFromLocal airlinesmall.csv hdfs://host:54310/user/<username>/datasets |
Процедура
Настройте переменную окружения, HADOOP_PREFIX чтобы указать на ваш Hadoop устанавливают папку. Эти свойства необходимы для представления заданий к вашему кластеру Hadoop.
setenv('HADOOP_PREFIX','/usr/lib/hadoop')
HADOOP_PREFIX переменная окружения должна быть установлена при использовании MATLAB datastore функционируйте, чтобы указать на данные по HDFS. Установка этой переменной окружения не имеет никакого отношения к Spark. Смотрите Отношение Между Spark и Hadoop для получения дополнительной информации.
Если вы планируете использование набора данных, это находится на вашей локальной машине в противоположность одной на HDFS, то можно пропустить этот шаг.
Примечание
Этот пример использует /usr/lib/hadoop как директория, где Hadoop установлен. Ваша директория установки Hadoop, возможно, отличающаяся.
Свойства 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.
Сконфигурируйте свое приложение MATLAB, содержащее длинные массивы параметрами Spark.
Используйте класс matlab.mapreduce.DeploySparkMapReducer сконфигурировать ваше приложение MATLAB, содержащее длинные массивы параметрами Spark как пары "ключ-значение".
conf = matlab.mapreduce.DeploySparkMapReducer( ... 'AppName','myTallApp', ... 'Master','yarn-client', ... 'SparkProperties',sparkProperties);
Для получения дополнительной информации смотрите matlab.mapreduce.DeploySparkMapReducer.
Задайте среду выполнения Spark.
Используйте mapreducer функция, чтобы задать среду выполнения Spark.
mapreducer(conf)
Для получения дополнительной информации смотрите mapreducer.
Включайте свой код приложения 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);
Создайте приложение 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.
Запустите приложение от интерпретатора Linux используя следующую команду:
$ ./run_myTallApp.sh /usr/local/MATLAB/MATLAB_Runtime/v## |
/usr/local/MATLAB/MATLAB_Runtime/v аргумент, указывающий на местоположение MATLAB Runtime.##
Вы будете видеть следующий выход:
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
Код: