Поддерживаемая платформа: только Linux ®.
В этом примере показано, как создать автономное приложение MATLAB ® MapReduce с помощью mcc и запустите его в кластере Hadoop ®.
Цель: Рассчитать максимальную задержку прибытия авиакомпании из данного набора данных.
| Набор данных: | airlinesmall.csv |
| Описание: |
Информация о вылете и прилете авиакомпании из 1987-2008. |
| Расположение: | /usr/local/MATLAB/R2021a/toolbox/matlab/demos |
Начните этот пример с создания новой рабочей папки, видимой в пути поиска MATLAB.
Перед запуском MATLAB на терминале задайте переменную среды HADOOP_PREFIX указывает на папку установки Hadoop. Например:
| Shell | Команда |
|---|---|
| csh/tcsh | % setenv HADOOP_PREFIX /usr/lib/hadoop |
| удар | $ export HADOOP_PREFIX=/usr/lib/hadoop |
Примечание
В этом примере используется /usr/lib/hadoop в качестве каталога, в котором установлен Hadoop. Каталог установки Hadoop может отличаться.
Если вы забыли установить HADOOP_PREFIX переменная среды перед запуском MATLAB, настройте ее с помощью функции MATLAB setenv в командной строке MATLAB сразу после запуска MATLAB. Например:
setenv('HADOOP_PREFIX','/usr/lib/hadoop')
Установите среду выполнения MATLAB в папку, доступную каждому рабочему узлу кластера Hadoop. В этом примере используется /usr/local/MATLAB/MATLAB_Runtime/v910 в качестве расположения папки среды выполнения MATLAB.
Если у вас нет среды выполнения MATLAB, вы можете загрузить ее с веб-сайта по адресу: https://www.mathworks.com/products/compiler/mcr.
Примечание
Для получения информации о номерах версий среды выполнения MATLAB, соответствующих выпускам MATLAB, см. этот список.
Копирование функции карты maxArrivalDelayMapper.m от /usr/local/MATLAB/R2021a/toolbox/matlab/demos в рабочую папку.
Дополнительные сведения см. в разделе Запись функции карты.
Копирование функции сокращения maxArrivalDelayReducer.m от в рабочую папку.matlabroot/toolbox/matlab/demos
Дополнительные сведения см. в разделе Запись функции уменьшения.
Создание каталога /user/ при HDFS™ и копировании файла <username>/datasetsairlinesmall.csv в этот каталог. Здесь ссылается на имя пользователя в HDFS. <username>
$ ./hadoop fs -copyFromLocal airlinesmall.csv hdfs://host:54310/user/<username>/datasets
Запустите MATLAB и убедитесь, что HADOOP_PREFIX установлена переменная среды. В командной строке введите:
>> getenv('HADOOP_PREFIX')Если ans пуст, просмотрите раздел Предварительные условия выше, чтобы узнать, как можно установить HADOOP_PREFIX переменная среды.
Создание нового сценария MATLAB с именем depMapRedStandAlone.m. В этот файл сценария будет добавлен код, указанный ниже.
Создать datastore указывает на данные авиакомпании в распределенной файловой системе Hadoop (HDFS).
ds = datastore('hdfs:///user/username/datasets/airlinesmall.csv',... 'TreatAsMissing','NA',... 'SelectedVariableNames',{'UniqueCarrier','ArrDelay'});
Дополнительные сведения см. в разделе Работа с удаленными данными.
Настройте приложение для развертывания в Hadoop с параметрами по умолчанию.
config = matlab.mapreduce.DeployHadoopMapReducer;
Класс matlab.mapreduce.DeployHadoopMapReducer может использоваться для настройки автономного приложения на основе среды Hadoop, в которой оно будет развернуто.
Например, если необходимо указать расположение среды выполнения MATLAB на каждом из рабочих узлов кластера, включите строку кода, аналогичную следующей:
config = matlab.mapreduce.DeployHadoopMapReducer('MCRRoot','/opt/MATLAB/MATLAB_Runtime/v910');/opt/MATLAB/MATLAB_Runtime на рабочих узлах.Сведения об указании дополнительных свойств кластера см. в разделе matlab.mapreduce.DeployHadoopMapReducer.
Примечание
Указание местоположения среды выполнения MATLAB как части класса matlab.mapreduce.DeployHadoopMapReducer переопределяет любое расположение среды выполнения MATLAB, указанное во время выполнения автономного приложения.
Определите среду выполнения с помощью mapreducer.
mr = mapreducer(config);
Применить mapreduce функция.
result = mapreduce(... ds,... @maxArrivalDelayMapper,@maxArrivalDelayReducer,... mr,... 'OutputType','Binary', ... 'OutputFolder','hdfs:///user/<username>/results/myresults');
Примечание
Каталог HDFS, например .../myresults может быть записано в только один раз. Если вы планируете запустить автономное приложение несколько раз в кластере Hadoop, убедитесь, что вы удалили .../myresults каталог на HDFS перед каждым выполнением. Другой вариант - изменить имя .../myresults в коде MATLAB и перекомпилировать приложение.
Считывание результата из результирующего хранилища данных.
myAppResult = readall(result)
Используйте mcc с помощью команды -m для создания автономного приложения.
mcc -m depMapRedStandAlone.m
-m флаг создает стандартный исполняемый файл, который может быть запущен из командной строки. Тем не менее, mcc команда не может упаковать результаты в установщик.
Запустите автономное приложение из оболочки Linux с помощью следующей команды:
$ ./run_depMapRedStandAlone.sh /usr/local/MATLAB/MATLAB_Runtime/v910/usr/local/MATLAB/MATLAB_Runtime/v910 является аргументом, указывающим местоположение среды выполнения MATLAB.
Перед выполнением вышеуказанной команды убедитесь, что HADOOP_PREFIX переменная среды устанавливается в терминале путем ввода:
$ echo $HADOOP_PREFIX
echo появляется пустой, см. раздел Предварительные условия выше, чтобы увидеть, как можно установить HADOOP_PREFIX переменная среды.Приложение не будет выполнено, если HADOOP_PREFIX переменная среды не задана.
Вы увидите следующие выходные данные:
myAppResult =
Key Value
_________________ ______
'MaxArrivalDelay' [1014]Другие примеры map и reduce функции доступны по адресу toolbox/matlab/demos папка. Другие примеры можно использовать для прототипирования подобных автономных приложений, работающих в Hadoop. Дополнительные сведения см. в разделе Создание эффективных алгоритмов с помощью MapReduce.
Полный код для автономного приложения depMapRedStandAlone можно найти здесь:
datastore | KeyValueDatastore | matlab.mapreduce.DeployHadoopMapReducer | mcc | TabularTextDatastore