Hive работает в локальном режиме, занимая слишком много места на локальном диске /tmp
Я выполняю сложный запрос в кусте, который при запуске начинает использовать огромное количество локального дискового пространства в папке /tmp и в конечном итоге заканчивается ошибкой пространства, поскольку папка /tmp полностью заполняется промежуточными результатами map-уменьшает, потому что указанного запроса (папка /tmp создается в отдельном разделе, имеющем 100 ГБ свободного места). Во время работы он говорит:
Execution completed successfully
MapredLocal task succeeded
Launching Job 1 out of 3
Number of reduce tasks is set to 0 since there's no reduce operator
Job running in-process (local Hadoop)
Как вы можете видеть выше, Hive каким-то образом работает в локальном режиме. Проведя некоторые исследования в сети, я проверил несколько соответствующих параметров и ниже приведены результаты:
hive> set hive.exec.mode.local.auto;
hive.exec.mode.local.auto=false
hive> set mapred.job.tracker;
mapred.job.tracker=local
hive> set mapred.local.dir;
mapred.local.dir=/tmp/hadoop-hive/mapred/local
Итак, у меня есть два вопроса по этому поводу:
- Может ли это быть причиной того, что задания сокращения карты занимают место на локальном диске, а не в папке hdfs /tmp, как это обычно происходит в сценариях pig?
- Как заставить Hive работать в распределенном режиме, учитывая текущие настройки? Пожалуйста, обратите внимание, что я использую MRV2 в кластере, но приведенные выше варианты сбивают с толку, поскольку они, похоже, актуальны для MRV1. Я могу ошибаться, будучи новичком.
Любая помощь будет высоко ценится!
1 ответ
Оказывается, мне не хватало самого необходимого. После установки HADOOP_MAPRED_HOME в /usr/lib/hadoop-mapreduce во всех узлах все проблемы были исправлены.