Hive Sql优化记录

作者: 风筝flying | 来源:发表于2019-10-16 16:05 被阅读0次
    1. 日常检查ETLjob时发现一段sql采用hive on mr执行比hive on spark要快70%,与正常的认知正好相反,所以对该sql进行了详细分析。
      该SQL是一个主表left join多个子表(join key是一样的),分别查看了采用Hive执行和Spark执行的日志,具体如下:
    • Hive:只有一个Map Reduce过程,应该是在Map阶段同时读取了4张表的数据,然后在Reduce阶段同时做了多张表的join,只做了一次reduce side join。
    • Spark:实际的执行过程是join->join->join 的链式过程
      经查证,原因如下:
    • spark开启了adaptive模式,这个模式可以做自适应的优化,但是前提是需要拿到一些统计数据,开启了adaptive后,会一个个表的join去获取统计数据。如果关闭该模式后,是可以和hive一样在一个reduce中同时join多张表(多张表的join key是一样的);set spark.sql.adaptive.enabled=false;
    • spark在资源完全充足的情况下,瞬间获取资源的能力是不如hive的,可以通过参数调整,得到和hive类似的资源获取能力;set spark.dynamicAllocation.tasksPerExecutorSlot=1;

    相关文章

      网友评论

        本文标题:Hive Sql优化记录

        本文链接:https://www.haomeiwen.com/subject/dorumctx.html