mapreduce
на кластере HadoopПрежде чем можно будет запустить mapreduce
на кластере Hadoop®, убедитесь, что кластер и клиентская машина правильно сконфигурированы. Консультируйтесь со своим системным администратором или смотрите, Конфигурируют Кластер Hadoop (MATLAB Parallel Server).
При выполнении 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);
Создайте и предварительно просмотрите 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, смотрите работу с Удаленными данными (MATLAB).