Jeffrey Cross
Jeffrey Cross

Написать работу Hadoop MapReduce на любом языке программирования

Hadoop - это распределенная среда приложений и хранилищ на основе Java, разработанная для работы на тысячах обычных компьютеров. Вы можете думать об этом как о приближении открытого источника поисковой инфраструктуры Google. Yahoo !, на самом деле, запускает многие компоненты своих поисковых и рекламных продуктов на Hadoop, и не удивительно, что они вносят основной вклад в проект.

MapReduce - это метод написания программного обеспечения, которое можно распараллеливать на тысячах машин для обработки огромных объемов данных. Например, допустим, вы хотите подсчитать количество рефералов по доменам во всех журналах сервера Apache в мире. Вот суть того, как вы это сделаете:

  1. Получите весь мир, чтобы загрузить свои журналы сервера в вашу гигантскую распределенную файловую систему. Вы можете автоматизировать и приблизить это к тому, чтобы каждый веб-администратор добавил на свой сайт некоторый код javascript, который заставляет браузеры посетителей пинговать ваш собственный сервер, в результате чего получается один гигантский файл журнала из всех журналов сервера в мире. Ваша файловая система - HDFS, распределенная файловая система Hadoop, которая обрабатывает разбиение и репликацию этого огромного файла между всеми узлами кластера.
  2. Разбейте крупнейший в мире файл журнала на крошечные кусочки, и ваши тысячи кластерных машин будут анализировать их в поисках источников ссылок. Это фаза «Карта». Каждый чанк обрабатывается, и ссылки, найденные в этом чанке, выводятся обратно в систему, где хранятся выходные данные, заданные по имени хоста ссылающегося. Назначения чанков оптимизированы так, что узлы кластера будут обрабатывать чанки данных, которые хранятся в их локальном фрагменте распределенной файловой системы.
  3. Наконец, все выходные данные на этапе карты сопоставляются. Это называется фазой «Уменьшить». Узлам кластера назначается ключ имени хоста, который был создан во время фазы карты. Все выходные данные для этого ключа считываются узлом и подсчитываются. Затем узел выводит один результат, который является доменным именем реферера, и общее количество рефералов, которые были получены от этого реферера. Это делается сотни тысяч раз, по одному разу для каждого домена-реферера и распределяется по тысячам узлов кластера.

В конце этого гипотетического задания MapReduce у вас будет краткий список каждого домена, на который ссылается трафик, и количество подсчитанных им рефералов. Что хорошо в Hadoop и MapReduce, так это то, что он делает написание распределенных приложений, как это, на удивление простым. Две функции для выполнения примера разбора реферера могут содержать всего около 20 строк кода. Hadoop решает огромные проблемы распределенного хранения и обработки, позволяя вам сосредоточиться на конкретной задаче.

Поскольку Hadoop написан на Java, естественным способом создания распределенных заданий является инкапсуляция функций Map и Reduce в класс java. Если вы не являетесь наркоманом Java, не беспокойтесь, есть оболочка для работы, называемая HadoopStreaming, которая может взаимодействовать с любой программой, которую вы пишете, с обычными STDIN и STDOUT. Это позволяет вам написать свою распределенную работу на Perl, Python или даже в скрипте оболочки! Вы создаете две программы, одну для маппера и одну для редуктора, а HadoopStreaming обрабатывает их загрузку на все узлы кластера и передачу данных в ваши программы и из них.

Если вы хотите поиграть с этим, я действительно рекомендую пару статей, написанных немецким хакером Michael G. Noll. Он собрал пошаговое руководство по настройке и запуску Hadoop в Ubuntu, а также хорошее введение в написание программы MapReduce с использованием HadoopStreaming (на примере Python).

Читатели Hackszine используют Hadoop? Дайте нам знать, что вы делаете, и укажите нам больше информации в комментариях.

Hadoop Запуск Hadoop в Ubuntu Linux Написание программы Hadoop MapReduce на Python

Поделиться

Оставить комментарий