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