我在 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 文件夹上的空间的原因吗,就像猪脚本通常的情况一样?
- 给定当前设置,如何使 Hive 在分布式模式下运行?请注意,我在集群中使用 MRV2,但上述选项令人困惑,因为它们似乎与 MRV1 相关。作为新手,我在这里可能是错的。
任何帮助都感激不尽!