Python и MapReduce: помимо основ, как выполнять больше задач в одной базе данных

У меня есть огромное хранилище данных txt, по которому я хочу собрать статистику.

Используя Hadoop-streaming и Python, я знаю, как реализовать MapReduce для сбора статистики по одному столбцу, например. подсчитайте, сколько записей есть для каждой из 100 категорий. Я создаю простые файлы mapper.py и reducer.py и подключаю их к команде hadoop-streaming как -mapper и -reducer соответственно.

Теперь я немного не понимаю, как на практике подойти к более сложной задаче: сбору различной статистики по различным другим столбцам в дополнение к категориям выше (например, географии, типам, датам и т. д.). Все эти данные находятся в тех же текстовых файлах.

Связывать ли задачи картографа/редьюсера вместе? Должен ли я передавать пары ключ-значение изначально долго (со всеми включенными данными) и «лишать» их интересных значений одно за другим во время обработки? Или это неверный путь? Мне нужен практический совет о том, как люди «склеивают» различные задачи MapReduce для одного источника данных из Python.


person dust    schedule 23.02.2015    source источник


Ответы (1)


Этот вопрос кажется мне очень общим. Цепочка из множества заданий по уменьшению карты является наиболее распространенным шаблоном для готовых к производству решений. Но как программист, мы всегда должны стараться использовать меньшее количество заданий MR для достижения наилучшей производительности (вы должны быть умны в выборе пар ключ-значение для заданий, чтобы сделать это), но, конечно, это зависит от сценарии использования. Некоторые люди используют различные комбинации заданий Hadoop Streaming, Pig, Hive, JAVA MR и т. д. для решения одной бизнес-задачи. С помощью любых инструментов управления рабочим процессом, таких как Oozie или скрипты bash, вы можете установить зависимости между заданиями. А для экспорта/импорта данных между RDBMS и HDFS вы можете использовать Sqoop.

Это самый простой ответ на ваш запрос. Если вы хотите получить дополнительное объяснение по какому-либо пункту, дайте мне знать.

person Ashish    schedule 27.02.2015
comment
Ашиш, спасибо за этот ответ. Да, вопрос должен был быть общим — я хотел знать, как разработчики справляются с такими ситуациями в реальном мире и есть ли один лучший подход. Вы подтвердили то, что я думал: нужно импровизировать, чтобы лучше всего соответствовать заданному сценарию, и склеивать несколько технологий вместе. Еще раз спасибо! - person dust; 27.02.2015