Поддерживаемая платформа: только 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.
Предпосылки
Начните этот пример с создания новой рабочей папки, видимой в пути поиска MATLAB.
Установите среду выполнения 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, см. этот список.
Копировать файл airlinesmall.csv в папку распределенной файловой системы (HDFS™) Hadoop /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. Дополнительные сведения см. в разделе Взаимосвязь между искрой и Hadoop.
Если планируется использовать набор данных на локальном компьютере, а не на HDFS, можно пропустить этот шаг.
Примечание
В этом примере используется /usr/lib/hadoop в качестве каталога, в котором установлен Hadoop. Каталог установки Hadoop может отличаться.
Укажите свойства искры.
Использовать 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.
Настройте приложение MATLAB, содержащее массивы tall с параметрами Spark.
Использовать класс matlab.mapreduce.DeploySparkMapReducer для настройки приложения MATLAB, содержащего массивы tall с параметрами Spark в качестве пар ключ-значение.
conf = matlab.mapreduce.DeploySparkMapReducer( ... 'AppName','myTallApp', ... 'Master','yarn-client', ... 'SparkProperties',sparkProperties);
Дополнительные сведения см. в разделе matlab.mapreduce.DeploySparkMapReducer.
Определите среду выполнения искры.
Используйте mapreducer для определения среды выполнения Spark.
mapreducer(conf)
Дополнительные сведения см. в разделе mapreducer.
Включите код приложения 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);
Создание приложения 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.##
Вы увидите следующие выходные данные:
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
Код: