hive 调优,
hive 本地模式
根据数据量的大小,可以开启hive的本地模式:hive.exec.mode.local.auto
该参数的默认值为false。
也可以把该属性配置到hive-site.xml中。
hive并行执行
hive并行执行,hive可以把一个查询转化成一个或者多个阶段,这些阶段并不是完全相互依赖的,也就是说有些阶段是可以并行执行的,这样就可以使整个job的执行时间变短。通过设置参数 mapred.exec.parallel 参数的值为true,就可以开启job的并行执行。
hive严格模式
如果要防止用户执行那些可能产生意想不到的查询的行为,可以设置参数 hive.mapred.mode 为strict。通过设置 set hive.mapred.mode=strict。可以禁止用户3中行为。
1:对于分区表,除非where子句中有分区字段的查询限制,负责不允许执行。
2:对于order by 语句必须增加limit限制,防止reduce界面额外执行很长的时间。
3:限制笛卡尔积的查询,join 语句中必须有on条件限制,负责不允许执行。
调整mapper,reducer个数
hive把查询划分成一个或者多个mapreduce任务达到并行的目的。确定合适的mapper,reducer个数,需要参考数据的数据量大小,以及执行的操作。
hive.exec.reducers.bytes.per.reducer 这个参数也可以控制reduce 的个数。
mapred.reduce.tasks
可是吧reduce个数设置为一个固定的值。
hive.exec.reducers.max 可以这是job最大允许的task的个数。
多个group by 组装到多个mapredec任务中 通过这是 hive.mulitgroupby.singlemr 参数为true。(如果这些group by 中使用相同的key,这个优化将会生效)
虚拟列
一种用户将要划分的输入的文件名,另外一种用于文件内的块的偏移量。当hive产生非预期,或者null的结果时,可以通过虚拟列诊断查询。通过查询这写列,可以定位到那个文件,那行数据。