У меня есть 2 файлы, хранящиеся на HDFS файловой системы:Ваши советы по работе Hadoop MapReduce
tbl_userlog:
<website url (non canonical)> <tab> <username> <tab> <timestamp>
- пример: www.website.com, foobar87, 201101251456
tbl_websites:
<website url (canonical)> <tab> <total hits>
- пример: website.com, 25889
Я написал последовательность Hadoop рабочих мест, которая соединяет 2 файла на веб-сайте, выполняет фильтр на сумму общих хитов> п на сайте и затем подсчитывает для каждого пользователя количество веб-сайтов, которые он посетил, которые имеют> n общих хитов. Подробная информация о последовательности являются следующей:
- карты только для работы, которая canonicizes URL-адреса в tbl_userlog (т.е. удаляет WWW, HTTP: // и https: // из поля URL)
- карты -только работа, которая сортирует tbl_websites на URL
- идентичность Map-Reduce работу, которая принимает выходной 2 предыдущих рабочих мест как KeyValueTextInput и подает их на CompositeInput для того, чтобы использовать Hadoop нативного соединения функции, определенный с
jobConf.set("mapred.join.expr", CompositeInputFormat.compose("inner" (...))
- A Map and Reduce job, которая фильтрует результат предыдущей работы по общим хитам> n на своей фазе карты, группирует результаты o n в фазе перетасовки и выполняет подсчет количества веб-сайтов для каждого пользователя на этапе «Уменьшение».
Чтобы связать эти шаги, я просто вызываю задания последовательно в описанном порядке. Каждое отдельное задание выводит результаты в HDFS, после чего последующее задание в цепочке затем извлекает и обрабатывает по очереди.
Как я новичок в Hadoop, я хотел бы попросить вашего консультирования:
- Есть ли лучший способ цепи эти рабочие места? В этой конфигурации все промежуточные результаты записываются в HDFS и затем считываются обратно.
- Вы видите какой-либо недостаток дизайна в этой работе, или его можно написать более элегантно, используя некоторую функцию Hadoop, которую я пропустил?
Я использую Apache Hadoop 0.20.2, и использование рамок более высокого уровня, таких как Pig или Hive, невозможно в рамках проекта.
Заранее благодарим за ваши ответы!
Какова цель алгоритма? Нужно ли находить количество веб-сайтов, которые посетили каждый пользователь, учитывая, что на веб-сайте есть число пользователей, количество которых составляет n? Кроме того, можете ли вы уточнить, какой должен быть этот вопрос? Вы ищете инструмент управления рабочими процессами (например, oozie, предложенный другим плакатом) или вы ищете подтверждение своего конкретного рабочего процесса? –
@Pradeep Gollakota: Да, цель задания - найти для каждого пользователя количество веб-сайтов, которые он посетил, которые имеют общие хиты> n. Я не ищу какой-либо инструмент управления (хотя я посмотрю на Oozie, что кажется многообещающим), я ищу только проверку моего конкретного рабочего процесса и дизайна. Мой вопрос, в частности, заключается в следующем: как бы вы разработали этот рабочий поток, используя только простой Hadoop_? – Namux