#java #hadoop #cloud #mapreduce
#java #hadoop #облако #mapreduce
Вопрос:
Текущие методы установки / увеличения счетчиков hadoop принимают только long
значения.
например: increment(long incr)
и setValue(long value)
два метода, которые я извлек из Javadocs Hadoop.
Мое требование — хранить более сложный тип информации как часть счетчиков (в виде пар ключ / значение). Эта информация может включать (string, string)
пары ключ, значение.
Как мне добиться этого с помощью счетчиков Hadoop? Если это невозможно, существует ли какая-либо другая структура данных / средство в Hadoop / MR, которая позволяет хранить такую различную информацию, которую можно получить позже, Указав job_id и т. Д.
Спасибо, параметры
Ответ №1:
Счетчики работают, потому что подсчеты являются суммой подсчетов. Каждая задача имеет свой собственный счетчик, который может быть агрегирован выше. Строка не совсем имеет тот же тип информации (как вы увеличиваете строку?).
Проверьте ZooKeeper для этого. Он отлично подходит для хранения различной информации и координации между процессами. Вы можете создать znode, который представляет выполнение задания (возможно, job_id?), А Затем использовать отдельные строки в качестве дочерних элементов.
Комментарии:
1. 1. Будет ли масштабироваться ZK, если есть тысячи MR-задач, пишущих счетчики / строки? 2. Могут ли объекты храниться в ZK вместо строк?
2. ZK будет масштабироваться до тысяч, ОСОБЕННО если вы пишете в уникальные znodes (вместо обновления одного и того же). Нет, вы можете хранить только строки. Однако я обычно храню там сериализованные объекты (или JSON).
Ответ №2:
Поскольку счетчики Hadoop поддерживают только строки, пары ключ / значение можно использовать для сбора статистики с помощью OutputCollector.collect(K,V) в map и reduce функций.
Преимущество этого в том, что статистика из mapper с использованием OutputCollector может быть дополнительно обработана (например, агрегация) в функции reducer . Статистика из редуктора просто записывается в указанный формат вывода без какой-либо обработки.