Проблема при работе с hadoop при запуске задачи.
Настраивая по этому руководству hadoop http://www.michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-multi-node-cluster/ на действующих серверах, я обратил внимание что скорость выполнения задач не возросла, а появились ошибки.
Если вы видите примерно следующее сообщение в вашем логе:
11/12/02 14:22:10 WARN mapreduce.Job: Error reading task outputhttp://localhost:50060/tasklog?plaintext=true&attemptid=attempt_201112021419_0001_m_000003_1&filter=stdout
11/12/02 14:22:10 WARN mapreduce.Job: Error reading task outputhttp://localhost:50060/tasklog?plaintext=true&attemptid=attempt_201112021419_0001_m_000003_1&filter=stderr
11/12/02 14:22:27 INFO mapreduce.Job: map 100% reduce 22%
11/12/02 14:22:41 INFO mapreduce.Job: Task Id : attempt_201112021419_0001_m_000002_0, Status : FAILED
То это означает, что hadoop не может получить результаты от одной из машин (или если их много - то от нескольких).
К примеру, в моем случае, это был сам master, который я также использовал для map-reduce задач.
Подобная проблема в моем случае решилась установкой имени хоста в значение "master" в файле /etc/hosts
В начале, останавливаем кластер /usr/local/hadoop/bin/stop-all.sh (если вы стартовали вручную, то сами знаете как остановить ;)
Делаем:
sudo nano /etc/hostname
Пишем туда:
master
Затем:
sudo /etc/init.d/hostname.sh
(в некоторых случаях требуется, sudo /etc/init.d/hostname restart, по моему на одном Debian такое было)
Выходим/входим под юзером hduser. Заново стартуем кластер. Вуаля:
11/12/02 14:30:16 INFO mapreduce.Job: Running job: job_201112021429_0001
11/12/02 14:30:17 INFO mapreduce.Job: map 0% reduce 0%
11/12/02 14:30:29 INFO mapreduce.Job: map 33% reduce 0%
11/12/02 14:30:39 INFO mapreduce.Job: map 33% reduce 11%
11/12/02 14:30:42 INFO mapreduce.Job: map 66% reduce 11%
11/12/02 14:30:48 INFO mapreduce.Job: map 100% reduce 22%
11/12/02 14:30:54 INFO mapreduce.Job: map 100% reduce 100%
11/12/02 14:30:56 INFO mapreduce.Job: Job complete: job_201112021429_0001
11/12/02 14:30:56 INFO mapreduce.Job: Counters: 33
Это мои показатели для примера из настройки на кластере из двух машин.
UPDATE
Как подсказал мне Сергей Ярославцев, проблема может скрываться и в других местах, для этого лучше смотреть log hadoop
1) Если большое кол-во файлов на разделе, а hadoop работает под отдельным пользователем и группой, то просто может не хватать прав форкать tmp файлы
2) Можно поиграться с размерами файлов и параметров
Всегда можно глянуть сюда:
cat /var/log/hadoop/userlogs/attempt_
пример:
"This conf/slaves file lists the hosts, one per line"
Дело в том, что на файловой системе не для пользователя root и вообще есть системные ограничения, накладываемые архитектурой FS. Например (боюсь ошибиться, не вспомню навскидку). Но... 65536 файлов в директории
Например, в ext3 выделяется 655360 inodes на раздел и когда они кончаются, записать ничего нельзя.
Есть еще понятие тюнинга JVM
При больших обьемах лучше монтировать отдельный раздел с параметрами noatime, nodiratime
(noatime и nodiratime – отключение записи времени последнего доступа (для файлов/директорий))
Полезная ссылка по тюнингу http://software.intel.com/en-us/articles/hadoop-and-hbase-optimization-for-read-intensive-search-applications/
Комментарии
^______________________________^