常见Hive调优策略

作者: 心_的方向 | 来源:发表于2017-09-24 18:43 被阅读268次

    Hive是否执行mapreduce

    因为有些sql语句是不需要走mapreduce的。比如:select *、limit。

    #在配置文件中hive-site.xml设置
    <name>hive.fetch.task.conversion</name>
    <value>more</value>

    Hive表创建的调优

    1. 是否创建分区表。(加快查询速率)
    2. 是否创建外部表。(多个部门使用时可以保证表的安全)
    3. 选择什么样的存储格式。(textFile,ORCFile,Parquet)
      • textFile:行存储格式
      • ORCFile:列存储格式(但是数据量太大,会被分会多个块)
      • Parquet:行存储格式,但是压缩性能更好

    Hive中JOIN语句的调优

    首先需要知道默认情况下,join操作是在reduce端进行的,因为通常情况下,要连接的表中的数据会分布在不同的map中处理,这样造成了即使同一个key对应的value可能存在不同的map中,所以必须要等到reduce中去连接。

    1. map join
      在有一个表为小表的情况下,可以把小表所有数据一次性读到每个map节点的内存中,然后进行join关联操作。这样省去了reduce操作运行的效率也会高很多。

    数据倾斜

    1. 引起数据倾斜的操作
      • Join,group by
    2. 本质原因
      key值分布不均匀,导致某些reduce的处理的数据量远远大于平均值。
    3. 表现
      任务进度长时间保持在一个值,查看监控页面的时候,发现只有一个或几个reduce子任务未完成。
    4. 解决方式
      • 大小表join:用map join,在map端完成join
      • 大大表join:对空值的key变成一个随机字符串,这样相同的空值key就分不到了不同的reduce中。
      • 讲倾斜的数据提出出来单独处理,最后union回去。

    相关文章

      网友评论

        本文标题:常见Hive调优策略

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