Hadoop DistributedCache не удалось сообщить о состоянии - PullRequest
2 голосов
/ 15 февраля 2012

в задании hadoop я отображаю несколько XML-файлов и фильтрую идентификатор для каждого элемента (из тегов ).Поскольку я хочу ограничить работу определенным набором идентификаторов, я читаю большой файл (около 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 используются для того, чтобы «эффективно распространять большие файлы только для чтения», я подумал, что вызывает сбой, и есть ли другой способ передачи соответствующих идентификаторов для каждого задания карты?

Спасибо, Стэн

1 Ответ

0 голосов
/ 17 мая 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...