Поддерживаемая платформа: 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 Runtime в папку, доступную каждому рабочему узлу кластера Hadoop. Этот пример использует /usr/local/MATLAB/MATLAB_Runtime/v910
как расположение папки MATLAB Runtime.
Если у вас нет MATLAB Runtime, вы можете скачать его с сайта в: https://www.mathworks.com/products/compiler/mcr
.
Примечание
Для получения информации о номерах версий MATLAB Runtime, соответствующих релизам MATLAB, смотрите этот список.
Скопируйте функцию map maxArrivalDelayMapper.m
от /usr/local/MATLAB/R2021a/toolbox/matlab/demos
папка в рабочую папку.
Для получения дополнительной информации смотрите Запись функции Map.
Скопируйте функцию reduce maxArrivalDelayReducer.m
от
папка в рабочую папку.matlabroot
/ toolbox/matlab/demos
Для получения дополнительной информации см. Раздел «Запись функции сокращения».
Создайте каталог/user/
при HDFS™ и копировании файла <username>
/ наборы данныхairlinesmall.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 Runtime на каждом из рабочих узлов кластера, включите строку кода, подобную этой:
config = matlab.mapreduce.DeployHadoopMapReducer('MCRRoot','/opt/MATLAB/MATLAB_Runtime/v910');
/opt/MATLAB/MATLAB_Runtime
на рабочих узлах.Для получения информации об указании дополнительных свойств конкретного кластера смотрите matlab.mapreduce.DeployHadoopMapReducer
.
Примечание
Определение местоположения MATLAB Runtime как части класса matlab.mapreduce.DeployHadoopMapReducer
переопределяет любое место MATLAB Runtime, заданное во время выполнения автономного приложения.
Определите окружение выполнения с помощью 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 и повторно скомпилируйте приложение.
Считайте результат из получившегося datastore.
myAppResult = readall(result)
Используйте mcc
команда со -m
флаг для создания автономного приложения.
mcc -m depMapRedStandAlone.m
The -m
флаг создает стандартный исполняемый файл, который можно запускать из командной строки. Однако mcc
команда не может упаковать результаты в установщик.
Запустите автономное приложение из интерпретатора Linux с помощью следующей команды:
$ ./run_depMapRedStandAlone.sh /usr/local/MATLAB/MATLAB_Runtime/v910
/usr/local/MATLAB/MATLAB_Runtime/v910
является аргументом, указывающим местоположение MATLAB Runtime.
Перед выполнением вышеуказанной команды проверьте, что 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