tez中的brocast join

    xiaoxiao2022-06-29  39

             环境:hive1.2.1 + hadoop2.7.2 + tez0.8.4   

          最近在使用tez的过程中发现,tez中提供了类似于hive on mr中的mapjoin的操作,叫做brocast join。对于小表join大表有很好的效果。

            看例子:

           

    set hive.execution.engine=tez; set hive.convert.join.bucket.mapjoin.tez=true; set hive.auto.convert.join=true; set hive.auto.convert.join.noconditionaltask = true; set hive.auto.convert.join.noconditionaltask.size =100000000; select count(*) from temp.dwd_flow_sdk_tv_video_play_day_data_agnes_agnes_play_hour_20160830 t1 inner join temp.dwd_flow_sdk_tv_video_play_day_data_agnes_agnes_action_hour_20160830 t2 on (t1.start_id = t2.start_id and t1.play_id = t2.play_id and t1.app_run_id = t2.app_run_id and t1.app_name = t2.app_name)      其中t1表是小表。

         这种情况下启用了hive的自动判断小表以及mapjoin的功能。效果如下:

         

           如果关闭mapjoin选项,运行效果如下

         因此,对于一些小表join大表并且有数据倾斜的任务,使用hive on tez的时候,可以利用broadcast join来提高效率。

          boradcast join的DAG图

           

                 正常情况下的DAG图:

                

              另外,hive on mr中判断小文件的参数hive.mapjoin.smalltable.filesize    貌似在hive on tez中并不生效,如果需要调大小文件的大小建议设置

      

    set hive.auto.convert.join.noconditionaltask = true; set hive.auto.convert.join.noconditionaltask.size =100000000;

             

    转载请注明原文地址: https://ju.6miu.com/read-1125038.html

    最新回复(0)