mapreduce в кластере HadoopПеред запуском mapreduce в кластере Hadoop ® убедитесь, что кластер и клиентский компьютер настроены правильно. Обратитесь к системному администратору или см. раздел Настройка кластера Hadoop (параллельный сервер MATLAB).
При выполнении mapreduce в кластере Hadoop с двоичным выходом (по умолчанию), KeyValueDatastore указывает на файлы последовательности Hadoop вместо двоичных MAT-файлов, созданных mapreduce в других средах. Дополнительные сведения см. в разделе 'OutputType' описание аргумента на mapreduce справочная страница.
При выполнении mapreduce в кластере Hadoop порядок пар ключ-значение в выходных данных отличается от текущего mapreduce в других средах. Если приложение зависит от расположения данных в выходных данных, необходимо сортировать данные в соответствии с собственными требованиями.
В этом примере показано, как изменить пример MATLAB ® для расчета средних задержек авиакомпаний в кластере Hadoop.
Во-первых, необходимо установить переменные среды и свойства кластера в соответствии с конкретной конфигурацией Hadoop. Значения этих и других свойств, необходимых для отправки заданий в кластер, см. у системного администратора.
setenv('HADOOP_HOME', '/path/to/hadoop/install') cluster = parallel.cluster.Hadoop;
Примечание
Указанное outputFolder не должно существовать. mapreduce выходные данные кластера Hadoop не могут перезаписать существующую папку.
Вы потеряете данные, если mapreducer изменяется или удаляется.
Создайте объект MapReducer, чтобы указать, что mapreduce должен использовать кластер Hadoop.
mr = mapreducer(cluster);
Создание и предварительный просмотр хранилища данных. Набор данных доступен в .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. Функции карты и сокращения доступны в .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 см. в разделе Работа с удаленными данными.