hive mapjoin
insert overwrite table crosstest select /*+MAPJOIN(a)*/ a.ra,a.dec,b.ra,b.dec from rosat2rc a join tycho2rc b on (a.dec>83 and a.dec<93 and b.dec>83 and b.dec<93) where 3.5*3.5/1200/1200>((a.ra-b.ra)*cos((a.dec+b.dec)*3.14/180/2))*((a.ra-b.ra)*cos((a.dec+b.dec)*3.14/180/2))+(a.dec-b.dec)*(a.dec-b.dec)
当要连接的两个表其中一个表非常小的时候,可以考虑使用mapjoin。mapjoin会将小表拷贝到每个运行map的节点上,并将其cache到内存中,然后在map阶段连接大表。由于省去了reduce过程,效率会提高不少。使用mapjoin之后,join会执行两个map-reduce Job,不用mapjoin则只有一个。问了下少杰,原来hive.merge.mapfiles这个参数设置为true了。因为只有map而没有reduce,map的数量又不好控制,可能导致大量的map任务,这样会生成许多文件。hive.merge.mapfiles为true时,会启动另外一个map-reduce Job来合并小文件。
common join 则只有一个mapreduce任务,map扫描排序表数据,reduce进行join操作。
相关推荐
archive 2020-07-30
成长之路 2020-07-28
eternityzzy 2020-07-19
taisenki 2020-07-05
tugangkai 2020-07-05
SignalDu 2020-07-05
zlsdmx 2020-07-05
tomson 2020-07-05
tugangkai 2020-07-04
tomson 2020-07-05
Zhangdragonfly 2020-06-28
genshengxiao 2020-06-26
成长之路 2020-06-26
tomson 2020-06-26
蜗牛之窝 2020-06-26
成长之路 2020-06-25