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, смотрите Работа с удаленными данными.