【发布时间】:2013-10-25 13:31:37
【问题描述】:
我正在运行以下形式的配置单元查询:
INSERT OVERWRITE LOCAL DIRECTORY ...
SELECT /*+ MAPJOIN(...) */ * FROM ...
由于MAPJOIN,结果不需要reduce 阶段。映射阶段使用了大约 5000 个映射器,最终完成工作大约需要 50 分钟。事实证明,大部分时间都花在了将这 5000 个文件复制到本地目录上。
为了尝试优化这一点,我用SELECT DISTINCT * ... 替换了SELECT * ...(我提前知道我的结果已经不同,所以这实际上并没有改变我的结果),以便强制执行第二个 map reduce 工作.第一个 map reduce 作业和之前一样,有 5000 个 mapper 和 0 个 reducer。第二个 map reduce 作业现在有 5000 个 mapper 和 3 个 reducer。通过此更改,现在只需复制 3 个文件,而不是 5000 个,并且查询现在总共只需要大约 20 分钟。
由于我实际上不需要DISTINCT,我想知道是否可以在不使用DISTINCT 的情况下以不那么复杂的方式优化我的查询?
【问题讨论】: