2014-02-01 6 views
1

Я новичок в hadoop и недавно познакомился с технологией MapReduce. Это впечатляет, однако я абсолютный новичок в решении тренировки для проблемы с mapreduce. Любая помощь в правильном направлении была бы оценена. У меня есть логический подход со мной, но я не знаю, как сопоставить его с хаопом.Как найти логин с использованием hadoop mapreduce

Описание проблемы: Мне нужно найти Login Duration на каждом сервере в моей организации. Входы: Есть две вкладки значений, разделенных файлы, предоставленные в качестве входных данных со следующей структурой:

File1: 
UserName Timestamp     serverid 
CMXO001 02-Jan-2014 12:00:00.234567 HP0012XP023 
CMXO001 02-Jan-2014 12:10:20.234567 HP0012XP023 

Выше файл содержит логин и corressponding выхода из системы записи, которые могут быть в любом порядке в файле ввода.

File2: 
ServerId ServerName 
HP0012XP023 HP XP Server London 

Мы должны написать работу Hadoop MapReduce выполнить следующие действия:

1: Узнайте, логины выполняется каждый день для каждого сервера [нет необходимости имени сервера] Ожидаемый результат: Дата LoginCount сервера 91 -01-2014 HP0012XP023 1

2: Узнайте, общее время входа в систему [общее время соединения] для каждого пользователя во всем наборе данных для каждого сервера

expected output: 
Date  ServerName   User Durationfor that day 
10/01/14 HP XP Server London CMXO001 10:20 

3: Найдите, какие пользователи подключили сеанс входа в систему более 1 часа, по крайней мере, 5 раз в месяц.

Expected output: 
Username Times 
CMXO001 12 

ответ

0

Вот решения для ваших задач 3:

  1. Вашей Mappers работает на File1. На каждой входной записи (строка) Функция карты извлекает день из метки времени и объединяет ее с сервером для получения выходного ключа. Выходное значение равно 1, поэтому вывод Mapper (day-serverId, 1). Редукторы просто суммируют значения для каждого day-serverId - точно так же, как в примере Wordcount (который является «Hello World» для Hadoop - https://hadoop.apache.org/docs/r1.2.1/mapred_tutorial.html#Example%3A+WordCount+v1.0).

  2. Ваши Mappers работают над File1. На каждой входной записи (строка) Проблемы с функцией карты: key = UserName-Date-ServerId, value = Time. Редукторы получают два значения времени для каждого ключа, вычисляют продолжительность и выдают ожидаемый результат. Как редукторы переводят ServerId на имя сервера? Вы должны отправить File2 в Reducers, используя функцию DistributedCache Hadoop. Редукторы будут читать этот файл в функции Setup и сохранять отображение в памяти.

  3. Здесь вы используете цепочку из двух заданий MapReduce. Во-первых, вы вычисляете продолжительность входа для каждого пользователя, за каждый день, как и в задаче «2.». Выход будет входным для второго задания MapReduce. Во втором задании Mappers выдают вывод следующим образом: key = userId, value = 1 - но только для входной записи с длительностью> 1h. Mappers не выдадут никаких результатов для других записей. Редукторы будут выполнять численное суммирование точно так же, как в задаче «1.»

+0

Это звучит как очень хороший подход. Я собираюсь попробовать это и предоставить обратную связь. – cbm

+0

Спасибо за помощь Евгения, ты указал в правильном направлении. Были икоты в использовании распределенного кеша и других функций, но это не мешало сделать это.Функции, связанные с распределенным кэшем, устарели и не очень помогают в нем или могут быть я новыми :) – cbm

+0

Распределенный кеш - одна из самых полезных функций Hadoop MapReduce. Я думаю, вы посмотрели org.apache.hadoop.filecache.DistributedCache из старого API Hadoop. Я рекомендую вам прочитать о распределенном кэше в полном справочнике Hadoop от Tom White (3-е издание!). –

Смежные вопросы