awh*_*han 5 sql hadoop hive bigdata
WRT由c3.2xlarge实例组成的3节点集群.
我有两张桌子.表U有大约6500万条记录,包含纬度和经度等字段.表L有大约100万条记录,还包含纬度和经度.
U存储为ORC表.
任务是确定有多少U记录落在L的10英里半径范围内.
select l.id, count(u.id) from U u, L l where 3960 *
acos(cos(radians(l.lat)) * cos(radians(u.lat)) * cos(radians(l.long) -
radians(u.long)) + sin(radians(l.lat)) * sin(radians(u.lat))) < 10.0
group by l.id;
Run Code Online (Sandbox Code Playgroud)
该位3960 * acos(cos(radians(l.lat)) * cos(radians(u.lat)) *
cos(radians(l.long) - radians(u.long)) + sin(radians(l.lat)) *
sin(radians(u.lat))) < 10.0只是纬度/长度对之间的距离应小于10英里约束.
问题:查询似乎需要永远完成.虽然地图阶段相对较快地完成,但减少阶段会以某个固定百分比(80%ish)停滞
我在Hive发出的输出消息中注意到了这一点.编译时确定的减少任务数:1
我尝试通过将mapred.reduce.tasks设置为7来增加reducer的数量, 但它总是最终为1.我没有成功增加reducers的数量.
这个答案 似乎表明,如果我以不同的方式编写查询,那么我可以强制使用1个以上的reducer.但我还没能做到.
执行时间估计:对于L中的单个位置,获得答案大约需要60秒.通过该帐户,它应该需要6000万秒,大约700天!应该花这么多时间吗?即使是Hadoop.
我也尝试过将附加条件限制在一个10英里乘10英里见方的盒子中,L在盒子中心的位置,但现在花费的时间是40秒,这不是一个巨大的进步.
问题:
1)如何强制减少更多的减速器?2)是否有更好的(在执行时间方面)查询?3)任何其他建议,将帮助我解决这个问题.
版本: Hadoop - 2.7.0 Java 1.7.0_80 Hive 1.2.1
如果您使用 Hadoop 2,指定化简器的正确方法是:
SET mapreduce.job.reduces=7;
这与 Hadoop 2 中所做的更改有关。我有与您描述的相同的行为,更新为上述命令,并成功设置了reduce 任务。我不确定 Hadoop 如何选择所需的减速器数量,但在某些情况下它似乎确实很小,这可能会导致显着的性能滞后。
| 归档时间: |
|
| 查看次数: |
959 次 |
| 最近记录: |