Поддерживаемая платформа: Linux® только.
Этот пример показывает вам, как создать автономное приложение MapReduce MATLAB® с помощью команды mcc
и запустить ее против кластера Hadoop®.
Цель: Вычислите максимальную задержку прибытия авиакомпании от данного набора данных.
Набор данных: | airlinesmall.csv |
Описание: |
Отъезд авиакомпании и информация о прибытии от 1987-2008. |
Местоположение : | /usr/local/MATLAB/R2019a/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/v96
в качестве местоположения папки MATLAB Runtime.
Если у вас нет MATLAB Runtime, можно загрузить его с веб-сайта в: https://www.mathworks.com/products/compiler/mcr
.
Для получения информации о номерах версий MATLAB Runtime соответствующие релизы MATLAB см. этот список.
Скопируйте функцию карты maxArrivalDelayMapper.m
от папки /usr/local/MATLAB/R2019a/toolbox/matlab/demos
до папки работы.
Для получения дополнительной информации смотрите Запись Функция Карты (MATLAB).
Скопируйте уменьшать функциональный maxArrivalDelayReducer.m
от папки
до папки работы.matlabroot/toolbox/matlab/demos
Для получения дополнительной информации смотрите Запись Уменьшать Функция (MATLAB).
Создайте директорию
на HDFS™ и скопируйте файл /user/<username>/datasets
airlinesmall.csv
в ту директорию. Здесь
относится к вашему имени пользователя в HDFS. <username>
$ ./hadoop fs -copyFromLocal airlinesmall.csv hdfs://host:54310/user/<username>/datasets |
Запустите MATLAB и проверьте, что переменная окружения HADOOP_PREFIX
была установлена. В командной строке введите:
>> getenv('HADOOP_PREFIX')
Если ans
пуст, рассмотрите раздел Prerequisites выше, чтобы видеть, как можно установить переменную окружения HADOOP_PREFIX
.
Создайте новый скрипт MATLAB с именем depMapRedStandAlone.m
. Вы добавите код, перечисленный на шагах, описанных ниже к этому файлу скрипта.
Создайте datastore
, который указывает на данные авиакомпании в Распределенной файловой системе Hadoop (HDFS).
ds = datastore('hdfs:///user/username/datasets/airlinesmall.csv',... 'TreatAsMissing','NA',... 'SelectedVariableNames',{'UniqueCarrier','ArrDelay'});
Для получения дополнительной информации смотрите работу с Удаленными данными (MATLAB).
Сконфигурируйте приложение для развертывания против Hadoop с настройками по умолчанию.
config = matlab.mapreduce.DeployHadoopMapReducer;
matlab.mapreduce.DeployHadoopMapReducer
класса может использоваться, чтобы сконфигурировать автономное приложение на основе среды Hadoop, где это будет развернутым.
Например, если вы хотите задать местоположение MATLAB Runtime на каждом из узлов рабочего на кластере, включайте строку кода, подобную этому:
config = matlab.mapreduce.DeployHadoopMapReducer('MCRRoot','/opt/MATLAB/MATLAB_Runtime/v96');
/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
Флаг -m
создает стандартный исполняемый файл, который может быть запущен из командной строки. Однако команда mcc
не может группировать результаты в инсталляторе.
Запустите автономное приложение от интерпретатора Linux с помощью следующей команды:
$ ./run_depMapRedStandAlone.sh /usr/local/MATLAB/MATLAB_Runtime/v96 |
/usr/local/MATLAB/MATLAB_Runtime/v96
является аргументом, указывающим на местоположение MATLAB Runtime.
До выполнения вышеупомянутой команды проверьте, что переменная окружения HADOOP_PREFIX
установлена в Терминале путем ввода:
$ echo $HADOOP_PREFIX
echo
подходит пустой, смотрите раздел Prerequisites выше, чтобы видеть, как можно установить переменную окружения HADOOP_PREFIX
.Ваше приложение не выполнится, если переменная окружения HADOOP_PREFIX
не будет установлена.
Вы будете видеть следующий вывод:
myAppResult = Key Value _________________ ______ 'MaxArrivalDelay' [1014]
Другие примеры map
и функций reduce
доступны в папке toolbox/matlab/demos
. Можно использовать другие примеры, чтобы моделировать подобные автономные приложения, которые запускаются против Hadoop. Для получения дополнительной информации смотрите Сборку Эффективные Алгоритмы с MapReduce (MATLAB).
Полный код для автономного приложения depMapRedStandAlone
может быть найден здесь:
KeyValueDatastore
| TabularTextDatastore
| datastore
| matlab.mapreduce.DeployHadoopMapReducer
| mcc