我正在hive中运行一个复杂的查询,当运行时,开始使用/tmp文件夹中的大量本地磁盘空间,并最终以空间错误结束,因为/tmp文件夹完全填满了中间map-reduce结果,因为提到的查询(/tmp文件夹创建在一个单独的分区中,有100 GB的空白空间)。运行时显示:
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
我有两个问题:
- 这可能是map-reduce作业消耗本地磁盘空间而不是hdfs/tmp文件夹的原因吗,就像pig脚本的典型情况一样?
- 如何使Hive在分布式模式下运行,给定当前设置?请注意,我在集群中使用的是MRV2,但上面的选项令人困惑,因为它们似乎与MRV1相关。作为一个新蜜蜂,我可能在这里错了。
任何帮助将非常感激!
事实证明我错过了最基本的东西。在所有节点中将HADOOP_MAPRED_HOME设置为/usr/lib/hadoop-mapreduce后,所有问题都解决了。