我正在运行以下形式的配置单元查询:
INSERT OVERWRITE LOCAL DIRECTORY ...
SELECT /*+ MAPJOIN(...) */ * FROM ...
由于MAPJOIN
,结果不需要减少阶段。映射阶段使用大约 5000 个映射器,最终完成工作大约需要50 分钟。事实证明,大部分时间都花在了将这 5000 个文件复制到本地目录上。
为了尝试优化这一点,我替换SELECT * ...
为SELECT DISTINCT * ...
(我事先知道我的结果已经不同,所以这实际上并没有改变我的结果),以强制执行第二个 map reduce 工作。第一个 map reduce 作业和之前一样,有 5000 个 mapper 和 0 个 reducer。第二个 map reduce 作业现在有 5000 个 mapper 和 3 个 reducer。有了这个改变,现在只需要复制 3 个文件,而不是 5000 个,查询现在总共只需要大约20 分钟。
由于我实际上并不需要DISTINCT
,我想知道我的查询是否可以在不使用DISTINCT
?