mapreduce
в кластере HadoopПрежде чем вы сможете запустить mapreduce
на Hadoop® убедитесь, что кластер и клиентская машина настроены правильно. Обратитесь к системному администратору или см. раздел Настройка кластера Hadoop (MATLAB Parallel Server).
При запуске mapreduce
на кластере Hadoop с двоичным выходом (по умолчанию), результат KeyValueDatastore
указывает на файлы Hadoop Sequence, вместо двоичных MAT-файлов, сгенерированных mapreduce
в других окружениях. Для получения дополнительной информации смотрите 'OutputType'
описание аргумента на mapreduce
страница с описанием.
При запуске mapreduce
в кластере Hadoop порядок пар "ключ-значение" в выходе отличается от порядка выполнения mapreduce
в других окружениях. Если ваше приложение зависит от расположения данных в выходе, необходимо отсортировать данные в соответствии с вашими собственными требованиями.
В этом примере показано, как изменить MATLAB® пример для вычисления средних задержек авиакомпаний для запуска на кластере Hadoop.
Во-первых, вы должны задать переменные окружения и свойства кластера как соответствующие для вашего конкретного строения Hadoop. Значения этих и других свойств, необходимых для отправки заданий в кластер, см. у системного администратора.
setenv('HADOOP_HOME', '/path/to/hadoop/install') cluster = parallel.cluster.Hadoop;
Примечание
Заданное outputFolder
не должен уже существовать. The mapreduce
выход из кластера Hadoop не может перезаписать существующую папку.
Вы потеряете свои данные, если mapreducer
изменяется или удаляется.
Создайте объект MapReducer, чтобы указать, что mapreduce
следует использовать кластер Hadoop.
mr = mapreducer(cluster);
Создайте и предварительный просмотр datastore. Набор данных доступен в
.matlabroot
/ toolbox/matlab/demos
ds = datastore('airlinesmall.csv','TreatAsMissing','NA',... 'SelectedVariableNames','ArrDelay','ReadSize',1000); preview(ds)
ArrDelay ________ 8 8 21 13 4 59 3 11
Далее укажите свою выходную папку, вывод outds
и звоните mapreduce
для выполнения на кластере Hadoop, заданном mr
. Функции map и reduce доступны в
.matlabroot
/ toolbox/matlab/demos
outputFolder = 'hdfs:///home/myuser/out1'; outds = mapreduce(ds,@myMapperFcn,@myReducerFcn,'OutputFolder',outputFolder); meanDelay = mapreduce(ds,@meanArrivalDelayMapper,@meanArrivalDelayReducer,mr,... 'OutputFolder',outputFolder)
Parallel mapreduce execution on the Hadoop cluster: ******************************** * MAPREDUCE PROGRESS * ******************************** Map 0% Reduce 0% Map 66% Reduce 0% Map 100% Reduce 66% Map 100% Reduce 100% meanDelay = KeyValueDatastore with properties: Files: { ' .../tmp/alafleur/tpc00621b1_4eef_4abc_8078_646aa916e7d9/part0.seq' } ReadSize: 1 key-value pairs FileType: 'seq'
Прочитайте результат.
readall(meanDelay)
Key Value __________________ ________ 'MeanArrivalDelay' [7.1201]
Хотя в демонстрационных целях этот пример использует локальный набор данных, вероятно, при использовании Hadoop ваш набор данных хранится в HDFS™ файловой системе. Кроме того, вы можете быть обязаны хранить mapreduce
выход в HDFS. Для получения дополнительной информации о доступе к HDFS в MATLAB, смотрите Работа с удаленными данными.