Поддерживаемая платформа: 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
Код: