hive 优化总结 持续更新

hive 优化总结:


使用limit 的时候 可以只扫描部分文件:
<property>
  <name>hive.limit.optimize.enable</name>
  <value>true</value>
  <description>Whether to enable to optimization to
    try a smaller subset of data for simple LIMIT first.</description>
</property>
<property>
  <name>hive.limit.row.max.size</name>
  <value>100000</value>
  <description>When trying a smaller subset of data for simple LIMIT,
   how much size we need to guarantee each row to have at least.
  </description>
</property>
<property>
  <name>hive.limit.optimize.limit.file</name>
  <value>10</value>
  <description>When trying a smaller subset of data for simple LIMIT,
   maximum number of files we can sample.</description>
</property>



对于数据量比较小的查询,hive 尽量在本地执行
<property>
  <name>hive.exec.mode.local.auto</name>
  <value>true</value>
  <description>
    Let hive determine whether to run in local mode automatically
  </description>
</property>



 一般的hql包含多个执行阶段:  mapreduce stage , sampling stage, merge stage, limite stage 等
          hive 默认顺序执行stage,但是有的stage是不存在依赖关系的,可以设置成并行执行。
<property>
  <name>hive.exec.parallel</name>
  <value>true</value>
  <description>Whether to execute jobs in parallel</description>
</property>

下面这个参数默认是 8,适当的调大会提高hive作业运行速度,但是也会消耗更多资源
<property>
  <name>hive.exec.parallel.thread.number</name>
  <value>16</value>
</property>


介绍几个跟hive分区有关的配置:主要是在动态分区的时候可能会遇到,比如  分区数的大小可能会限制,注意要区分hive.exec.dynamic.partition.mode 和 hive.exec.max.dynamic.partitions


hive.exec.dynamic.partition

是否打开动态分区。

默认: false

hive.exec.dynamic.partition

是否打开动态分区。

默认: false


hive.exec.dynamic.partition.mode

打开动态分区后,动态分区的模式,有 strict 和 nonstrict 两个值可选,strict 要求至少包含一个静态分区列,nonstrict 则无此要求。

默认: strict


hive.exec.max.dynamic.partitions

所允许的最大的动态分区的个数。

默认: 1000


hive.exec.max.dynamic.partitions.pernode

单个 reduce 结点所允许的最大的动态分区的个数。

默认: 100


hive.cli.errors.ignore

表示在cli的情况下是否忽略错误。有时候通过 hive  -f  xxx 的时候,希望即使前面的sql有问题,后面的也要继续执行,可以将该参数设置成true

默认:false



你可能感兴趣的:(hive 优化总结 持续更新)