Hive SQL执行原理

Hive SQL的基本模式可以分为三类:

  • select语句:比如select order _id, buyer_id,cate_name from orders_table where day=' 20170101' and cate_name=’ iphone7';,实际中where条件可能更为复杂并且会有and/or等各种组合。Hive SQL是被翻译成MapReduce任务执行的,所以Hive SQL的执行阶段和MapReduce任务执行过程是一样的,也分为分片、Map阶段、Shuffle阶段、Reduce阶段。

    • 分片:一般来说订单表通常会进行分区,Hadoop会将分区day=20170101的分区文件根据文件大小进行分片。
    • Map阶段:集群根据分片个数启动相应个数的Map任务,每个Map任务接收自己的分片文件,并在Map函数中逐行对输入文件进行检查,如果不符合条件,则直接过滤,并将符合条件的数据保存到本地文件中。
    • Shuffle和Reduce阶段:此SQL任务不涉及数据的重新分发和发布,不需要启动任何的Reduce任务。
    • 输出文件:Hadoop直接合并Map任务的输出文件到输出目录。
  • group by语句:比如Select city,count(oder id) as iphone7 count from orders table where day='20170101' and cate name='iphone7'group by city;。Hive SQL的group by语句涉及数据的重新分发和发布,因此其执行过程完整地包含了MapReduce任务的执行过程。

    图片来源于《离线和实时大数据开发实战》

    • 分片:其分片过程和select语句相同。
    • Map阶段:集群根据分片个数启动相应个数的Map任务,每个Map任务接收自己的分片文件,并在Map函数中逐行对输入文件进行检查,如果不符合条件,则直接过滤,如果符合条件,则输出形如<city, 1>的键值对。
    • Combiner阶段:Combiner阶段是可选的,如果指定了Combiner操作,那么Hadoop会在Map任务的本地输出中执行Combiner操作,其好处是可以去除冗余输出,避免不必要的后续处理和网络传输开销。例如,Map Task1中<hz, 1>出现了两次,那么Combiner操作就可以将其合并为<hz, 2>。
    • Shuffle阶段:经历完整的Shuffle阶段分为分区(partition)、排序(sort)、分隔(spill)、归并(merge)、排序(sort)。
    • Reduce阶段:调用reduce函数将键值对进行汇总,每个Reduce任务的输出存到本地文件中。
    • 输出文件:Hadoop合并Reduce Task任务的输出文件到输出目录。
  • join语句:即连接两个表,实际中也可能连接多个表,比如下面的SQL语句:

    Select tl.order_id,tl.buyer_id,t2.age 
    From 
    select order id,buyer id 
    from orders table 
    where day='20170101' and cate_name='iphone7' 
    ) tl 
    Join 
    select buyer_id,age from buyer_table where buyer_status ='有效'
    ) t2 
    On tl.buyer_id=t2.buyer_id ;
    

    上面的join SQL在Hadoop集群中会被拆分成三个MapReduce任务:

    • 第一个MapReduce任务:t1表部分,具体过程和select语句类似,不过此时的输出文件仅包含order_id和buyer_id列。

    • 第二个MapReduce任务:t2表部分,具体过程和select语句类似,不过此时的输出文件仅包含buyer_id和age列。

    • 第三个MapReduce任务:t1和t2表join过程,其执行过程为:

      图片来源于《离线和实时大数据开发实战》

      • 分片:join语句的输入文件包括第一个MapReduce任务和第二个MapReduce任务的输出文件,然后Hadoop会对两个输出文件根据文件大小进行分片。
      • Map阶段:对两个输出文件的分片结果数据启动相应数目的Map Task处理数据。
      • Shuffle阶段:经历完整的Shuffle阶段分为分区(partition)、排序(sort)、分隔(spill)、归并(merge)、排序(sort)。
      • Reduce阶段:join语句的Reduce过程,是根据join键值将其他列关联起来的过程,比如对于buyer_id=222的列,Map Taskl-1 order_id=l003 buyer_id=222 的行会被分发到 Reduce Taskl 上,Map Task2-1 buyer_id=222 age=25 的列也会被分发到 Reduce Taskl 上(因为它们的buyer_id 都等于222 ),此时 Reduce Taskl 就根据 buyer_id 将它们的值关联合并成一行,并入本地的输出文件中。
      • 输出文件:Hadoop合并Reduce Task任务的输出文件到输出目录。
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GraysonWP

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值