Hadoop DistributedCache не смог сообщить о состоянии

В задании Hadoop я сопоставляю несколько XML-файлов и фильтрую идентификатор для каждого элемента (from < id>-tags). Поскольку я хочу ограничить задание определенным набором идентификаторов, я читаю в большом файле (около 250 миллионов строк в 2,7 ГБ, каждая строка имеет только целое число в качестве идентификатора). Поэтому я использую DistributedCache, анализирую файл в методе setup() Mapper с помощью BufferedReader и сохраняю идентификаторы в HashSet.

Теперь, когда я начинаю работу, я получаю бесчисленное количество

Task attempt_201201112322_0110_m_000000_1 failed to report status. Killing!

Перед выполнением любого задания карты.

Кластер состоит из 40 узлов, и поскольку файлы DistributedCache копируются на подчиненные узлы до того, как будут выполнены какие-либо задачи для задания, я предполагаю, что сбой вызван большим HashSet. Я уже увеличил mapred.task.timeout до 2000-х. Конечно, я мог бы увеличить время еще больше, но на самом деле этого периода должно хватить, не так ли?

Поскольку DistributedCache's используется для эффективного распространения больших файлов только для чтения, мне интересно, что вызывает здесь сбой и есть ли другой способ передать соответствующие идентификаторы каждому заданию карты?


person stan    schedule 15.02.2012    source источник


Ответы (1)


Можете ли вы добавить некоторые отладочные printlns в свой метод настройки, чтобы проверить, истекает ли время ожидания в этом методе (зарегистрируйте время входа и выхода)?

Вы также можете изучить возможность использования BloomFilter для хранения идентификаторов. Вероятно, вы можете сохранить эти значения в фильтре цветения размером 50 МБ с хорошим уровнем ложных срабатываний (~ 0,5%), а затем запустить дополнительное задание для выполнения секционированной проверки. против фактического эталонного файла.

person Chris White    schedule 17.05.2012