Ваш совет относительно работы Hadoop MapReduce - PullRequest
0 голосов
/ 27 февраля 2012

В файловой системе HDFS хранятся 2 файла:

  • tbl_userlog: <website url (non canonical)> <tab> <username> <tab> <timestamp>

    • пример: www.website.com, foobar87, 201101251456
  • Веб-сайты tbl: <website url (canonical)> <tab> <total hits>

    • пример: website.com, 25889

Я написал последовательность заданий Hadoop, которая объединяет 2 файла на веб-сайте, выполняет фильтрацию общего количества посещений> n для каждого веб-сайта, а затем подсчитывает для каждого пользователя количество посещенных веб-сайтов, на которых> n Всего хитов. Детали последовательности следующие:

  1. Задание только для карты, которое канонизирует URL в tbl_userlog (т.е. удаляет www, http: // и https: // из поля url)
  2. Работа только для карты, которая сортирует tbl_websites по URL
  3. Идентификационное задание Map-Reduce, которое принимает выходные данные двух предыдущих заданий как KeyValueTextInput и передает их в CompositeInput для использования собственной функции соединения Hadoop, определенной с jobConf.set("mapred.join.expr", CompositeInputFormat.compose("inner" (...))
  4. Задание Map and Reduce, которое фильтрует результат предыдущего задания по общему количеству обращений> n на этапе Map, группирует результаты на этапе перетасовки и выполняет подсчет количества веб-сайтов для каждого пользователя в Уменьшить фазу.

Чтобы связать эти шаги, я просто вызываю задания последовательно в описанном порядке. Каждое отдельное задание выводит свои результаты в HDFS, которую затем извлекает и обрабатывает следующее задание в цепочке.

Поскольку я новичок в Hadoop, я хотел бы попросить вас проконсультироваться:

  1. Есть ли лучший способ связать эти задания? В этой конфигурации все промежуточные результаты записываются в HDFS и затем читаются обратно.
  2. Видите ли вы какой-либо недостаток дизайна в этой работе, или его можно было бы написать более элегантно, используя некоторые функции Hadoop, которые я пропустил?

Я использую Apache Hadoop 0.20.2, и использование высокоуровневых фреймворков, таких как Pig или Hive, невозможно в рамках проекта.

Заранее спасибо за ваши ответы!

Ответы [ 2 ]

0 голосов
/ 01 марта 2012

Я думаю, что у вас будет работать с парой предостережений. Прежде чем я начну перечислять их, я хочу прояснить два определения. Задание только для карты - это задание, для которого задан Mapper и выполняется с 0 редукторами. Если задание выполняется с> 0 IdentityReducers, то это задание не только для карты. Задание только для сокращения - это задание, которое имеет определенный редуктор и выполняется с IdentityMapper.

  1. Ваша первая работа может выполняться только на карте, поскольку все, что вы делаете, - это канонизация URL-адресов. Но если вы хотите использовать CompositeInputFormat, вы должны работать с IdentityReducer с более чем 0 редукторами.
  2. Что касается твоей второй работы, я не знаю, что ты имеешь в виду под «работой только по карте». Сортировка по самой своей природе является дополнительной побочной задачей. Вы, вероятно, имеете в виду, что у него есть определенный Mapper, но нет Reducer. Но для того, чтобы URL-адреса были отсортированы, вы должны запустить с IdentityReducer с более чем 0 редукторами.
  3. Ваша третья работа - интересная идея, но вы должны быть осторожны с CompositeInputFormat. Есть два условия, которые должны быть выполнены, чтобы вы могли использовать этот формат ввода. Во-первых, в обоих входных каталогах должно быть одинаковое количество файлов. Это может быть достигнуто путем установки одинакового количества редукторов для Job1 и Job2. Второе условие - входные файлы НЕ МОГУТ быть разделяемыми. Это может быть достигнуто с помощью нерасщепляемого сжатия, такого как bzip.
  4. Эта работа звучит хорошо. Хотя вы можете отфильтровать веб-сайт, у которого

Очевидно, что есть несколько вариантов решения проблемы в программном обеспечении, поэтому, пока ваше решение будет работать, я бы не рекомендовал его. ИМХО иметь 4 задания MapReduce для этой задачи немного дороже. Реализация, которую я имею в виду, - это рабочий процесс M-R-R, который использует вторичную сортировку.

0 голосов
/ 28 февраля 2012

Что касается цепочки заданий, вы должны взглянуть на Oozie, который является менеджером рабочего процесса.Я еще не использовал его, но вот с чего бы начать.

...