Поддерживаемая платформа: Linux® только.
В этом примере показано, как развернуть автономное приложение для Spark™ с помощью MATLAB® API для Spark. Ваше приложение может быть развернуто против Spark с помощью одного из двух поддерживаемых кластерных менеджеров: локального и Hadoop® YARN. В этом примере показано, как развернуть приложение с помощью обоих менеджеров кластеров. Для обсуждения кластерных менеджеров смотрите Кластерные менеджеры, поддерживаемые Spark.
Цель: Подсчитать количество уникальных авиакомпаний в данном наборе данных.
Набор данных: | airlinesmall.csv |
Описание: |
Информация о вылете и прибытии из 1987-2008. |
Расположение: | /usr/local/MATLAB/R2021a/toolbox/matlab/demos |
Функция помощника
Создайте файл MATLAB с именем carrierToCount.m
со следующим кодом:
function results = carrierToCount(input) tbl = input{1}; intermKeys = tbl.UniqueCarrier; [intermKeys, ~, idx] = unique(intermKeys); intermValues = num2cell(accumarray(idx, ones(size(idx)))); results = cellfun( @(x,y) {x,y} , ... intermKeys, intermValues, ... 'UniformOutput',false);
Примечание
Если вы используете Spark версии 1.6 или выше, вам нужно будет увеличить Java® размер кучки в MATLAB по меньшей мере до 512MB. Для получения информации об увеличении размера Java-кучи в MATLAB, смотрите Java Heap Настройки.
Локальный менеджер кластеров представляет кластер с поддержкой pseudo Spark и работает в распределенном режиме на одной машине. Он может быть сконфигурирован, чтобы использовать один рабочий поток, или на многоядерной машине, несколько рабочих потоков. В приложениях обозначается словом local
. Локальный менеджер кластеров удобен для отладки вашего приложения перед полным развертыванием в кластере Hadoop с поддержкой Spark.
Начните этот пример, создав новую рабочую папку, которая видна по путь поиска файлов MATLAB.
Создайте вспомогательную функцию carrierToCount.m
упомянутый выше.
Задайте свойства Spark.
Использование containers.Map
объект для задания свойств Spark.
sparkProp = containers.Map(... {'spark.executor.cores',... 'spark.matlab.worker.debug'},... {'1',... 'true'});
Свойства Spark указывают на окружение выполнения Spark развертываемого приложения. Каждое приложение должно быть сконфигурировано с определенными свойствами Spark в порядок для его развертывания.
Для получения дополнительной информации о свойствах Spark разверните prop
значение 'SparkProperties'
Пара "имя-значение" в Входные параметры разделе SparkConf
класс.
Создайте SparkConf
объект.
Используйте matlab.compiler.mlspark.SparkConf классов
для создания SparkConf
объект. A SparkConf
объект хранит параметры конфигурации развертываемого приложения в Spark. Параметры конфигурации приложения передаются в кластер Spark через SparkContext.
conf = matlab.compiler.mlspark.SparkConf(... 'AppName', 'mySparkAppDepLocal', ... 'Master', 'local[1]', ... 'SparkProperties', sparkProp );
Для получения дополнительной информации о SparkConf смотрите matlab.compiler.mlspark.SparkConf
.
Создайте SparkContext
объект.
Используйте matlab.compiler.mlspark.SparkContext классов
с SparkConf
объект как вход для создания SparkContext
объект.
sc = matlab.compiler.mlspark.SparkContext(conf);
A SparkContext
объект служит точкой входа в Spark путем инициализации соединения с кластером Spark. Принимает SparkConf
объект как входной параметр и использует параметры, указанные в этом объекте, для настройки внутренних сервисов, необходимых для установления соединения с окружением выполнения Spark.
Для получения дополнительной информации о SparkContext смотрите matlab.compiler.mlspark.SparkContext
.
Создайте RDD
объект из данных.
Используйте функцию MATLAB datastore
для создания datastore
объект, указывающий на файл airlinesmall.csv
. Затем используйте метод SparkContext datastoreToRDD
для преобразования datastore
объект в RDD Spark
объект.
% Create a MATLAB datastore (LOCAL) ds = datastore('airlinesmall.csv',... 'TreatAsMissing','NA', ... 'SelectedVariableNames','UniqueCarrier'); % Convert MATLAB datastore to Spark RDD rdd = sc.datastoreToRDD(ds);
В целом входные RDD могут быть созданы с помощью следующих методов SparkContext
класс: parallelize
, datastoreToRDD
, и textFile
.
Выполните операции на RDD
объект.
Используйте метод Spark RDD, такой как flatMap
применить функцию ко всем элементам RDD
объект и выравнивание результатов. Функция carrierToCount
который был создан ранее, служит функцией, которая будет применяться к элементам RDD. Указатель на функцию carrierToCount
передается как входной параметр в flatMap
способ.
maprdd = rdd.flatMap(@carrierToCount); redrdd = maprdd.reduceByKey( @(acc,value) acc+value ); countdata = redrdd.collect(); % Count and display carrier occurrences count = 0; for i=1:numel(countdata) count = count + countdata{i}{2}; fprintf('\nCarrier Name: %s, Count: %d', countdata{i}{1}, countdata{i}{2}); end fprintf('\n Total count : %d\n', count); % Delete Spark Context delete(sc)
В целом, вы предоставите указатели на функции MATLAB или анонимные функции в качестве входных параметров в методы Spark RDD, известные как transformations и actions. Эти указатели на функцию и анонимные функции выполняются работниками развернутого приложения.
Список поддерживаемых преобразований и действий RDD см. в разделе «Преобразования и действия» в разделе «Методы» RDD
класс.
Для получения дополнительной информации о преобразованиях и действиях смотрите Apache Spark Basics.
Создайте автономное приложение.
Используйте mcc
команда со -m
флаг для создания автономного приложения. The -m
флаг создает стандартный исполняемый файл, который можно запускать из командной строки. The -a
флаг включает зависимый набор данных airlinesmall.csv
из папки <matlabroot>/toolbox/matlab/demos
. mcc
команда автоматически захватывает зависимый файл carrierToCount.m
пока он находится в одной рабочей папке.
>> mcc -m deployToSparkMlApiLocal.m -a <matlabroot>/toolbox/matlab/demos/airlinesmall.csv
mcc
команда создает оболочечный скрипт run_deployToSparkMlApiLocal.sh
чтобы запустить исполняемый файл deployToSparkMlApiLocal
.
Для получения дополнительной информации см. mcc
.
Запустите автономное приложение из интерпретатора Linux с помощью следующей команды:
$ ./run_deployToSparkMlApiLocal.sh /share/MATLAB/MATLAB_Runtime/v91 |
/share/MATLAB/MATLAB_Runtime/v91
является аргументом, указывающим местоположение MATLAB Runtime.
Перед выполнением вышеуказанной команды убедитесь в javaclasspath.txt
файл находится в той же папке, что и скрипт интерпретатора и исполняемый файл.
Ваше приложение не будет выполнено, если оно не может найти файл javaclasspath.txt
.
Ваше приложение также может не выполняться, если необязательная линия, содержащая папку с файлами строения Hadoop, отсутствует. Чтобы выполнить ваше приложение на local
диспетчер кластеров, эту линию необходимо прокомментировать. Эта линия должна быть без комментариев, если вы планируете запускать приложение с помощью yarn-client
в качестве менеджера кластеров на кластере Hadoop с поддержкой Spark.
Вы увидите следующий выход:
Carrier Name: 9E, Count: 521 Carrier Name: AA, Count: 14930 Carrier Name: AQ, Count: 154 Carrier Name: AS, Count: 2910 Carrier Name: B6, Count: 806 Carrier Name: CO, Count: 8138 ... ... ... Carrier Name: US, Count: 13997 Carrier Name: WN, Count: 15931 Carrier Name: XE, Count: 2357 Carrier Name: YV, Count: 849 Total count : 123523
Код:
Менеджер кластера с пряжей представляет кластер Hadoop с поддержкой Spark. В Hadoop 2.0 был представлен менеджер кластеров YARN. Он обычно устанавливается на тех же узлах, что и HDFS™. Поэтому запуск Spark на YARN позволяет Spark легко получить доступ к данным HDFS. В приложениях обозначается с помощью слова yarn-client
.
Начиная с шагов развертывания вашего приложения с помощью yarn-client
поскольку ваш менеджер кластеров похож на использование локального менеджера кластеров, показанного выше, шаги представлены с минимальным обсуждением. Для подробного обсуждения каждого шага, проверьте Локальный случай выше.
Примечание
Можно следовать тем же инструкциям по развертыванию приложений Spark, созданных с помощью MATLAB API для Spark на Cloudera® CDH. Чтобы увидеть пример на Answers™ MATLAB, нажмите здесь.
Чтобы использовать зоны шифрования Cloudera CDH, добавьте файл JAR commons-codec-1.9.jar
к статическому пути классов среды MATLAB Runtime. Расположение файла: $HADOOP_PREFIX/lib/commons-codec-1.9.jar
, где $ HADOOP _ PREFIX является местом установки Hadoop.
Начните этот пример, создав новую рабочую папку, которая видна по путь поиска файлов MATLAB.
Установите среду MATLAB Runtime в папку, доступную каждому рабочему узлу кластера Hadoop. Этот пример использует /share/MATLAB/MATLAB_Runtime/v91
как расположение папки MATLAB Runtime.
Если у вас нет MATLAB Runtime, вы можете скачать его с сайта в: https://www.mathworks.com/products/compiler/mcr
.
Скопируйте 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','/share/hadoop/hadoop-2.6.0')
The HADOOP_PREFIX
переменная окружения должна быть установлена при использовании MATLAB datastore
функция для указания данных на HDFS. Установка этого переменного окружения не имеет никакого отношения к Spark. Смотрите Отношения между Spark и Hadoop для получения дополнительной информации.
Задайте свойства 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://hadoop01glnxa64:54310/user/<username>/sparkdeploy'});
Для получения дополнительной информации о свойствах Spark разверните prop
значение 'SparkProperties'
Пара "имя-значение" в Входные параметры разделе SparkConf
класс.
Создайте SparkConf
объект.
Используйте matlab.compiler.mlspark.SparkConf классов
для создания SparkConf
объект.
conf = matlab.compiler.mlspark.SparkConf( ... 'AppName','myApp', ... 'Master','yarn-client', ... 'SparkProperties',sparkProperties);
Для получения дополнительной информации о SparkConf смотрите matlab.compiler.mlspark.SparkConf
.
Создайте SparkContext
объект.
Используйте matlab.compiler.mlspark.SparkContext классов
с SparkConf
объект как вход для создания SparkContext
объект.
sc = matlab.compiler.mlspark.SparkContext(conf);
Для получения дополнительной информации о SparkContext смотрите matlab.compiler.mlspark.SparkContext
.
Создайте RDD
объект из данных.
Используйте функцию MATLAB datastore
для создания datastore
объект, указывающий на файл airlinesmall.csv
в HDFS. Затем используйте метод SparkContext datastoreToRDD
для преобразования datastore
объект в RDD Spark
объект.
% Create a MATLAB datastore (HADOOP) ds = datastore(... 'hdfs:///user/<username>/datasets/airlinesmall.csv',... 'TreatAsMissing','NA',... 'SelectedVariableNames','UniqueCarrier'); % Convert MATLAB datastore to Spark RDD rdd = sc.datastoreToRDD(ds);
В целом входные RDD могут быть созданы с помощью следующих методов SparkContext
класс: parallelize
, datastoreToRDD
, и textFile
.
Выполните операции на RDD
объект.
Используйте метод Spark RDD, такой как flatMap
применить функцию ко всем элементам RDD
объект и выравнивание результатов. Функция carrierToCount
который был создан ранее, служит функцией, которая будет применяться к элементам RDD. Указатель на функцию carrierToCount
передается как входной параметр в flatMap
способ.
maprdd = rdd.flatMap(@carrierToCount); redrdd = maprdd.reduceByKey( @(acc,value) acc+value ); countdata = redrdd.collect(); % Count and display carrier occurrences count = 0; for i=1:numel(countdata) count = count + countdata{i}{2}; fprintf('\nCarrier Code: %s, Count: %d', countdata{i}{1}, countdata{i}{2}); end fprintf('\n Total count : %d\n', count); % Save results to MAT file save('countdata.mat','countdata'); % Delete Spark Context delete(sc);
Список поддерживаемых преобразований и действий RDD см. в разделе «Преобразования и действия» в разделе «Методы» RDD
класс.
Для получения дополнительной информации о преобразованиях и действиях смотрите Apache Spark Basics.
Создайте автономное приложение.
Используйте mcc
команда со -m
флаг для создания автономного приложения. The -m
флаг создает автономное приложение, которое можно запускать из командной строки. Вам не нужно присоединять набор данных airlinesmall.csv
поскольку он находится в HDFS. mcc
команда автоматически захватывает зависимый файл carrierToCount.m
пока он находится в одной рабочей папке.
>> mcc -m deployToSparkMlApiHadoop.m
mcc
команда создает оболочечный скрипт run_deployToSparkMlApiHadoop.sh
чтобы запустить исполняемый файл deployToSparkMlApiHadoop
.
Для получения дополнительной информации см. mcc
.
Запустите автономное приложение из интерпретатора Linux с помощью следующей команды:
$ ./run_deployToSparkMlApiHadoop.sh /share/MATLAB/MATLAB_Runtime/v91 |
/share/MATLAB/MATLAB_Runtime/v91
является аргументом, указывающим местоположение MATLAB Runtime.
Перед выполнением вышеуказанной команды убедитесь в javaclasspath.txt
файл находится в той же папке, что и скрипт интерпретатора и исполняемый файл.
Ваше приложение не будет выполнено, если оно не может найти файл javaclasspath.txt
.
Ваше приложение также может не выполняться, если необязательная линия, содержащая папку с файлами строения Hadoop, закомментирована. Чтобы выполнить приложение на диспетчере кластеров пряжи-клиента, эта линия должна быть без комментариев. Эту линию следует комментировать, только если вы планируете запускать приложение с помощью локального менеджера кластеров.
Вы увидите следующий выход:
Carrier Name: 9E, Count: 521 Carrier Name: AA, Count: 14930 Carrier Name: AQ, Count: 154 Carrier Name: AS, Count: 2910 Carrier Name: B6, Count: 806 Carrier Name: CO, Count: 8138 ... ... ... Carrier Name: US, Count: 13997 Carrier Name: WN, Count: 15931 Carrier Name: XE, Count: 2357 Carrier Name: YV, Count: 849 Total count : 123523
Примечание
Если развертываемое приложение является функцией MATLAB, в отличие от скрипта MATLAB, используйте следующий синтаксис выполнения:
$ ./run_<applicationName>.sh \ <MATLAB_Runtime_Location> \ [Spark arguments] \ [Application arguments]
$ ./run_deployToSparkMlApiHadoop.sh.sh \ /usr/local/MATLAB/MATLAB_Runtime/v91 \ yarn-client \ hdfs://host:54310/user/<username>/datasets/airlinesmall.csv \ hdfs://host:54310/user/<username>/result
Код: