Я выполняю задание Hadoop с помощью Hive на самом деле, который, как предполагается, uniq
строки во многих текстовых файлах. На уменьшать шаге это выбирает последний раз запись с меткой времени для каждого ключа.
Hadoop гарантирует, что каждая запись с тем же ключом, произведенным шагом карты, перейдет к единственному редуктору, даже если много редукторов будут натыкаться на кластер?
Я волнуюсь, что вывод картопостроителя мог бы быть разделен после того, как перестановка происходит посреди ряда записей с тем же ключом.
Все значения ключа отправляются в один и тот же редуктор. См. Это Yahoo! учебник для более подробного обсуждения.
Такое поведение определяется разделителем и может быть неверным, если вы используете другой разделитель, отличный от установленного по умолчанию.
Вообще-то нет! Вы можете создать Partitioner
, который отправляет один и тот же ключ другому редуктору каждый раз, когда вызывается getPartition
. Это просто не очень хорошая идея для большинства приложений.
Да, Hadoop гарантирует, что все одинаковые ключи перейдут к одному и тому же редуктору. Это достигается с помощью функции разделения, которая объединяет ключи с помощью хэш-функции.
Для получения дополнительной информации о процессе разделения взгляните на это: Разделение данных
В нем конкретно говорится о том, как разные преобразователи, обрабатывающие один и тот же ключ, гарантируют, что все ключи с заданным значением попадают в один и тот же раздел. , и поэтому обрабатываются одним и тем же редуктором.