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